Passed
Push — main ( d74cee...d8ef6c )
by Yume
01:23
created

core/memnix.go   A

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 16
eloc 52
dl 0
loc 83
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A core.GetUser 0 10 2
A core.FetchNextTodayCard 0 3 1
D core.UpdateMem 0 46 12
A core.FetchNextCard 0 3 1
1
package core
2
3
import (
4
	"memnixrest/database"
5
	"memnixrest/models"
6
	"time"
7
8
	"github.com/gofiber/fiber/v2"
9
)
10
11
// GetUser
12
func GetUser(userID uint) models.User {
13
	db := database.DBConn
14
15
	user := new(models.User)
16
17
	if err := db.First(&user, userID).Error; err != nil {
18
		return *user
19
	}
20
21
	return *user
22
}
23
24
// FetchNextTodayCard
25
func FetchNextTodayCard(c *fiber.Ctx, userID uint, deckID uint) models.ResponseHTTP {
26
	user := GetUser(userID)
27
	return FetchNextTodayMemByUserAndDeck(c, &user, deckID)
28
29
}
30
31
// FetchNextCard
32
func FetchNextCard(c *fiber.Ctx, userID uint, deckID uint) models.ResponseHTTP {
33
	user := GetUser(userID)
34
	return FetchNextMemByUserAndDeck(c, &user, deckID)
35
}
36
37
// UpdateMem
38
func UpdateMem(c *fiber.Ctx, r *models.Revision, mem *models.Mem) {
39
	db := database.DBConn
40
41
	if r.Result {
42
		if mem.Repetition == 0 {
43
			mem.Interval = 1
44
		} else if mem.Repetition == 1 {
45
			mem.Interval = 2
46
		} else if mem.Repetition == 2 {
47
			mem.Interval = 3
48
		} else if mem.Repetition == 3 {
49
			mem.Interval = 6
50
		} else {
51
			mem.Interval = uint((float32(mem.Interval) * mem.Efactor)) + 1
52
		}
53
54
		mem.Repetition += 1
55
56
		if mem.Repetition >= 3 {
57
			mem.Quality = 5
58
		} else {
59
			mem.Quality = 4
60
		}
61
	} else {
62
		mem.Repetition = 0
63
		mem.Interval = 0
64
		if mem.Repetition >= 3 {
65
			mem.Quality = 3
66
		} else if mem.Repetition < 3 && mem.Repetition >= 1 {
67
			mem.Quality = 2
68
		} else if mem.Total < 2 {
69
			mem.Quality = 1
70
		} else {
71
			mem.Quality = 0
72
		}
73
	}
74
75
	mem.Efactor = mem.Efactor + (0.1 - (5.0-float32(mem.Quality))*(0.08+(5-float32(mem.Quality)))*0.02)
76
77
	if mem.Efactor < 1.3 {
78
		mem.Efactor = 1.3
79
	}
80
81
	mem.NextDate = time.Now().AddDate(0, 0, int(mem.Interval))
82
83
	db.Save(mem)
84
}
85