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

core.FetchNextTodayMemByUserAndDeck   A

Complexity

Conditions 2

Size

Total Lines 18
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 15
nop 3
dl 0
loc 18
rs 9.65
c 0
b 0
f 0
1
package core
2
3
import (
4
	"memnixrest/database"
5
	"memnixrest/models"
6
	"time"
7
8
	"github.com/gofiber/fiber/v2"
9
)
10
11
// GetMemByID
12
func GetMemByID(c *fiber.Ctx, id uint) models.Mem {
13
	db := database.DBConn
14
	mem := new(models.Mem)
15
16
	if err := db.Joins("User").Joins("Card").First(&mem, id).Error; err != nil {
17
		return *mem
18
	}
19
	return *mem
20
}
21
22
// GetMemByCardAndUser
23
func GetMemByCardAndUser(c *fiber.Ctx, userID uint, cardID uint) models.Mem {
24
25
	db := database.DBConn
26
27
	mem := new(models.Mem)
28
29
	if err := db.Joins("User").Joins("Card").Where("mems.user_id = ? AND mems.card_id = ?", userID, cardID).First(&mem).Error; err != nil {
30
		return *mem
31
		// TODO: Handle errors
32
	}
33
	return *mem
34
}
35
36
// FetchNextTodayMemByUserAndDeck
37
func FetchNextTodayMemByUserAndDeck(c *fiber.Ctx, user *models.User, deck_id uint) models.ResponseHTTP {
38
	db := database.DBConn
39
	mem := new(models.Mem)
40
	// Get next card with date condition
41
	t := time.Now()
42
	if err := db.Joins("Card").Joins("User").Joins("Deck").Where("mems.user_id = ? AND mems.deck_id =? AND mems.next_date < ?",
43
		&user.ID, deck_id, t.AddDate(0, 0, 1).Add(
44
			time.Duration(-t.Hour())*time.Hour)).Limit(1).Order("next_date asc").Find(&mem).Error; err != nil {
45
		return models.ResponseHTTP{
46
			Success: false,
47
			Message: "Next today mem not found",
48
			Data:    nil,
49
		}
50
	}
51
	return models.ResponseHTTP{
52
		Success: true,
53
		Message: "Get Next Today Mem",
54
		Data:    *mem,
55
	}
56
}
57
58
// FetchNextMemByUserAndDeck
59
func FetchNextMemByUserAndDeck(c *fiber.Ctx, user *models.User, deck_id uint) models.ResponseHTTP {
60
	db := database.DBConn
61
	mem := new(models.Mem)
62
63
	if err := db.Joins("Card").Joins("User").Joins("Deck").Where("mems.user_id = ? AND mems.deck_id =?", &user.ID, deck_id).Limit(1).Order("next_date asc").Find(&mem).Error; err != nil {
64
		return models.ResponseHTTP{
65
			Success: false,
66
			Message: "Next mem not found",
67
			Data:    nil,
68
		}
69
70
	}
71
	return models.ResponseHTTP{
72
		Success: true,
73
		Message: "Get Next Mem",
74
		Data:    *mem,
75
	}
76
}
77