package controllers import ( "net/http" "situkang/dto" "situkang/services" "situkang/utils" "github.com/gin-gonic/gin" ) type AuthController interface { Register(ctx *gin.Context) Login(ctx *gin.Context) Refresh(ctx *gin.Context) Logout(ctx *gin.Context) ForgotPassword(ctx *gin.Context) ResetPassword(ctx *gin.Context) } type authController struct { authService services.AuthService } func NewAuthController(authService services.AuthService) AuthController { return &authController{authService: authService} } func (ac *authController) Register(ctx *gin.Context) { req := RequestJSON[dto.AuthRegisterRequest](ctx) if ctx.IsAborted() { return } data, err := ac.authService.Register(ctx, req) if err != nil { utils.ResponseFAILED(ctx, nil, err) return } utils.JSONSuccess(ctx, http.StatusCreated, "Registrasi berhasil", data, nil) } func (ac *authController) Login(ctx *gin.Context) { req := RequestJSON[dto.AuthLoginRequest](ctx) if ctx.IsAborted() { return } data, err := ac.authService.Login(ctx, req) if err != nil { utils.ResponseFAILED(ctx, nil, err) return } utils.JSONSuccess(ctx, http.StatusOK, "", data, nil) } func (ac *authController) Refresh(ctx *gin.Context) { req := RequestJSON[dto.AuthRefreshRequest](ctx) if ctx.IsAborted() { return } data, err := ac.authService.Refresh(ctx, req) if err != nil { utils.ResponseFAILED(ctx, nil, err) return } utils.JSONSuccess(ctx, http.StatusOK, "", data, nil) } func (ac *authController) Logout(ctx *gin.Context) { err := ac.authService.Logout(ctx) if err != nil { utils.ResponseFAILED(ctx, nil, err) return } utils.JSONSuccess(ctx, http.StatusOK, "Berhasil logout", gin.H{}, nil) } func (ac *authController) ForgotPassword(ctx *gin.Context) { req := RequestJSON[dto.AuthForgotPasswordRequest](ctx) if ctx.IsAborted() { return } err := ac.authService.ForgotPassword(ctx, req) if err != nil { utils.ResponseFAILED(ctx, nil, err) return } utils.JSONSuccess(ctx, http.StatusOK, "Link reset password telah dikirim", gin.H{}, nil) } func (ac *authController) ResetPassword(ctx *gin.Context) { req := RequestJSON[dto.AuthResetPasswordRequest](ctx) if ctx.IsAborted() { return } err := ac.authService.ResetPassword(ctx, req) if err != nil { utils.ResponseFAILED(ctx, nil, err) return } utils.JSONSuccess(ctx, http.StatusOK, "Password berhasil direset", gin.H{}, nil) }