Passed
Push — main ( ec8dc2...0c32c3 )
by Yume
01:06
created

handlers.GetTodayNextCard   A

Complexity

Conditions 2

Size

Total Lines 22
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 17
nop 1
dl 0
loc 22
rs 9.55
c 0
b 0
f 0
1
package handlers
2
3
import (
4
	"math/rand"
5
	"memnixrest/database"
6
	"memnixrest/models"
7
	"net/http"
8
	"time"
9
10
	"github.com/gofiber/fiber/v2"
11
)
12
13
// GET
14
15
// DEBUG: GetRandomDebugCard
16
func GetRandomDebugCard(c *fiber.Ctx) error {
17
	rand.Seed(time.Now().UnixNano()) // Random seed
18
19
	db := database.DBConn // DB Conn
20
21
	var cards []models.Card
22
	if res := db.Joins("Deck").Find(&cards); res.Error != nil {
23
24
		return c.JSON(models.ResponseHTTP{
25
			Success: false,
26
			Message: "Failed to get a random card",
27
			Data:    nil,
28
			Count:   0,
29
		})
30
	}
31
32
	rdm := rand.Intn(len(cards)-0) + 0
33
34
	return c.JSON(models.ResponseHTTP{
35
		Success: true,
36
		Message: "Get a random card",
37
		Data:    cards[rdm],
38
		Count:   len(cards),
39
	})
40
}
41
42
// GetAllCards
43
func GetAllCards(c *fiber.Ctx) error {
44
	db := database.DBConn // DB Conn
45
46
	var cards []models.Card
47
48
	if res := db.Joins("Deck").Find(&cards); res.Error != nil {
49
50
		return c.JSON(models.ResponseHTTP{
51
			Success: false,
52
			Message: "Failed to get all cards",
53
			Data:    nil,
54
			Count:   0,
55
		})
56
	}
57
	return c.JSON(models.ResponseHTTP{
58
		Success: true,
59
		Message: "Get All cards",
60
		Data:    cards,
61
		Count:   len(cards),
62
	})
63
64
}
65
66
// GetCardByID
67
func GetCardByID(c *fiber.Ctx) error {
68
	db := database.DBConn // DB Conn
69
70
	// Params
71
	id := c.Params("id")
72
73
	card := new(models.Card)
74
75
	if err := db.Joins("Deck").First(&card, id).Error; err != nil {
76
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
77
			Success: false,
78
			Message: err.Error(),
79
			Data:    nil,
80
			Count:   0,
81
		})
82
	}
83
84
	return c.JSON(models.ResponseHTTP{
85
		Success: true,
86
		Message: "Success get card by ID.",
87
		Data:    *card,
88
		Count:   1,
89
	})
90
}
91
92
// GetCardsFromDeck
93
func GetCardsFromDeck(c *fiber.Ctx) error {
94
	db := database.DBConn // DB Conn
95
96
	// Params
97
	id := c.Params("deckID")
98
99
	var cards []models.Card
100
101
	if err := db.Joins("Deck").Where("cards.deck_id = ?", id).Find(&cards).Error; err != nil {
102
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
103
			Success: false,
104
			Message: err.Error(),
105
			Data:    nil,
106
			Count:   0,
107
		})
108
	}
109
110
	return c.JSON(models.ResponseHTTP{
111
		Success: true,
112
		Message: "Success get cards from deck.",
113
		Data:    cards,
114
		Count:   len(cards),
115
	})
116
}
117
118
// POST
119
120
// CreateNewCard
121
func CreateNewCard(c *fiber.Ctx) error {
122
	db := database.DBConn // DB Conn
123
124
	card := new(models.Card)
125
126
	if err := c.BodyParser(&card); err != nil {
127
		return c.Status(http.StatusBadRequest).JSON(models.ResponseHTTP{
128
			Success: false,
129
			Message: err.Error(),
130
			Data:    nil,
131
			Count:   0,
132
		})
133
	}
134
135
	db.Preload("Deck").Create(card)
136
137
	return c.JSON(models.ResponseHTTP{
138
		Success: true,
139
		Message: "Success register a card",
140
		Data:    *card,
141
		Count:   1,
142
	})
143
}
144