MIF_E31222379_BE/internal/userpin/userpin_handler.go

68 lines
1.6 KiB
Go

package userpin
import (
"rijig/middleware"
"rijig/utils"
"github.com/gofiber/fiber/v2"
)
type UserPinHandler struct {
service UserPinService
}
func NewUserPinHandler(service UserPinService) *UserPinHandler {
return &UserPinHandler{service}
}
func (h *UserPinHandler) CreateUserPinHandler(c *fiber.Ctx) error {
claims, err := middleware.GetUserFromContext(c)
if err != nil {
return utils.Unauthorized(c, "Authentication required")
}
if claims.UserID == "" || claims.DeviceID == "" {
return utils.BadRequest(c, "Invalid user claims")
}
var req RequestPinDTO
if err := c.BodyParser(&req); err != nil {
return utils.BadRequest(c, "Invalid request body")
}
if errs, ok := req.ValidateRequestPinDTO(); !ok {
return utils.ResponseErrorData(c, fiber.StatusBadRequest, "Validation error", errs)
}
pintokenresponse, err := h.service.CreateUserPin(c.Context(), claims.UserID, claims.DeviceID, &req)
if err != nil {
if err.Error() == Pinhasbeencreated {
return utils.BadRequest(c, err.Error())
}
return utils.InternalServerError(c, err.Error())
}
return utils.SuccessWithData(c, "PIN created successfully", pintokenresponse)
}
func (h *UserPinHandler) VerifyPinHandler(c *fiber.Ctx) error {
claims, err := middleware.GetUserFromContext(c)
if err != nil {
return err
}
var req RequestPinDTO
if err := c.BodyParser(&req); err != nil {
return utils.BadRequest(c, "Invalid request body")
}
token, err := h.service.VerifyUserPin(c.Context(), claims.UserID, claims.DeviceID, &req)
if err != nil {
return utils.BadRequest(c, err.Error())
}
return utils.SuccessWithData(c, "PIN verified successfully", token)
}