Passed
Push — main ( 961bc3...87c9df )
by Yume
01:10
created

core/memnix.go   A

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 11
eloc 42
dl 0
loc 73
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
A core.FetchNextCard 0 3 1
B core.UpdateMem 0 36 7
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
	} else {
57
		mem.Repetition = 0
58
		mem.Interval = 0
59
60
	}
61
62
	mem.Quality = r.Quality
63
64
	mem.Efactor = mem.Efactor + (0.1 - (5.0-float32(mem.Quality))*(0.08+(5-float32(mem.Quality)))*0.02)
65
66
	if mem.Efactor < 1.3 {
67
		mem.Efactor = 1.3
68
	}
69
70
	mem.NextDate = time.Now().AddDate(0, 0, int(mem.Interval))
71
	mem.Total++
72
73
	db.Save(mem)
74
}
75