fix: fixing response api request_pickups

This commit is contained in:
pahmiudahgede 2025-01-13 11:48:12 +07:00
parent 8d4eac7f44
commit acc496ed46
4 changed files with 75 additions and 15 deletions

View File

@ -13,6 +13,8 @@ type RequestPickupResponse struct {
RequestTime string `json:"requestTimePickup"` RequestTime string `json:"requestTimePickup"`
UserAddress UserAddressDTO `json:"userAddress"` UserAddress UserAddressDTO `json:"userAddress"`
StatusRequest string `json:"status"` StatusRequest string `json:"status"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
} }
type RequestItemDTO struct { type RequestItemDTO struct {
@ -30,7 +32,7 @@ type UserAddressDTO struct {
Geography string `json:"geography"` Geography string `json:"geography"`
} }
func NewRequestPickupResponse(id, userID, requestTime, statusRequest string, request []RequestItemDTO, userAddress UserAddressDTO) RequestPickupResponse { func NewRequestPickupResponse(id, userID, requestTime, statusRequest string, request []RequestItemDTO, userAddress UserAddressDTO, createdAt, updatedAt string) RequestPickupResponse {
return RequestPickupResponse{ return RequestPickupResponse{
ID: id, ID: id,
UserID: userID, UserID: userID,
@ -38,5 +40,7 @@ func NewRequestPickupResponse(id, userID, requestTime, statusRequest string, req
RequestTime: requestTime, RequestTime: requestTime,
UserAddress: userAddress, UserAddress: userAddress,
StatusRequest: statusRequest, StatusRequest: statusRequest,
CreatedAt: createdAt,
UpdatedAt: updatedAt,
} }
} }

View File

@ -57,6 +57,8 @@ func GetRequestPickupsByUser(c *fiber.Ctx) error {
requestPickup.StatusRequest, requestPickup.StatusRequest,
requestItems, requestItems,
userAddress, userAddress,
utils.FormatDateToIndonesianFormat(requestPickup.CreatedAt),
utils.FormatDateToIndonesianFormat(requestPickup.UpdatedAt),
)) ))
} }
@ -68,6 +70,14 @@ func GetRequestPickupsByUser(c *fiber.Ctx) error {
} }
func CreateRequestPickup(c *fiber.Ctx) error { func CreateRequestPickup(c *fiber.Ctx) error {
var req dto.RequestPickupRequest
if err := c.BodyParser(&req); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse(
fiber.StatusBadRequest,
"Invalid request body",
nil,
))
}
userID, ok := c.Locals("userID").(string) userID, ok := c.Locals("userID").(string)
if !ok || userID == "" { if !ok || userID == "" {
@ -78,15 +88,6 @@ func CreateRequestPickup(c *fiber.Ctx) error {
)) ))
} }
var req dto.RequestPickupRequest
if err := c.BodyParser(&req); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse(
fiber.StatusBadRequest,
"Invalid request body",
nil,
))
}
if req.UserAddressID == "" || len(req.RequestItems) == 0 { if req.UserAddressID == "" || len(req.RequestItems) == 0 {
return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse( return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse(
fiber.StatusBadRequest, fiber.StatusBadRequest,
@ -108,10 +109,11 @@ func CreateRequestPickup(c *fiber.Ctx) error {
Request: requestItems, Request: requestItems,
RequestTime: req.RequestTime, RequestTime: req.RequestTime,
UserAddressID: req.UserAddressID, UserAddressID: req.UserAddressID,
StatusRequest: "waiting driver", StatusRequest: "Pending",
} }
service := services.NewRequestPickupService(repositories.NewRequestPickupRepository()) service := services.NewRequestPickupService(repositories.NewRequestPickupRepository())
if err := service.CreateRequestPickup(requestPickup); err != nil { if err := service.CreateRequestPickup(requestPickup); err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse(
fiber.StatusInternalServerError, fiber.StatusInternalServerError,
@ -120,9 +122,47 @@ func CreateRequestPickup(c *fiber.Ctx) error {
)) ))
} }
detail, err := service.GetRequestPickupByID(requestPickup.ID)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse(
fiber.StatusInternalServerError,
"Failed to fetch created request pickup",
nil,
))
}
var requestItemsDTO []dto.RequestItemDTO
for _, item := range detail.Request {
requestItemsDTO = append(requestItemsDTO, dto.RequestItemDTO{
TrashCategory: item.TrashCategory.Name,
EstimatedAmount: item.EstimatedAmount,
})
}
userAddressDTO := dto.UserAddressDTO{
Province: detail.UserAddress.Province,
District: detail.UserAddress.District,
Subdistrict: detail.UserAddress.Subdistrict,
PostalCode: detail.UserAddress.PostalCode,
Village: detail.UserAddress.Village,
Detail: detail.UserAddress.Detail,
Geography: detail.UserAddress.Geography,
}
response := dto.NewRequestPickupResponse(
detail.ID,
detail.UserID,
detail.RequestTime,
detail.StatusRequest,
requestItemsDTO,
userAddressDTO,
utils.FormatDateToIndonesianFormat(detail.CreatedAt),
utils.FormatDateToIndonesianFormat(detail.UpdatedAt),
)
return c.Status(fiber.StatusCreated).JSON(utils.FormatResponse( return c.Status(fiber.StatusCreated).JSON(utils.FormatResponse(
fiber.StatusCreated, fiber.StatusCreated,
"Request pickup created successfully", "Request pickup created successfully",
nil, response,
)) ))
} }

View File

@ -7,10 +7,11 @@ import (
type RequestPickupRepository interface { type RequestPickupRepository interface {
Create(request *domain.RequestPickup) error Create(request *domain.RequestPickup) error
GetByID(id string) (*domain.RequestPickup, error)
GetByUserID(userID string) ([]domain.RequestPickup, error) GetByUserID(userID string) ([]domain.RequestPickup, error)
} }
type requestPickupRepository struct {} type requestPickupRepository struct{}
func NewRequestPickupRepository() RequestPickupRepository { func NewRequestPickupRepository() RequestPickupRepository {
return &requestPickupRepository{} return &requestPickupRepository{}
@ -20,6 +21,18 @@ func (r *requestPickupRepository) Create(request *domain.RequestPickup) error {
return config.DB.Create(request).Error return config.DB.Create(request).Error
} }
func (r *requestPickupRepository) GetByID(id string) (*domain.RequestPickup, error) {
var requestPickup domain.RequestPickup
if err := config.DB.Preload("Request").
Preload("Request.TrashCategory").
Preload("UserAddress").
Where("id = ?", id).
First(&requestPickup).Error; err != nil {
return nil, err
}
return &requestPickup, nil
}
func (r *requestPickupRepository) GetByUserID(userID string) ([]domain.RequestPickup, error) { func (r *requestPickupRepository) GetByUserID(userID string) ([]domain.RequestPickup, error) {
var requestPickups []domain.RequestPickup var requestPickups []domain.RequestPickup
err := config.DB.Preload("Request"). err := config.DB.Preload("Request").
@ -34,4 +47,3 @@ func (r *requestPickupRepository) GetByUserID(userID string) ([]domain.RequestPi
return requestPickups, nil return requestPickups, nil
} }

View File

@ -17,6 +17,10 @@ func (s *RequestPickupService) CreateRequestPickup(request *domain.RequestPickup
return s.repository.Create(request) return s.repository.Create(request)
} }
func (s *RequestPickupService) GetRequestPickupByID(id string) (*domain.RequestPickup, error) {
return s.repository.GetByID(id)
}
func (s *RequestPickupService) GetRequestPickupsByUser(userID string) ([]domain.RequestPickup, error) { func (s *RequestPickupService) GetRequestPickupsByUser(userID string) ([]domain.RequestPickup, error) {
return s.repository.GetByUserID(userID) return s.repository.GetByUserID(userID)
} }