Passed
Push — main ( 26be31...19cade )
by Yume
01:25
created

pkg/core/memnix.go   A

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 14
eloc 48
dl 0
loc 73
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
F core.UpdateMem 0 62 14
1
package core
2
3
import (
4
	"memnixrest/app/database"
5
	"memnixrest/app/models"
6
	"time"
7
8
	"github.com/gofiber/fiber/v2"
9
)
10
11
// UpdateMem
12
func UpdateMem(c *fiber.Ctx, r *models.Mem, validation models.CardResponseValidation) {
13
	db := database.DBConn
14
15
	mem := new(models.Mem)
16
17
	mem.UserID = r.UserID
18
	mem.CardID = r.CardID
19
20
	var memType int
21
22
	if r.Efactor <= 1.4 || r.Quality <= 1 || r.Repetition < 2 {
23
		memType = 2
24
	}
25
26
	if validation.Validate {
27
		if r.Repetition == 0 {
28
			mem.Interval = 1
29
		} else if r.Repetition == 1 {
30
			mem.Interval = 2
31
		} else if r.Repetition == 2 {
32
			mem.Interval = 2
33
		} else if r.Repetition == 3 {
34
			mem.Interval = 3
35
		} else {
36
			mem.Interval = uint((float32(r.Interval) * r.Efactor)) + 1
37
		}
38
		mem.Repetition = r.Repetition + 1
39
		if memType == 2 {
40
			mem.Quality = 4
41
		} else {
42
			mem.Quality = 5
43
		}
44
	} else {
45
		mem.Repetition = 0
46
		mem.Interval = 0
47
		if memType == 2 {
48
			mem.Quality = 1
49
			if r.Repetition <= 1 {
50
				mem.Quality = 0
51
			}
52
		} else {
53
			mem.Quality = 3
54
		}
55
	}
56
57
	mem.Efactor = r.Efactor + (0.1 - (5.0-float32(mem.Quality))*(0.08+(5-float32(mem.Quality)))*0.02)
58
59
	if mem.Efactor < 1.3 {
60
		mem.Efactor = 1.3
61
	}
62
63
	db.Create(mem)
64
65
	memDate := new(models.MemDate)
66
67
	if err := db.Joins("Card").Joins("User").Joins("Deck").Where("mem_dates.user_id = ? AND mem_dates.card_id = ?",
68
		mem.UserID, mem.CardID).First(&memDate).Error; err != nil {
69
	}
70
71
	memDate.NextDate = time.Now().AddDate(0, 0, int(mem.Interval))
72
73
	db.Save(memDate)
74
75
	//TODO: Return error
76
}
77