78 lines
2.0 KiB
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,
|
|
})
|
|
}
|