MIF_E31222379_BE/internal/userpin/userpin_handler.go

78 lines
2.0 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}
}
// userID, ok := c.Locals("user_id").(string)
//
// if !ok || userID == "" {
// return utils.Unauthorized(c, "user_id is missing or invalid")
// }
func (h *UserPinHandler) CreateUserPinHandler(c *fiber.Ctx) error {
// Ambil klaim pengguna yang sudah diautentikasi
claims, err := middleware.GetUserFromContext(c)
if err != nil {
return err
}
// Parsing body request untuk PIN
var req RequestPinDTO
if err := c.BodyParser(&req); err != nil {
return utils.BadRequest(c, "Invalid request body")
}
// Validasi request PIN
if errs, ok := req.ValidateRequestPinDTO(); !ok {
return utils.ResponseErrorData(c, fiber.StatusBadRequest, "Validation error", errs)
}
// Panggil service untuk membuat PIN
err = h.service.CreateUserPin(c.Context(), claims.UserID, &req)
if err != nil {
if err.Error() == "PIN already created" {
return utils.BadRequest(c, err.Error()) // Jika PIN sudah ada, kembalikan error 400
}
return utils.InternalServerError(c, err.Error()) // Jika terjadi error lain, internal server error
}
// Mengembalikan response sukses jika berhasil
return utils.Success(c, "PIN created successfully")
}
func (h *UserPinHandler) VerifyPinHandler(c *fiber.Ctx) error {
// userID, ok := c.Locals("user_id").(string)
// if !ok || userID == "" {
// return utils.Unauthorized(c, "user_id is missing or invalid")
// }
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, &req)
if err != nil {
return utils.BadRequest(c, err.Error())
}
return utils.SuccessWithData(c, "PIN verified successfully", fiber.Map{
"token": token,
})
}