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"`
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,
}
}

View File

@ -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,
))
}

View File

@ -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
}

View File

@ -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)
}