Passed
Push — main ( 19cade...5376e4 )
by Yume
01:03
created

controllers.GetUserByDiscordID   A

Complexity

Conditions 2

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 15
nop 1
dl 0
loc 22
rs 9.65
c 0
b 0
f 0
1
package controllers
2
3
import (
4
	"memnixrest/app/database"
5
	"memnixrest/app/models"
6
	"net/http"
7
8
	"github.com/gofiber/fiber/v2"
9
)
10
11
// GET
12
13
// GetAllUsers method to get all users
14
// @Description Get all users.  Shouldn't really be used
15
// @Summary get a list of user
16
// @Tags User
17
// @Produce json
18
// @Success 200 {object} models.User
19
// @Router /v1/users [get]
20
func GetAllUsers(c *fiber.Ctx) error {
21
	db := database.DBConn // DB Conn
22
23
	auth := CheckAuth(c, models.PermAdmin) // Check auth
24
	if !auth.Success {
25
		return c.Status(http.StatusUnauthorized).JSON(models.ResponseHTTP{
26
			Success: false,
27
			Message: auth.Message,
28
			Data:    nil,
29
			Count:   0,
30
		})
31
	}
32
33
	var users []models.User
34
35
	if res := db.Find(&users); res.Error != nil {
36
37
		return c.Status(http.StatusInternalServerError).JSON(models.ResponseHTTP{
38
			Success: false,
39
			Message: "Failed to get all users",
40
			Data:    nil,
41
			Count:   0,
42
		})
43
	}
44
	return c.Status(http.StatusOK).JSON(models.ResponseHTTP{
45
		Success: true,
46
		Message: "Get all users",
47
		Data:    users,
48
		Count:   len(users),
49
	})
50
51
}
52
53
// GetUserByID method to get an user
54
// @Description Get an user by ID.
55
// @Summary get an user
56
// @Tags User
57
// @Produce json
58
// @Param id path int true "ID"
59
// @Success 200 {object} models.User
60
// @Router /v1/users/id/{id} [get]
61
func GetUserByID(c *fiber.Ctx) error {
62
	db := database.DBConn // DB Conn
63
64
	auth := CheckAuth(c, models.PermAdmin) // Check auth
65
	if !auth.Success {
66
		return c.Status(http.StatusUnauthorized).JSON(models.ResponseHTTP{
67
			Success: false,
68
			Message: auth.Message,
69
			Data:    nil,
70
			Count:   0,
71
		})
72
	}
73
	// Params
74
	id := c.Params("id")
75
76
	user := new(models.User)
77
78
	if err := db.First(&user, id).Error; err != nil {
79
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
80
			Success: false,
81
			Message: err.Error(),
82
			Data:    nil,
83
			Count:   0,
84
		})
85
	}
86
87
	return c.Status(http.StatusOK).JSON(models.ResponseHTTP{
88
		Success: true,
89
		Message: "Success get user by ID.",
90
		Data:    *user,
91
		Count:   1,
92
	})
93
}
94
95
// PUT
96
97
// UpdateUserByID
98
func UpdateUserByID(c *fiber.Ctx) error {
99
	db := database.DBConn // DB Conn
100
101
	// Params
102
	id := c.Params("id")
103
104
	auth := CheckAuth(c, models.PermAdmin) // Check auth
105
	if !auth.Success {
106
		return c.Status(http.StatusUnauthorized).JSON(models.ResponseHTTP{
107
			Success: false,
108
			Message: auth.Message,
109
			Data:    nil,
110
			Count:   0,
111
		})
112
	}
113
114
	user := new(models.User)
115
116
	if err := db.First(&user, id).Error; err != nil {
117
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
118
			Success: false,
119
			Message: err.Error(),
120
			Data:    nil,
121
			Count:   0,
122
		})
123
	}
124
125
	if err := UpdateUser(c, user); err != nil {
126
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
127
			Success: false,
128
			Message: "Couldn't update the user",
129
			Data:    nil,
130
			Count:   0,
131
		})
132
	}
133
134
	return c.Status(http.StatusOK).JSON(models.ResponseHTTP{
135
		Success: true,
136
		Message: "Success update user by ID",
137
		Data:    *user,
138
		Count:   1,
139
	})
140
}
141
142
// UpdateUser
143
func UpdateUser(c *fiber.Ctx, u *models.User) error {
144
	db := database.DBConn
145
146
	if err := c.BodyParser(&u); err != nil {
147
		return c.Status(http.StatusBadRequest).JSON(models.ResponseHTTP{
148
			Success: false,
149
			Message: err.Error(),
150
			Data:    nil,
151
			Count:   0,
152
		})
153
	}
154
155
	db.Save(u)
156
157
	return nil
158
}
159