Passed
Push — main ( d8ef6c...49e707 )
by Yume
01:06
created

handlers/access.go   A

Size/Duplication

Total Lines 175
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 15
eloc 98
dl 0
loc 175
rs 10
c 0
b 0
f 0
1
package handlers
2
3
import (
4
	"memnixrest/database"
5
	"memnixrest/models"
6
	"net/http"
7
	"time"
8
9
	"github.com/gofiber/fiber/v2"
10
)
11
12
// GET
13
14
// GetAllAccesses
15
func GetAllAccesses(c *fiber.Ctx) error {
16
	db := database.DBConn
17
18
	var accesses []models.Access
19
20
	if res := db.Joins("User").Joins("Deck").Find(&accesses); res.Error != nil {
21
22
		return c.JSON(models.ResponseHTTP{
23
			Success: false,
24
			Message: "Get All accesses",
25
			Data:    nil,
26
		})
27
	}
28
	return c.JSON(models.ResponseHTTP{
29
		Success: true,
30
		Message: "Get All accesses",
31
		Data:    accesses,
32
	})
33
}
34
35
// GetAllAccesses
36
func GetAccessesByUserID(c *fiber.Ctx) error {
37
	db := database.DBConn
38
39
	userID := c.Params("userID")
40
41
	var accesses []models.Access
42
43
	if res := db.Joins("User").Joins("Deck").Where("accesses.user_id = ?", userID).Find(&accesses); res.Error != nil {
44
45
		return c.JSON(models.ResponseHTTP{
46
			Success: false,
47
			Message: "Get All accesses",
48
			Data:    nil,
49
		})
50
	}
51
	return c.JSON(models.ResponseHTTP{
52
		Success: true,
53
		Message: "Get All accesses",
54
		Data:    accesses,
55
	})
56
57
}
58
59
// GetAccessByID
60
func GetAccessByID(c *fiber.Ctx) error {
61
	id := c.Params("id")
62
	db := database.DBConn
63
64
	access := new(models.Access)
65
66
	if err := db.Joins("User").Joins("Deck").First(&access, id).Error; err != nil {
67
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
68
			Success: false,
69
			Message: err.Error(),
70
			Data:    nil,
71
		})
72
	}
73
74
	return c.JSON(models.ResponseHTTP{
75
		Success: true,
76
		Message: "Success get access by ID.",
77
		Data:    *access,
78
	})
79
}
80
81
// GetAccessByUserAndDeckID
82
func GetAccessByUserAndDeckID(c *fiber.Ctx) error {
83
	userID := c.Params("userID")
84
	deckID := c.Params("deckID")
85
86
	db := database.DBConn
87
88
	access := new(models.Access)
89
90
	if err := db.Joins("User").Joins("Deck").Where("accesses.user_id = ? AND accesses.deck_id = ?", userID, deckID).First(&access).Error; err != nil {
91
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
92
			Success: false,
93
			Message: err.Error(),
94
			Data:    nil,
95
		})
96
	}
97
98
	return c.JSON(models.ResponseHTTP{
99
		Success: true,
100
		Message: "Success get access by ID.",
101
		Data:    *access,
102
	})
103
}
104
105
// POST
106
107
// CreateNewAccess
108
func CreateNewAccess(c *fiber.Ctx) error {
109
	db := database.DBConn
110
111
	access := new(models.Access)
112
113
	if err := c.BodyParser(&access); err != nil {
114
		return c.Status(http.StatusBadRequest).JSON(models.ResponseHTTP{
115
			Success: false,
116
			Message: err.Error(),
117
			Data:    nil,
118
		})
119
	}
120
121
	var cards []models.Card
122
123
	if err := db.Joins("Deck").Where("cards.deck_id = ?", access.DeckID).Find(&cards).Error; err != nil {
124
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
125
			Success: false,
126
			Message: err.Error(),
127
			Data:    nil,
128
		})
129
	}
130
131
	for x := 0; x < len(cards); x++ {
132
		mem := new(models.Mem)
133
134
		if err := db.Where("mems.user_id = ? AND mems.card_id = ?", access.UserID, cards[x].ID).First(&mem).Error; err != nil {
135
			mem.CardID = cards[x].ID
136
			mem.UserID = access.UserID
137
			mem.DeckID = access.DeckID
138
			mem.Efactor = 2.5
139
			mem.Interval = 0
140
			mem.Total = 0
141
			mem.NextDate = time.Now()
142
			mem.Quality = 0
143
			mem.Repetition = 0
144
145
			db.Preload("User").Preload("Card").Create(mem)
146
		}
147
148
	}
149
150
	db.Preload("User").Preload("Deck").Create(access)
151
152
	return c.JSON(models.ResponseHTTP{
153
		Success: true,
154
		Message: "Success register an access",
155
		Data:    *access,
156
	})
157
}
158
159
// PUT
160
161
// UpdateAccessByID
162
func UpdateAccessByID(c *fiber.Ctx) error {
163
	db := database.DBConn
164
	id := c.Params("id")
165
166
	access := new(models.Access)
167
168
	if err := db.First(&access, id).Error; err != nil {
169
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
170
			Success: false,
171
			Message: err.Error(),
172
			Data:    nil,
173
		})
174
	}
175
176
	if err := UpdateAccess(c, access); err != nil {
177
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
178
			Success: false,
179
			Message: "Couldn't update the access",
180
			Data:    nil,
181
		})
182
	}
183
184
	return c.JSON(models.ResponseHTTP{
185
		Success: true,
186
		Message: "Success update access by Id.",
187
		Data:    *access,
188
	})
189
}
190
191
// UpdateAccess
192
func UpdateAccess(c *fiber.Ctx, a *models.Access) error {
193
	db := database.DBConn
194
195
	if err := c.BodyParser(&a); err != nil {
196
		return c.Status(http.StatusBadRequest).JSON(models.ResponseHTTP{
197
			Success: false,
198
			Message: err.Error(),
199
			Data:    nil,
200
		})
201
	}
202
203
	db.Preload("User").Preload("Deck").Save(a)
204
205
	return nil
206
}
207