From 7ed986d1224e3eab89c5983d8bfa5f6754812c76 Mon Sep 17 00:00:00 2001 From: Alex <$(pass /github/email)> Date: Sun, 13 Oct 2024 13:42:39 +0200 Subject: [PATCH] add: getAllUsers --- internal/controllers/user_controller.go | 88 +++++++++++++++---------- internal/routes/routes.go | 1 + internal/services/user_service.go | 3 + 3 files changed, 56 insertions(+), 36 deletions(-) diff --git a/internal/controllers/user_controller.go b/internal/controllers/user_controller.go index bfe9ef4..c49b222 100644 --- a/internal/controllers/user_controller.go +++ b/internal/controllers/user_controller.go @@ -31,6 +31,58 @@ type RegistrationData struct { User models.User `json:"user"` } +func (uc *UserController) CurrentUserHandler(c *gin.Context) { + userIDInterface, ok := c.Get("user_id") + if !ok || userIDInterface == nil { + logger.Error.Printf("Error getting user_id from header") + c.JSON(http.StatusInternalServerError, gin.H{"errors": []gin.H{{ + "field": "general", + "key": "server.validation.no_user_id_provided", + }}}) + return + } + userID, ok := userIDInterface.(uint) + + if !ok { + logger.Error.Printf("Error: user_id is not of type uint") + c.JSON(http.StatusInternalServerError, gin.H{"errors": []gin.H{{ + "field": "user", + "key": "server.error.internal_server_error", + }}}) + return + } + + user, err := uc.Service.GetUserByID(uint(userID)) + if err != nil { + logger.Error.Printf("Error retrieving valid user: %v", err) + c.JSON(http.StatusInternalServerError, gin.H{"errors": []gin.H{{ + "field": "general", + "key": "server.error.internal_server_error", + }}}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "user": user.Safe(), + }) +} + +func (uc *UserController) GetAllUsers(c *gin.Context) { + users, err := uc.Service.GetUsers(nil) + if err != nil { + logger.Error.Printf("Error retrieving users: %v", err) + c.JSON(http.StatusInternalServerError, gin.H{"errors": []gin.H{{ + "field": "general", + "key": "server.error.internal_server_error", + }}}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "users": users, + }) +} + func (uc *UserController) UpdateHandler(c *gin.Context) { var user models.User if err := c.ShouldBindJSON(&user); err != nil { @@ -141,42 +193,6 @@ func (uc *UserController) UpdateHandler(c *gin.Context) { c.JSON(http.StatusAccepted, gin.H{"message": "User updated successfully", "user": updatedUser}) } -func (uc *UserController) CurrentUserHandler(c *gin.Context) { - userIDInterface, ok := c.Get("user_id") - if !ok || userIDInterface == nil { - logger.Error.Printf("Error getting user_id from header") - c.JSON(http.StatusInternalServerError, gin.H{"errors": []gin.H{{ - "field": "general", - "key": "server.validation.no_user_id_provided", - }}}) - return - } - userID, ok := userIDInterface.(uint) - - if !ok { - logger.Error.Printf("Error: user_id is not of type uint") - c.JSON(http.StatusInternalServerError, gin.H{"errors": []gin.H{{ - "field": "user", - "key": "server.error.internal_server_error", - }}}) - return - } - - user, err := uc.Service.GetUserByID(uint(userID)) - if err != nil { - logger.Error.Printf("Error retrieving valid user: %v", err) - c.JSON(http.StatusInternalServerError, gin.H{"errors": []gin.H{{ - "field": "general", - "key": "server.error.internal_server_error", - }}}) - return - } - - c.JSON(http.StatusOK, gin.H{ - "user": user.Safe(), - }) -} - func (uc *UserController) LogoutHandler(c *gin.Context) { tokenString, err := c.Cookie("jwt") if err != nil { diff --git a/internal/routes/routes.go b/internal/routes/routes.go index 67575da..eab221f 100644 --- a/internal/routes/routes.go +++ b/internal/routes/routes.go @@ -27,6 +27,7 @@ func RegisterRoutes(router *gin.Engine, userController *controllers.UserControll userRouter.GET("/current", userController.CurrentUserHandler) userRouter.POST("/logout", userController.LogoutHandler) userRouter.PATCH("/update", userController.UpdateHandler) + userRouter.GET("/all", userController.GetAllUsers) } membershipRouter := router.Group("/backend/membership") diff --git a/internal/services/user_service.go b/internal/services/user_service.go index 882828f..3f723e4 100644 --- a/internal/services/user_service.go +++ b/internal/services/user_service.go @@ -115,6 +115,9 @@ func (service *UserService) GetUserByEmail(email string) (*models.User, error) { } func (service *UserService) GetUsers(where map[string]interface{}) (*[]models.User, error) { + if where == nil { + where = map[string]interface{}{} + } return service.Repo.GetUsers(where) }