package controller import ( "net/http" "users_management/m/middleware" "users_management/m/model/dto" "users_management/m/usecase" "users_management/m/utils/common" "github.com/gin-gonic/gin" ) type UsersController struct { uc usecase.UsersUsecase ac usecase.AuthUsecase rg *gin.RouterGroup } func (uc *UsersController) Route() { rg:= uc.rg.Group("/users") rg.Use(middleware.CORSMiddleware()) rg.Use(middleware.RateLoginMiddleware()) rg.OPTIONS("/login", func(c *gin.Context) { c.Status(http.StatusNoContent) }) { rg.POST("/login", uc.Login()) } rg.POST("/logout", uc.Logout()) } func NewUsersController(uc usecase.UsersUsecase, ac usecase.AuthUsecase,rg *gin.RouterGroup) *UsersController { return &UsersController{ uc: uc, ac: ac, rg: rg, } } func (uc *UsersController) Login() gin.HandlerFunc { return func(c *gin.Context) { var login dto.UserLoginDTO err := c.ShouldBindJSON(&login) if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) return } token, err := uc.ac.Login(login) if err != nil { common.ErrorResponses(c, http.StatusUnauthorized, err.Error()) return } common.SingleResponses(c, "Login success", gin.H{"token": token}) } } func (uc *UsersController) Logout() gin.HandlerFunc { return func(c *gin.Context) { token := c.GetHeader("Authorization") err := uc.ac.Logout(token) if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) return } common.SingleResponses(c, "Logout success", nil) } }