Passed
Push — main ( 26be31...19cade )
by Yume
01:25
created

app/controllers/user.go   A

Size/Duplication

Total Lines 185
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 14
eloc 99
dl 0
loc 185
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A controllers.CreateNewUser 0 25 3
A controllers.UpdateUserByID 0 31 3
A controllers.GetUserByID 0 22 2
A controllers.GetUserByDiscordID 0 22 2
A controllers.UpdateUser 0 15 2
A controllers.GetAllUsers 0 19 2
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
	var users []models.User
24
25
	if res := db.Find(&users); res.Error != nil {
26
27
		return c.Status(http.StatusInternalServerError).JSON(models.ResponseHTTP{
28
			Success: false,
29
			Message: "Failed to get all users",
30
			Data:    nil,
31
			Count:   0,
32
		})
33
	}
34
	return c.Status(http.StatusOK).JSON(models.ResponseHTTP{
35
		Success: true,
36
		Message: "Get all users",
37
		Data:    users,
38
		Count:   len(users),
39
	})
40
41
}
42
43
// GetUserByID method to get an user
44
// @Description Get an user by ID.
45
// @Summary get an user
46
// @Tags User
47
// @Produce json
48
// @Param id path int true "ID"
49
// @Success 200 {object} models.User
50
// @Router /v1/users/id/{id} [get]
51
func GetUserByID(c *fiber.Ctx) error {
52
	db := database.DBConn // DB Conn
53
54
	// Params
55
	id := c.Params("id")
56
57
	user := new(models.User)
58
59
	if err := db.First(&user, id).Error; err != nil {
60
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
61
			Success: false,
62
			Message: err.Error(),
63
			Data:    nil,
64
			Count:   0,
65
		})
66
	}
67
68
	return c.Status(http.StatusOK).JSON(models.ResponseHTTP{
69
		Success: true,
70
		Message: "Success get user by ID.",
71
		Data:    *user,
72
		Count:   1,
73
	})
74
}
75
76
// GetUserByDiscordID
77
func GetUserByDiscordID(c *fiber.Ctx) error {
78
	db := database.DBConn // DB Conn
79
80
	// Params
81
	id := c.Params("discordID")
82
83
	user := new(models.User)
84
85
	if err := db.Where("users.discord_id = ?", id).First(&user).Error; err != nil {
86
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
87
			Success: false,
88
			Message: err.Error(),
89
			Data:    nil,
90
			Count:   0,
91
		})
92
	}
93
94
	return c.Status(http.StatusOK).JSON(models.ResponseHTTP{
95
		Success: true,
96
		Message: "Success get user by discordID.",
97
		Data:    *user,
98
		Count:   1,
99
	})
100
}
101
102
// POST
103
104
// CreateNewUser
105
func CreateNewUser(c *fiber.Ctx) error {
106
	db := database.DBConn // DB Conn
107
108
	user := new(models.User)
109
110
	if err := c.BodyParser(&user); err != nil {
111
		return c.Status(http.StatusBadRequest).JSON(models.ResponseHTTP{
112
			Success: false,
113
			Message: err.Error(),
114
			Data:    nil,
115
			Count:   0,
116
		})
117
	}
118
119
	if err := db.Where("users.discord_id = ?", user.DiscordID).First(&user).Error; err != nil {
120
		db.Create(user)
121
	} else {
122
		db.Save(user)
123
	}
124
125
	return c.Status(http.StatusOK).JSON(models.ResponseHTTP{
126
		Success: true,
127
		Message: "Success register an user",
128
		Data:    *user,
129
		Count:   1,
130
	})
131
}
132
133
// PUT
134
135
// UpdateUserByID
136
func UpdateUserByID(c *fiber.Ctx) error {
137
	db := database.DBConn // DB Conn
138
139
	// Params
140
	id := c.Params("id")
141
142
	user := new(models.User)
143
144
	if err := db.First(&user, id).Error; err != nil {
145
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
146
			Success: false,
147
			Message: err.Error(),
148
			Data:    nil,
149
			Count:   0,
150
		})
151
	}
152
153
	if err := UpdateUser(c, user); err != nil {
154
		return c.Status(http.StatusServiceUnavailable).JSON(models.ResponseHTTP{
155
			Success: false,
156
			Message: "Couldn't update the user",
157
			Data:    nil,
158
			Count:   0,
159
		})
160
	}
161
162
	return c.Status(http.StatusOK).JSON(models.ResponseHTTP{
163
		Success: true,
164
		Message: "Success update user by ID",
165
		Data:    *user,
166
		Count:   1,
167
	})
168
}
169
170
// UpdateUser
171
func UpdateUser(c *fiber.Ctx, u *models.User) error {
172
	db := database.DBConn
173
174
	if err := c.BodyParser(&u); err != nil {
175
		return c.Status(http.StatusBadRequest).JSON(models.ResponseHTTP{
176
			Success: false,
177
			Message: err.Error(),
178
			Data:    nil,
179
			Count:   0,
180
		})
181
	}
182
183
	db.Save(u)
184
185
	return nil
186
}
187