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

handlers.UnSubToDeck   A

Complexity

Conditions 2

Size

Total Lines 25
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 18
nop 1
dl 0
loc 25
rs 9.5
c 0
b 0
f 0
1
package handlers
2
3
import (
4
	"memnixrest/core"
5
	"memnixrest/database"
6
	"memnixrest/models"
7
	"net/http"
8
	"strconv"
9
10
	"github.com/gofiber/fiber/v2"
11
)
12
13
// GET
14
15
// GetAllDecks
16
func GetAllDecks(c *fiber.Ctx) error {
17
	db := database.DBConn // DB Conn
18
19
	var decks []models.Deck
20
21
	if res := db.Find(&decks); res.Error != nil {
22
23
		return c.JSON(models.ResponseHTTP{
24
			Success: false,
25
			Message: "Failed to get all decks",
26
			Data:    nil,
27
			Count:   0,
28
		})
29
	}
30
	return c.JSON(models.ResponseHTTP{
31
		Success: true,
32
		Message: "Get all decks",
33
		Data:    decks,
34
		Count:   len(decks),
35
	})
36
37
}
38
39
// GetDeckByID
40
func GetDeckByID(c *fiber.Ctx) error {
41
	db := database.DBConn // DB Conn
42
43
	// Params
44
	id := c.Params("id")
45
46
	deck := new(models.Deck)
47
48
	if err := db.First(&deck, id).Error; err != nil {
49
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
50
			Success: false,
51
			Message: err.Error(),
52
			Data:    nil,
53
			Count:   0,
54
		})
55
	}
56
57
	return c.JSON(models.ResponseHTTP{
58
		Success: true,
59
		Message: "Success get deck by ID.",
60
		Data:    *deck,
61
		Count:   1,
62
	})
63
}
64
65
// GetAllSubDecks
66
func GetAllSubDecks(c *fiber.Ctx) error {
67
	db := database.DBConn // DB Conn
68
69
	// Params
70
	id := c.Params("userID")
71
72
	var decks []models.Deck
73
74
	if err := db.Joins("JOIN accesses ON accesses.deck_id = decks.id AND accesses.user_id = ? AND accesses.permission > 0", id).Find(&decks).Error; err != nil {
75
		return c.JSON(models.ResponseHTTP{
76
			Success: false,
77
			Message: "Failed to get all sub decks",
78
			Data:    nil,
79
			Count:   0,
80
		})
81
	}
82
	return c.JSON(models.ResponseHTTP{
83
		Success: true,
84
		Message: "Get all sub decks",
85
		Data:    decks,
86
		Count:   len(decks),
87
	})
88
}
89
90
// GetAllPublicDecks
91
func GetAllPublicDecks(c *fiber.Ctx) error {
92
	db := database.DBConn // DB Conn
93
94
	var decks []models.Deck
95
96
	if err := db.Where("decks.status = 3").Find(&decks).Error; err != nil {
97
		return c.JSON(models.ResponseHTTP{
98
			Success: false,
99
			Message: "Failed to get all public decks",
100
			Data:    nil,
101
			Count:   0,
102
		})
103
	}
104
	return c.JSON(models.ResponseHTTP{
105
		Success: true,
106
		Message: "Get all public decks",
107
		Data:    decks,
108
		Count:   len(decks),
109
	})
110
}
111
112
// POST
113
114
// CreateNewDeck
115
func CreateNewDeck(c *fiber.Ctx) error {
116
	db := database.DBConn // DB Conn
117
118
	deck := new(models.Deck)
119
120
	if err := c.BodyParser(&deck); err != nil {
121
		return c.Status(http.StatusBadRequest).JSON(models.ResponseHTTP{
122
			Success: false,
123
			Message: err.Error(),
124
			Data:    nil,
125
			Count:   0,
126
		})
127
	}
128
129
	db.Create(deck)
130
131
	return c.JSON(models.ResponseHTTP{
132
		Success: true,
133
		Message: "Success register a deck",
134
		Data:    *deck,
135
		Count:   1,
136
	})
137
}
138
139
// UnsubToDeck
140
func UnSubToDeck(c *fiber.Ctx) error {
141
	db := database.DBConn // DB Conn
142
143
	// Params
144
	deckID := c.Params("deckID")
145
	userID := c.Params("userID")
146
147
	access := new(models.Access)
148
	if err := db.Joins("User").Joins("Deck").Where("accesses.user_id = ? AND accesses.deck_id =?", userID, deckID).Find(&access).Error; err != nil {
149
		return c.JSON(models.ResponseHTTP{
150
			Success: false,
151
			Message: "This user isn't sub to the deck",
152
			Data:    nil,
153
			Count:   0,
154
		})
155
	}
156
157
	access.Permission = 0
158
	db.Preload("User").Preload("Deck").Save(access)
159
160
	return c.JSON(models.ResponseHTTP{
161
		Success: true,
162
		Message: "Success unsub to the deck",
163
		Data:    nil,
164
		Count:   0,
165
	})
166
}
167
168
// SubToDeck
169
func SubToDeck(c *fiber.Ctx) error {
170
	deckID := c.Params("deckID")
171
	userID := c.Params("userID")
172
173
	userID_temp, _ := strconv.Atoi(userID)
174
	deckID_temp, _ := strconv.Atoi(deckID)
175
176
	db := database.DBConn
177
178
	var cards []models.Card
179
180
	if err := db.Joins("Deck").Where("cards.deck_id = ?", deckID).Find(&cards).Error; err != nil {
181
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
182
			Success: false,
183
			Message: err.Error(),
184
			Data:    nil,
185
			Count:   0,
186
		})
187
	}
188
189
	if err := core.GenerateAccess(c, uint(userID_temp), uint(deckID_temp)); !err.Success {
190
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
191
			Success: false,
192
			Message: "Couldn't generate access !",
193
			Data:    nil,
194
			Count:   0,
195
		})
196
	}
197
198
	if err := core.GenerateMem(c, uint(userID_temp), uint(deckID_temp)); !err.Success {
199
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
200
			Success: false,
201
			Message: "Couldn't generate mems !",
202
			Data:    nil,
203
			Count:   0,
204
		})
205
	}
206
207
	return c.JSON(models.ResponseHTTP{
208
		Success: true,
209
		Message: "Success subscribing to deck",
210
		Data:    nil,
211
		Count:   0,
212
	})
213
}
214