101 lines
3.2 KiB
Go
101 lines
3.2 KiB
Go
package handler
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/pahmiudahgede/senggoldong/dto"
|
|
"github.com/pahmiudahgede/senggoldong/internal/services"
|
|
"github.com/pahmiudahgede/senggoldong/utils"
|
|
)
|
|
|
|
type UserPinHandler struct {
|
|
UserPinService services.UserPinService
|
|
}
|
|
|
|
func NewUserPinHandler(userPinService services.UserPinService) *UserPinHandler {
|
|
return &UserPinHandler{UserPinService: userPinService}
|
|
}
|
|
|
|
func (h *UserPinHandler) VerifyUserPin(c *fiber.Ctx) error {
|
|
var requestUserPinDTO dto.RequestUserPinDTO
|
|
if err := c.BodyParser(&requestUserPinDTO); err != nil {
|
|
return utils.ValidationErrorResponse(c, map[string][]string{"body": {"Invalid body"}})
|
|
}
|
|
|
|
errors, valid := requestUserPinDTO.Validate()
|
|
if !valid {
|
|
return utils.ValidationErrorResponse(c, errors)
|
|
}
|
|
|
|
userID, ok := c.Locals("userID").(string)
|
|
if !ok || userID == "" {
|
|
return utils.GenericResponse(c, fiber.StatusUnauthorized, "Unauthorized: User session not found")
|
|
}
|
|
|
|
_, err := h.UserPinService.VerifyUserPin(requestUserPinDTO.Pin, userID)
|
|
if err != nil {
|
|
return utils.GenericResponse(c, fiber.StatusUnauthorized, "pin yang anda masukkan salah")
|
|
}
|
|
|
|
return utils.SuccessResponse(c, map[string]string{"data": "pin yang anda masukkan benar"}, "Pin verification successful")
|
|
}
|
|
|
|
func (h *UserPinHandler) CheckPinStatus(c *fiber.Ctx) error {
|
|
userID, ok := c.Locals("userID").(string)
|
|
if !ok || userID == "" {
|
|
return utils.GenericResponse(c, fiber.StatusUnauthorized, "Unauthorized: User session not found")
|
|
}
|
|
|
|
status, _, err := h.UserPinService.CheckPinStatus(userID)
|
|
if err != nil {
|
|
return utils.GenericResponse(c, fiber.StatusInternalServerError, err.Error())
|
|
}
|
|
|
|
if status == "Pin not created" {
|
|
return utils.GenericResponse(c, fiber.StatusBadRequest, "pin belum dibuat")
|
|
}
|
|
|
|
return utils.SuccessResponse(c, map[string]string{"data": "pin sudah dibuat"}, "Pin status retrieved successfully")
|
|
}
|
|
|
|
func (h *UserPinHandler) CreateUserPin(c *fiber.Ctx) error {
|
|
var requestUserPinDTO dto.RequestUserPinDTO
|
|
if err := c.BodyParser(&requestUserPinDTO); err != nil {
|
|
return utils.ValidationErrorResponse(c, map[string][]string{"body": {"Invalid body"}})
|
|
}
|
|
|
|
errors, valid := requestUserPinDTO.Validate()
|
|
if !valid {
|
|
return utils.ValidationErrorResponse(c, errors)
|
|
}
|
|
|
|
userID := c.Locals("userID").(string)
|
|
|
|
userPinResponse, err := h.UserPinService.CreateUserPin(userID, requestUserPinDTO.Pin)
|
|
if err != nil {
|
|
return utils.GenericResponse(c, fiber.StatusConflict, err.Error())
|
|
}
|
|
|
|
return utils.CreateResponse(c, userPinResponse, "User pin created successfully")
|
|
}
|
|
|
|
func (h *UserPinHandler) UpdateUserPin(c *fiber.Ctx) error {
|
|
var requestUserPinDTO dto.UpdateUserPinDTO
|
|
if err := c.BodyParser(&requestUserPinDTO); err != nil {
|
|
return utils.ValidationErrorResponse(c, map[string][]string{"body": {"Invalid body"}})
|
|
}
|
|
|
|
errors, valid := requestUserPinDTO.Validate()
|
|
if !valid {
|
|
return utils.ValidationErrorResponse(c, errors)
|
|
}
|
|
|
|
userID := c.Locals("userID").(string)
|
|
|
|
userPinResponse, err := h.UserPinService.UpdateUserPin(userID, requestUserPinDTO.OldPin, requestUserPinDTO.NewPin)
|
|
if err != nil {
|
|
return utils.GenericResponse(c, fiber.StatusBadRequest, err.Error())
|
|
}
|
|
|
|
return utils.SuccessResponse(c, userPinResponse, "User pin updated successfully")
|
|
}
|