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

handlers.GetAllCards   A

Complexity

Conditions 2

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 12
nop 1
dl 0
loc 17
rs 9.8
c 0
b 0
f 0
1
package handlers
2
3
import (
4
	"math/rand"
5
	"memnixrest/core"
6
	"memnixrest/database"
7
	"memnixrest/models"
8
	"net/http"
9
	"strconv"
10
	"time"
11
12
	"github.com/gofiber/fiber/v2"
13
)
14
15
// GET
16
17
// GetNextCard
18
func GetNextCard(c *fiber.Ctx) error {
19
	userIDTemp := c.Params("userID")
20
	deckIDTemp := c.Params("deckID")
21
22
	userID, _ := strconv.Atoi(userIDTemp)
23
	deckID, _ := strconv.Atoi(deckIDTemp)
24
25
	res := core.FetchNextCard(c, uint(userID), uint(deckID))
26
27
	if !res.Success {
28
		return c.JSON(models.ResponseHTTP{
29
			Success: false,
30
			Message: "Next card not found",
31
			Data:    nil,
32
		})
33
	}
34
35
	return c.JSON(models.ResponseHTTP{
36
		Success: true,
37
		Message: "Success get card by ID.",
38
		Data:    res.Data,
39
	})
40
41
}
42
43
// GetTodayNextCard
44
func GetTodayNextCard(c *fiber.Ctx) error {
45
	userIDTemp := c.Params("userID")
46
	deckIDTemp := c.Params("deckID")
47
48
	userID, _ := strconv.Atoi(userIDTemp)
49
	deckID, _ := strconv.Atoi(deckIDTemp)
50
51
	res := core.FetchNextTodayCard(c, uint(userID), uint(deckID))
52
	if !res.Success {
53
		return c.JSON(models.ResponseHTTP{
54
			Success: false,
55
			Message: "No more card for today!",
56
			Data:    nil,
57
		})
58
	}
59
60
	return c.JSON(models.ResponseHTTP{
61
		Success: true,
62
		Message: "Success get card Today's card.",
63
		Data:    res.Data,
64
	})
65
}
66
67
// GetRandomDebugCard
68
func GetRandomDebugCard(c *fiber.Ctx) error {
69
	rand.Seed(time.Now().UnixNano())
70
	db := database.DBConn
71
72
	var cards []models.Card
73
	if res := db.Joins("Deck").Find(&cards); res.Error != nil {
74
75
		return c.JSON(models.ResponseHTTP{
76
			Success: false,
77
			Message: "Get All cards",
78
			Data:    nil,
79
		})
80
	}
81
82
	rdm := rand.Intn(len(cards)-0) + 0
83
84
	return c.JSON(models.ResponseHTTP{
85
		Success: true,
86
		Message: "Get All cards",
87
		Data:    cards[rdm],
88
	})
89
}
90
91
// GetAllCards
92
func GetAllCards(c *fiber.Ctx) error {
93
	db := database.DBConn
94
95
	var cards []models.Card
96
97
	if res := db.Joins("Deck").Find(&cards); res.Error != nil {
98
99
		return c.JSON(models.ResponseHTTP{
100
			Success: false,
101
			Message: "Get All cards",
102
			Data:    nil,
103
		})
104
	}
105
	return c.JSON(models.ResponseHTTP{
106
		Success: true,
107
		Message: "Get All cards",
108
		Data:    cards,
109
	})
110
111
}
112
113
// GetCardByID
114
func GetCardByID(c *fiber.Ctx) error {
115
	id := c.Params("id")
116
	db := database.DBConn
117
118
	card := new(models.Card)
119
120
	if err := db.Joins("Deck").First(&card, id).Error; err != nil {
121
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
122
			Success: false,
123
			Message: err.Error(),
124
			Data:    nil,
125
		})
126
	}
127
128
	return c.JSON(models.ResponseHTTP{
129
		Success: true,
130
		Message: "Success get card by ID.",
131
		Data:    *card,
132
	})
133
}
134
135
// GetCardsFromDeck
136
func GetCardsFromDeck(c *fiber.Ctx) error {
137
	id := c.Params("deckID")
138
	db := database.DBConn
139
140
	var cards []models.Card
141
142
	if err := db.Joins("Deck").Where("cards.deck_id = ?", id).Find(&cards).Error; err != nil {
143
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
144
			Success: false,
145
			Message: err.Error(),
146
			Data:    nil,
147
		})
148
	}
149
150
	return c.JSON(models.ResponseHTTP{
151
		Success: true,
152
		Message: "Success get cards by ID.",
153
		Data:    cards,
154
	})
155
}
156
157
// POST
158
159
// CreateNewCard
160
func CreateNewCard(c *fiber.Ctx) error {
161
	db := database.DBConn
162
163
	card := new(models.Card)
164
165
	if err := c.BodyParser(&card); err != nil {
166
		return c.Status(http.StatusBadRequest).JSON(models.ResponseHTTP{
167
			Success: false,
168
			Message: err.Error(),
169
			Data:    nil,
170
		})
171
	}
172
173
	db.Preload("Deck").Create(card)
174
175
	return c.JSON(models.ResponseHTTP{
176
		Success: true,
177
		Message: "Success register a card",
178
		Data:    *card,
179
	})
180
}
181