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

handlers.UpdateAccess   A

Complexity

Conditions 2

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

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