diff --git a/controllers/userController.go b/controllers/userController.go index 89059c4..125d845 100644 --- a/controllers/userController.go +++ b/controllers/userController.go @@ -32,25 +32,82 @@ type TokenStruct struct { token string } -func RegisterUser(c *gin.Context, user database.User) { +//func RegisterUser(c *gin.Context, user database.User) { +// db := database.Connector() +// validate := validators.Validate +// response := message.Response{Status: 200} +// if err := validate.Struct(user); err != nil { +// response.Error = libs.GetValidationErrors(err.(validator.ValidationErrors)) +// response.Status = 400 +// message.SendResponse(c, response) +// return +// } +// hash, err := bcrypt.GenerateFromPassword([]byte(user.Password), 12) +// if err != nil { +// return +// } +// user.Password = string(hash) +// if err := db.Create(user).Error; err != nil { +// return +// } +// return +//} + +func RegisterUser(c *gin.Context, register database.User) { + var user database.User db := database.Connector() validate := validators.Validate - response := message.Response{Status: 200} - if err := validate.Struct(user); err != nil { + response := message.Response{Status: 201} + var token *database.Token + + if err := validate.Struct(register); err != nil { response.Error = libs.GetValidationErrors(err.(validator.ValidationErrors)) response.Status = 400 message.SendResponse(c, response) return } - hash, err := bcrypt.GenerateFromPassword([]byte(user.Password), 12) + + if err := db.Where("email =?", register.Email).First(&user).Error; err == nil { + response.Status = 400 + response.Error = gin.H{ + "error": "User already exists", + } + message.SendResponse(c, response) + return + } + + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(register.Password), 12) if err != nil { + response.Status = 500 + response.Error = gin.H{ + "error": "Internal Server Error", + } + message.SendResponse(c, response) return } - user.Password = string(hash) - if err := db.Create(user).Error; err != nil { + + user.Email = register.Email + user.Password = string(hashedPassword) + user.Name = register.Name + + if err := db.Create(&user).Error; err != nil { + response.Status = 500 + response.Error = gin.H{ + "error": "Internal Server Error", + } + message.SendResponse(c, response) return } - return + + token.Token = generateToken() + token.UserID = user.ID + user.Tokens = append(user.Tokens, token) + + response.Message = gin.H{ + "message": "Registration Success", + } + + message.SendResponse(c, response) } func LoginUser(c *gin.Context, login types.LoginRequest) { diff --git a/main.go b/main.go index 654ed42..61e7313 100644 --- a/main.go +++ b/main.go @@ -70,15 +70,45 @@ func main() { controllers.EditManufacture(c, manufacturer) }) - //Для создания пользователя + //View для создания пользователя r.POST("/registration", func(c *gin.Context) { - var manufacturer database.Manufacturer - if err := c.ShouldBind(&manufacturer); err != nil { + var form database.User + if err := c.ShouldBind(&form); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) } - controllers.CreateManufacturer(c, manufacturer) + controllers.RegisterUser(c, form) }) + + //View для аутентификации пользователя + r.POST("/login", func(c *gin.Context) { + var register types.LoginRequest + if err := c.ShouldBind(®ister); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + } + controllers.LoginUser(c, register) + }) + //View для получения пользователя + r.GET("/user", func(c *gin.Context) {}) + + //View для редактированя пользователя + r.PATCH("/user/edit", func(c *gin.Context) { + var user database.User + if err := c.ShouldBind(&user); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + } + controllers.EditUser(c, user) + }) + + //View для удаления пользователя + r.DELETE("/user/delete", func(c *gin.Context) { + var form types.LoginRequest + if err := c.ShouldBind(&form); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + } + controllers.DeleteUser(c) + }) + err := r.Run() if err != nil { return