MIF_E31222379_BE/internal/handler/auth_handler.go

89 lines
2.0 KiB
Go

package handler
import (
"github.com/gofiber/fiber/v2"
"github.com/pahmiudahgede/senggoldong/dto"
"github.com/pahmiudahgede/senggoldong/internal/services"
)
type AuthHandler struct {
AuthService services.AuthService
}
func NewAuthHandler(authService services.AuthService) *AuthHandler {
return &AuthHandler{AuthService: authService}
}
func (h *AuthHandler) Register(c *fiber.Ctx) error {
var request dto.RegisterRequest
if err := c.BodyParser(&request); err != nil {
return c.Status(400).SendString("Invalid input")
}
if errors, valid := request.Validate(); !valid {
return c.Status(400).JSON(errors)
}
_, err := h.AuthService.RegisterUser(request)
if err != nil {
return c.Status(500).SendString(err.Error())
}
return c.Status(201).JSON(fiber.Map{
"meta": fiber.Map{
"status": 201,
"message": "The input register from the user has been successfully recorded. Please check the otp code sent to your number.",
},
})
}
func (h *AuthHandler) VerifyOTP(c *fiber.Ctx) error {
var request struct {
Phone string `json:"phone"`
OTP string `json:"otp"`
}
if err := c.BodyParser(&request); err != nil {
return c.Status(400).SendString("Invalid input")
}
err := h.AuthService.VerifyOTP(request.Phone, request.OTP)
if err != nil {
return c.Status(400).JSON(dto.Response{
Meta: dto.MetaResponse{
Status: 400,
Message: "Invalid OTP",
},
Data: nil,
})
}
user, err := h.AuthService.GetUserByPhone(request.Phone)
if err != nil {
return c.Status(500).SendString("Error retrieving user")
}
if user == nil {
return c.Status(404).SendString("User not found")
}
token, err := h.AuthService.GenerateJWT(user)
if err != nil {
return c.Status(500).SendString("Error generating token")
}
response := dto.Response{
Meta: dto.MetaResponse{
Status: 200,
Message: "OTP yang dimasukkan valid",
},
Data: &dto.UserDataResponse{
UserID: user.ID,
UserRole: user.Role.RoleName,
Token: token,
},
}
return c.Status(200).JSON(response)
}