MIF_E31222379_BE/internal/address/address_handler.go

114 lines
3.0 KiB
Go

package address
import (
"rijig/dto"
"rijig/middleware"
"rijig/utils"
"github.com/gofiber/fiber/v2"
)
type AddressHandler struct {
AddressService AddressService
}
func NewAddressHandler(addressService AddressService) *AddressHandler {
return &AddressHandler{AddressService: addressService}
}
func (h *AddressHandler) CreateAddress(c *fiber.Ctx) error {
var request dto.CreateAddressDTO
claims, err := middleware.GetUserFromContext(c)
if err != nil {
return err
}
if err := c.BodyParser(&request); err != nil {
return utils.ResponseErrorData(c, fiber.StatusBadRequest, "Invalid request body", map[string][]string{"body": {"Invalid body"}})
}
errors, valid := request.ValidateAddress()
if !valid {
return utils.ResponseErrorData(c, fiber.StatusBadRequest, "Validation failed", errors)
}
addressResponse, err := h.AddressService.CreateAddress(c.Context(), claims.UserID, request)
if err != nil {
return utils.InternalServerError(c, err.Error())
}
return utils.CreateSuccessWithData(c, "user address created successfully", addressResponse)
}
func (h *AddressHandler) GetAddressByUserID(c *fiber.Ctx) error {
claims, err := middleware.GetUserFromContext(c)
if err != nil {
return err
}
addresses, err := h.AddressService.GetAddressByUserID(c.Context(), claims.UserID)
if err != nil {
return utils.NotFound(c, err.Error())
}
return utils.SuccessWithData(c, "User addresses fetched successfully", addresses)
}
func (h *AddressHandler) GetAddressByID(c *fiber.Ctx) error {
claims, err := middleware.GetUserFromContext(c)
if err != nil {
return err
}
addressID := c.Params("address_id")
address, err := h.AddressService.GetAddressByID(c.Context(), claims.UserID, addressID)
if err != nil {
return utils.NotFound(c, err.Error())
}
return utils.SuccessWithData(c, "Address fetched successfully", address)
}
func (h *AddressHandler) UpdateAddress(c *fiber.Ctx) error {
addressID := c.Params("address_id")
var request dto.CreateAddressDTO
claims, err := middleware.GetUserFromContext(c)
if err != nil {
return err
}
if err := c.BodyParser(&request); err != nil {
return utils.ResponseErrorData(c, fiber.StatusBadRequest, "Invalid request body", map[string][]string{"body": {"Invalid body"}})
}
errors, valid := request.ValidateAddress()
if !valid {
return utils.ResponseErrorData(c, fiber.StatusBadRequest, "Validation failed", errors)
}
updatedAddress, err := h.AddressService.UpdateAddress(c.Context(), claims.UserID, addressID, request)
if err != nil {
return utils.NotFound(c, err.Error())
}
return utils.SuccessWithData(c, "User address updated successfully", updatedAddress)
}
func (h *AddressHandler) DeleteAddress(c *fiber.Ctx) error {
claims, err := middleware.GetUserFromContext(c)
if err != nil {
return err
}
addressID := c.Params("address_id")
err = h.AddressService.DeleteAddress(c.Context(), claims.UserID, addressID)
if err != nil {
return utils.Forbidden(c, err.Error())
}
return utils.Success(c, "Address deleted successfully")
}