From acc496ed465e8c6e798b57b722bc4d18ba72ad5c Mon Sep 17 00:00:00 2001 From: pahmiudahgede Date: Mon, 13 Jan 2025 11:48:12 +0700 Subject: [PATCH] fix: fixing response api request_pickups --- dto/request_pickup.go | 8 +++- internal/controllers/request_pickup.go | 62 ++++++++++++++++++++----- internal/repositories/request_pickup.go | 16 ++++++- internal/services/request_pickup.go | 4 ++ 4 files changed, 75 insertions(+), 15 deletions(-) diff --git a/dto/request_pickup.go b/dto/request_pickup.go index 247e626..89a3276 100644 --- a/dto/request_pickup.go +++ b/dto/request_pickup.go @@ -13,6 +13,8 @@ type RequestPickupResponse struct { RequestTime string `json:"requestTimePickup"` UserAddress UserAddressDTO `json:"userAddress"` StatusRequest string `json:"status"` + CreatedAt string `json:"createdAt"` + UpdatedAt string `json:"updatedAt"` } type RequestItemDTO struct { @@ -30,7 +32,7 @@ type UserAddressDTO struct { 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{ ID: id, UserID: userID, @@ -38,5 +40,7 @@ func NewRequestPickupResponse(id, userID, requestTime, statusRequest string, req RequestTime: requestTime, UserAddress: userAddress, StatusRequest: statusRequest, + CreatedAt: createdAt, + UpdatedAt: updatedAt, } -} +} \ No newline at end of file diff --git a/internal/controllers/request_pickup.go b/internal/controllers/request_pickup.go index 685b3c9..9690124 100644 --- a/internal/controllers/request_pickup.go +++ b/internal/controllers/request_pickup.go @@ -57,6 +57,8 @@ func GetRequestPickupsByUser(c *fiber.Ctx) error { requestPickup.StatusRequest, requestItems, 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 { + 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) 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 { return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse( fiber.StatusBadRequest, @@ -108,10 +109,11 @@ func CreateRequestPickup(c *fiber.Ctx) error { Request: requestItems, RequestTime: req.RequestTime, UserAddressID: req.UserAddressID, - StatusRequest: "waiting driver", + StatusRequest: "Pending", } service := services.NewRequestPickupService(repositories.NewRequestPickupRepository()) + if err := service.CreateRequestPickup(requestPickup); err != nil { return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( 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( fiber.StatusCreated, "Request pickup created successfully", - nil, + response, )) } diff --git a/internal/repositories/request_pickup.go b/internal/repositories/request_pickup.go index a93602a..c51d5ee 100644 --- a/internal/repositories/request_pickup.go +++ b/internal/repositories/request_pickup.go @@ -7,10 +7,11 @@ import ( type RequestPickupRepository interface { Create(request *domain.RequestPickup) error + GetByID(id string) (*domain.RequestPickup, error) GetByUserID(userID string) ([]domain.RequestPickup, error) } -type requestPickupRepository struct {} +type requestPickupRepository struct{} func NewRequestPickupRepository() RequestPickupRepository { return &requestPickupRepository{} @@ -20,6 +21,18 @@ func (r *requestPickupRepository) Create(request *domain.RequestPickup) 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) { var requestPickups []domain.RequestPickup err := config.DB.Preload("Request"). @@ -34,4 +47,3 @@ func (r *requestPickupRepository) GetByUserID(userID string) ([]domain.RequestPi return requestPickups, nil } - diff --git a/internal/services/request_pickup.go b/internal/services/request_pickup.go index 06985c1..761ffff 100644 --- a/internal/services/request_pickup.go +++ b/internal/services/request_pickup.go @@ -17,6 +17,10 @@ func (s *RequestPickupService) CreateRequestPickup(request *domain.RequestPickup 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) { return s.repository.GetByUserID(userID) }