From d21aaead7babff8c0c91b7b5ed0f8fa13854b622 Mon Sep 17 00:00:00 2001 From: aguhh18 Date: Fri, 7 Nov 2025 07:58:00 +0700 Subject: [PATCH] Fix[BE]: use new request body for frontend requrement on chickin create API --- .../chickins/services/chickin.service.go | 49 +++++++++---------- .../validations/chickin.validation.go | 11 +++-- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/internal/modules/production/chickins/services/chickin.service.go b/internal/modules/production/chickins/services/chickin.service.go index 974b5c9f..a130740a 100644 --- a/internal/modules/production/chickins/services/chickin.service.go +++ b/internal/modules/production/chickins/services/chickin.service.go @@ -123,39 +123,34 @@ func (s *chickinService) CreateOne(c *fiber.Ctx, req *validation.Create) ([]enti return nil, fiber.NewError(fiber.StatusNotFound, "Warehouse for Kandang not found") } - var productWarehouses []entity.ProductWarehouse category := strings.ToUpper(strings.TrimSpace(projectFlockKandang.ProjectFlock.Category)) - var productCategoryCode string - switch category { - case string(utils.ProjectFlockCategoryGrowing): - productCategoryCode = "DOC" - case string(utils.ProjectFlockCategoryLaying): - productCategoryCode = "PULLET" - default: - return nil, fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Unknown category: %s", category)) - } - - productWarehouses, err = s.ProductWarehouseRepo.GetByFlagAndWarehouseID(c.Context(), productCategoryCode, warehouse.Id) - if err != nil || len(productWarehouses) == 0 { - return nil, fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Product for %s category in the Kandang's warehouse not found", strings.ToLower(category))) - } - - chickinDate, err := utils.ParseDateString(req.ChickInDate) - if err != nil { - return nil, fiber.NewError(fiber.StatusBadRequest, "Invalid ChickInDate format") - } - actorID := uint(1) // todo nanti ambil dari auth context newChikins := make([]*entity.ProjectChickin, 0) - for _, productWarehouse := range productWarehouses { - availableQty, err := s.calculateAvailableQuantity(c, req.ProjectFlockKandangId, &productWarehouse, category) + + for _, chickinReq := range req.ChickinRequests { + + productWarehouse, err := s.ProductWarehouseRepo.GetByID(c.Context(), chickinReq.ProductWarehouseId, nil) if err != nil { - return nil, fiber.NewError(fiber.StatusInternalServerError, fmt.Sprintf("Failed to calculate available quantity for product warehouse %d", productWarehouse.Id)) + return nil, fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Product warehouse %d not found", chickinReq.ProductWarehouseId)) + } + + if productWarehouse.WarehouseId != warehouse.Id { + return nil, fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Product warehouse %d is not bound to kandang's warehouse", chickinReq.ProductWarehouseId)) + } + + chickinDate, err := utils.ParseDateString(chickinReq.ChickInDate) + if err != nil { + return nil, fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Invalid ChickInDate format for product warehouse %d", chickinReq.ProductWarehouseId)) + } + + availableQty, err := s.calculateAvailableQuantity(c, req.ProjectFlockKandangId, productWarehouse, category) + if err != nil { + return nil, fiber.NewError(fiber.StatusInternalServerError, fmt.Sprintf("Failed to calculate available quantity for product warehouse %d", chickinReq.ProductWarehouseId)) } if availableQty <= 0 { - continue + return nil, fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("No available quantity for product warehouse %d", chickinReq.ProductWarehouseId)) } newChickin := &entity.ProjectChickin{ @@ -163,8 +158,8 @@ func (s *chickinService) CreateOne(c *fiber.Ctx, req *validation.Create) ([]enti ChickInDate: chickinDate, UsageQty: 0, PendingUsageQty: availableQty, - ProductWarehouseId: productWarehouse.Id, - Notes: req.Note, + ProductWarehouseId: chickinReq.ProductWarehouseId, + Notes: chickinReq.Note, CreatedBy: actorID, } diff --git a/internal/modules/production/chickins/validations/chickin.validation.go b/internal/modules/production/chickins/validations/chickin.validation.go index c2676130..ebc6487f 100644 --- a/internal/modules/production/chickins/validations/chickin.validation.go +++ b/internal/modules/production/chickins/validations/chickin.validation.go @@ -1,9 +1,14 @@ package validation type Create struct { - ProjectFlockKandangId uint `json:"project_flock_kandang_id" validate:"required,number,min=1"` - ChickInDate string `json:"chick_in_date" validate:"required,datetime=2006-01-02"` - Note string `json:"note" validate:"omitempty"` + ProjectFlockKandangId uint `json:"project_flock_kandang_id" validate:"required,number,min=1"` + ChickinRequests []ChickinRequestItem `json:"chickin_requests" validate:"required,min=1,dive"` +} + +type ChickinRequestItem struct { + ChickInDate string `json:"chick_in_date" validate:"required,datetime=2006-01-02"` + ProductWarehouseId uint `json:"product_warehouse_id" validate:"required,number,min=1"` + Note string `json:"note" validate:"omitempty"` } type Update struct {