MIF_E31222379_BE/internal/controllers/address.go

206 lines
5.3 KiB
Go

package controllers
import (
"github.com/gofiber/fiber/v2"
"github.com/pahmiudahgede/senggoldong/dto"
"github.com/pahmiudahgede/senggoldong/internal/services"
"github.com/pahmiudahgede/senggoldong/utils"
)
func CreateAddress(c *fiber.Ctx) error {
var input dto.AddressInput
if err := c.BodyParser(&input); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse(
fiber.StatusBadRequest,
"Mohon masukkan alamat dengan benar",
nil,
))
}
if err := input.ValidatePost(); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse(
fiber.StatusBadRequest,
err.Error(),
nil,
))
}
userID := c.Locals("userID").(string)
address, err := services.CreateAddress(userID, input)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse(
fiber.StatusInternalServerError,
"Failed to create address",
nil,
))
}
createdAtFormatted := utils.FormatDateToIndonesianFormat(address.CreatedAt)
updatedAtFormatted := utils.FormatDateToIndonesianFormat(address.UpdatedAt)
addressResponse := dto.AddressResponse{
ID: address.ID,
Province: address.Province,
District: address.District,
Subdistrict: address.Subdistrict,
PostalCode: address.PostalCode,
Village: address.Village,
Detail: address.Detail,
Geography: address.Geography,
CreatedAt: createdAtFormatted,
UpdatedAt: updatedAtFormatted,
}
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
fiber.StatusOK,
"Address created successfully",
addressResponse,
))
}
func GetListAddress(c *fiber.Ctx) error {
userID := c.Locals("userID").(string)
addresses, err := services.GetAllAddressesByUserID(userID)
if err != nil {
return c.Status(fiber.StatusNotFound).JSON(utils.FormatResponse(
fiber.StatusNotFound,
"Addresses not found",
nil,
))
}
var addressResponses []dto.AddressResponse
for _, address := range addresses {
createdAtFormatted := utils.FormatDateToIndonesianFormat(address.CreatedAt)
updatedAtFormatted := utils.FormatDateToIndonesianFormat(address.UpdatedAt)
addressResponse := dto.AddressResponse{
ID: address.ID,
Province: address.Province,
District: address.District,
Subdistrict: address.Subdistrict,
PostalCode: address.PostalCode,
Village: address.Village,
Detail: address.Detail,
Geography: address.Geography,
CreatedAt: createdAtFormatted,
UpdatedAt: updatedAtFormatted,
}
addressResponses = append(addressResponses, addressResponse)
}
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
fiber.StatusOK,
"Addresses fetched successfully",
addressResponses,
))
}
func GetAddressByID(c *fiber.Ctx) error {
addressID := c.Params("id")
address, err := services.GetAddressByID(addressID)
if err != nil {
return c.Status(fiber.StatusNotFound).JSON(utils.FormatResponse(
fiber.StatusNotFound,
"Address not found",
nil,
))
}
createdAtFormatted := utils.FormatDateToIndonesianFormat(address.CreatedAt)
updatedAtFormatted := utils.FormatDateToIndonesianFormat(address.UpdatedAt)
addressResponse := dto.AddressResponse{
ID: address.ID,
Province: address.Province,
District: address.District,
Subdistrict: address.Subdistrict,
PostalCode: address.PostalCode,
Village: address.Village,
Detail: address.Detail,
Geography: address.Geography,
CreatedAt: createdAtFormatted,
UpdatedAt: updatedAtFormatted,
}
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
fiber.StatusOK,
"Address fetched successfully",
addressResponse,
))
}
func UpdateAddress(c *fiber.Ctx) error {
addressID := c.Params("id")
var input dto.AddressInput
if err := c.BodyParser(&input); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse(
fiber.StatusBadRequest,
"Invalid input data",
nil,
))
}
if err := input.ValidateUpdate(); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse(
fiber.StatusBadRequest,
err.Error(),
nil,
))
}
address, err := services.UpdateAddress(addressID, input)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse(
fiber.StatusInternalServerError,
"Failed to update address",
nil,
))
}
createdAtFormatted := utils.FormatDateToIndonesianFormat(address.CreatedAt)
updatedAtFormatted := utils.FormatDateToIndonesianFormat(address.UpdatedAt)
addressResponse := dto.AddressResponse{
ID: address.ID,
Province: address.Province,
District: address.District,
Subdistrict: address.Subdistrict,
PostalCode: address.PostalCode,
Village: address.Village,
Detail: address.Detail,
Geography: address.Geography,
CreatedAt: createdAtFormatted,
UpdatedAt: updatedAtFormatted,
}
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
fiber.StatusOK,
"Address updated successfully",
addressResponse,
))
}
func DeleteAddress(c *fiber.Ctx) error {
addressID := c.Params("id")
err := services.DeleteAddress(addressID)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse(
fiber.StatusInternalServerError,
"Failed to delete address",
nil,
))
}
return c.Status(fiber.StatusOK).JSON(utils.FormatResponse(
fiber.StatusOK,
"Address deleted successfully",
nil,
))
}