Passed
Pull Request — main (#20)
by Yume
01:36
created

models.*MemDate.ComputeNextDate   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
package models
2
3
import (
4
	"memnixrest/pkg/database"
5
	"time"
6
7
	"gorm.io/gorm"
8
)
9
10
// MemDate structure
11
type MemDate struct {
12
	gorm.Model
13
	UserID   uint `json:"user_id" example:"1"`
14
	User     User
15
	CardID   uint `json:"card_id" example:"1"`
16
	Card     Card
17
	DeckID   uint `json:"deck_id" example:"1"`
18
	Deck     Deck
19
	NextDate time.Time `json:"next_date" example:"06/01/2003"` // gorm:"autoCreateTime"`
20
}
21
22
func (m *MemDate) ComputeNextDate(interval int) {
23
	m.NextDate = time.Now().AddDate(0, 0, interval)
24
}
25
26
func (m *MemDate) Generate(userID, cardID uint, deckID uint) {
27
	m.UserID = userID
28
	m.CardID = cardID
29
	m.DeckID = deckID
30
	m.NextDate = time.Now()
31
}
32
33
func (m *MemDate) GetNextToday(userID uint) *ResponseHTTP {
34
	db := database.DBConn // DB Conn
35
	res := new(ResponseHTTP)
36
37
	// Get next card with date condition
38
	t := time.Now()
39
	if err := db.Joins(
40
		"left join accesses ON mem_dates.deck_id = accesses.deck_id AND accesses.user_id = ?",
41
		userID).Joins("Card").Joins("Deck").Where("mem_dates.user_id = ? AND mem_dates.next_date < ? AND accesses.permission >= ?",
42
		userID, t.AddDate(0, 0, 1).Add(
43
			time.Duration(-t.Hour())*time.Hour), AccessStudent).Limit(1).Order("next_date asc").Find(&m).Error; err != nil {
44
		res.GenerateError("Next today memDate not found")
45
		return res
46
	}
47
48
	res.GenerateSuccess("Success getting next today memDate", nil, 0)
49
50
	return res
51
}
52
53
func (m *MemDate) GetNext(userID uint) *ResponseHTTP {
54
	db := database.DBConn // DB Conn
55
	res := new(ResponseHTTP)
56
57
	// Get next card
58
	if err := db.Joins(
59
		"left join accesses ON mem_dates.deck_id = accesses.deck_id AND accesses.user_id = ?",
60
		userID).Joins("Card").Joins("Deck").Where("mem_dates.user_id = ? AND accesses.permission >= ?",
61
		userID, AccessStudent).Limit(1).Order("next_date asc").Find(&m).Error; err != nil {
62
		res.GenerateError("Next memDate not found")
63
		return res
64
	}
65
66
	res.GenerateSuccess("Success getting next memDate", nil, 0)
67
68
	return res
69
}
70
71
func (m *MemDate) GetNextByDeck(userID, deckID uint) *ResponseHTTP {
72
	db := database.DBConn // DB Conn
73
	res := new(ResponseHTTP)
74
75
	// Get next card  with deck condition
76
	if err := db.Joins("Card").Joins("User").Joins("Deck").Where("mem_dates.user_id = ? AND mem_dates.deck_id = ?",
77
		userID, deckID).Limit(1).Order("next_date asc").Find(&m).Error; err != nil {
78
		res.GenerateError("Next memDate by deck not found")
79
		return res
80
	}
81
82
	res.GenerateSuccess("Success getting next memDate by deck", nil, 0)
83
84
	return res
85
}
86