Spaces:
Runtime error
Runtime error
| package controllers | |
| import ( | |
| "abdanhafidz.com/go-boilerplate/models/dto" | |
| "abdanhafidz.com/go-boilerplate/services" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| type OTPVerificationController interface { | |
| RequestOTP(ctx *gin.Context) | |
| VerifyOTP(ctx *gin.Context) | |
| } | |
| type otpVerificationController struct { | |
| otpService services.OTPVerificationService | |
| } | |
| func NewOTPVerificationController(otpService services.OTPVerificationService) OTPVerificationController { | |
| return &otpVerificationController{ | |
| otpService: otpService, | |
| } | |
| } | |
| // DTOs moved to models/dto/otp_dto.go | |
| // RequestOTP godoc | |
| // @Summary Request OTP | |
| // @Description Trigger an OTP code via WhatsApp for phone number verification. | |
| // @Tags Auth | |
| // @Accept json | |
| // @Produce json | |
| // @Param request body dto.OTPRequestInput true "OTP Request Data" | |
| // @Success 200 {object} dto.OTPRequestResponse | |
| // @Failure 400 {object} dto.ErrorResponse | |
| // @Router /api/v1/auth/otp/request [post] | |
| func (c *otpVerificationController) RequestOTP(ctx *gin.Context) { | |
| req, err := RequestJSON[dto.OTPRequestInput](ctx) | |
| if err != nil { | |
| return | |
| } | |
| res, err := c.otpService.RequestOTP(ctx.Request.Context(), req) | |
| if err != nil { | |
| ResponseJSON(ctx, "", dto.OTPRequestResponse{}, err) | |
| return | |
| } | |
| ResponseJSON(ctx, "OTP sent successfully via WhatsApp", res, nil) | |
| } | |
| // VerifyOTP godoc | |
| // @Summary Verify OTP | |
| // @Description Validate the OTP code provided by the user and return authentication token. | |
| // @Tags Auth | |
| // @Accept json | |
| // @Produce json | |
| // @Param request body dto.OTPVerifyInput true "OTP Verification Data" | |
| // @Success 200 {object} dto.OTPVerifyResponse | |
| // @Failure 400 {object} dto.ErrorResponse | |
| // @Router /api/v1/auth/otp/verify [post] | |
| func (c *otpVerificationController) VerifyOTP(ctx *gin.Context) { | |
| req, err := RequestJSON[dto.OTPVerifyInput](ctx) | |
| if err != nil { | |
| return | |
| } | |
| res, err := c.otpService.VerifyOTP(ctx.Request.Context(), req) | |
| if err != nil { | |
| ResponseJSON(ctx, "", dto.OTPVerifyResponse{}, err) | |
| return | |
| } | |
| ResponseJSON(ctx, "OTP verified successfully", res, nil) | |
| } | |