NAM-APJATEL-BACKEND/delivery/controller/users_controller.go

75 lines
1.5 KiB
Go

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,role,name, 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, "role": role, "name": name})
}
}
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)
}
}