Passed
Push — main ( 3865bb...da977d )
by Yume
01:29 queued 12s
created

core.ComputeInterval   A

Complexity

Conditions 5

Size

Total Lines 10
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 10
nop 1
dl 0
loc 10
rs 9.3333
c 0
b 0
f 0
1
package core
2
3
import (
4
	"memnixrest/app/models"
5
	"memnixrest/pkg/database"
6
	"time"
7
8
	"github.com/gofiber/fiber/v2"
9
)
10
11
func ComputeQualitySuccess(memType models.CardType, repetition uint) uint {
12
13
	if memType == models.CardMCQ {
14
		return 3
15
	} else {
16
		if repetition > 3 {
17
			return 5
18
		}
19
		return 4
20
	}
21
}
22
23
func ComputeQualityFailed(memType models.CardType, repetition uint) uint {
24
	if memType == models.CardMCQ {
25
		if repetition <= 3 {
26
			return 0
27
		}
28
		return 1
29
	}
30
	if repetition <= 4 {
31
		return 1
32
	}
33
	return 2
34
35
}
36
37
func UpdateMemDate(mem *models.Mem) {
38
	db := database.DBConn
39
40
	memDate := new(models.MemDate)
41
42
	_ = db.Joins("Card").Joins("User").Joins("Deck").Where("mem_dates.user_id = ? AND mem_dates.card_id = ?",
43
		mem.UserID, mem.CardID).First(&memDate).Error
44
45
	memDate.NextDate = time.Now().AddDate(0, 0, int(mem.Interval))
46
47
	db.Save(memDate)
48
49
	//TODO: Return error
50
51
}
52
53
func UpdateMemTraining(r *models.Mem, validation *models.CardResponseValidation) {
54
	db := database.DBConn
55
56
	mem := new(models.Mem)
57
58
	mem.UserID, mem.CardID = r.UserID, r.CardID
59
60
	memType := r.GetMemType()
61
62
	if validation.Validate {
63
		r.Quality = ComputeQualitySuccess(memType, r.Repetition)
64
	} else {
65
		r.Quality = ComputeQualityFailed(memType, r.Repetition)
66
	}
67
68
	mem.ComputeTrainingEfactor(r.Efactor, r.Quality)
69
	mem.Interval = r.Interval
70
	mem.Repetition = r.Repetition
71
72
	db.Save(r)
73
	db.Create(mem)
74
}
75
76
// UpdateMem function
77
func UpdateMem(_ *fiber.Ctx, r *models.Mem, validation *models.CardResponseValidation) {
78
79
	db := database.DBConn
80
81
	mem := new(models.Mem)
82
83
	mem.UserID, mem.CardID = r.UserID, r.CardID
84
85
	memType := r.GetMemType()
86
87
	if validation.Validate {
88
		mem.ComputeInterval(r.Interval, r.Efactor, r.Repetition)
89
		mem.Repetition = r.Repetition + 1
90
		r.Quality = ComputeQualitySuccess(memType, r.Repetition)
91
92
	} else {
93
		mem.Repetition = 0
94
		mem.Interval = 0
95
96
		r.Quality = ComputeQualityFailed(memType, r.Repetition)
97
	}
98
99
	mem.ComputeEfactor(r.Efactor, r.Quality)
100
101
	db.Save(r)
102
	db.Create(mem)
103
104
	UpdateMemDate(mem)
105
106
}
107