From ce28429efd15aa71d36569b1a27b1ce57592c54a Mon Sep 17 00:00:00 2001 From: aguhh18 Date: Mon, 13 Oct 2025 09:36:38 +0700 Subject: [PATCH] feat(BE-50): add getOne endpoint for adjustment history --- .../controllers/adjustment.controller.go | 23 +++++++++++++++++++ .../adjustments/dto/adjustment.dto.go | 22 +++++++++++++----- .../modules/inventory/adjustments/route.go | 1 + .../services/adjustment.service.go | 4 +++- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/internal/modules/inventory/adjustments/controllers/adjustment.controller.go b/internal/modules/inventory/adjustments/controllers/adjustment.controller.go index d152f360..dc3df0a9 100644 --- a/internal/modules/inventory/adjustments/controllers/adjustment.controller.go +++ b/internal/modules/inventory/adjustments/controllers/adjustment.controller.go @@ -2,6 +2,7 @@ package controller import ( "math" + "strconv" "gitlab.com/mbugroup/lti-api.git/internal/modules/inventory/adjustments/dto" service "gitlab.com/mbugroup/lti-api.git/internal/modules/inventory/adjustments/services" @@ -78,3 +79,25 @@ func (u *AdjustmentController) AdjustmentHistory(c *fiber.Ctx) error { Data: adjustmentDTOs, }) } + +func (u *AdjustmentController) GetOne(c *fiber.Ctx) error { + param := c.Params("id") + + id, err := strconv.Atoi(param) + if err != nil { + return fiber.NewError(fiber.StatusBadRequest, "Invalid Id") + } + + stockLog, err := u.AdjustmentService.GetOne(c, uint(id)) + if err != nil { + return err + } + // Use DTO for response + return c.Status(fiber.StatusOK). + JSON(response.Success{ + Code: fiber.StatusOK, + Status: "success", + Message: "Get adjustment successfully", + Data: dto.ToAdjustmentDetailDTO(stockLog), + }) +} diff --git a/internal/modules/inventory/adjustments/dto/adjustment.dto.go b/internal/modules/inventory/adjustments/dto/adjustment.dto.go index 72d58c2a..d577e134 100644 --- a/internal/modules/inventory/adjustments/dto/adjustment.dto.go +++ b/internal/modules/inventory/adjustments/dto/adjustment.dto.go @@ -4,15 +4,17 @@ import ( "time" entity "gitlab.com/mbugroup/lti-api.git/internal/entities" + productCategoryDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/product-categories/dto" userDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/users/dto" ) // === DTO Structs === type ProductBaseDTO struct { - Id uint `json:"id"` - Name string `json:"name"` - SKU string `json:"sku"` + Id uint `json:"id"` + Name string `json:"name"` + SKU string `json:"sku"` + ProductCategory *productCategoryDTO.ProductCategoryBaseDTO `json:"product_category,omitempty"` } type WarehouseBaseDTO struct { @@ -61,10 +63,18 @@ func ToProductBaseDTO(e *entity.Product) *ProductBaseDTO { if e.Sku != nil { sku = *e.Sku } + + var category *productCategoryDTO.ProductCategoryBaseDTO + if e.ProductCategory.Id != 0 { + mapped := productCategoryDTO.ToProductCategoryBaseDTO(e.ProductCategory) + category = &mapped + } + return &ProductBaseDTO{ - Id: e.Id, - Name: e.Name, - SKU: sku, + Id: e.Id, + Name: e.Name, + SKU: sku, + ProductCategory: category, } } diff --git a/internal/modules/inventory/adjustments/route.go b/internal/modules/inventory/adjustments/route.go index cb63defa..8f58bb4d 100644 --- a/internal/modules/inventory/adjustments/route.go +++ b/internal/modules/inventory/adjustments/route.go @@ -17,5 +17,6 @@ func AdjustmentRoutes(v1 fiber.Router, u user.UserService, s adjustment.Adjustme // Standard CRUD routes following master data pattern route.Get("/", ctrl.AdjustmentHistory) // Get all with pagination and filters route.Post("/", ctrl.Adjustment) // Create adjustment + route.Get("/:id", ctrl.GetOne) } diff --git a/internal/modules/inventory/adjustments/services/adjustment.service.go b/internal/modules/inventory/adjustments/services/adjustment.service.go index 252cf7a3..601cc6c2 100644 --- a/internal/modules/inventory/adjustments/services/adjustment.service.go +++ b/internal/modules/inventory/adjustments/services/adjustment.service.go @@ -50,7 +50,9 @@ func (s *adjustmentService) withRelations(db *gorm.DB) *gorm.DB { } func (s *adjustmentService) GetOne(c *fiber.Ctx, id uint) (*entity.StockLog, error) { - stockLog, err := s.StockLogsRepository.GetByID(c.Context(), id, s.withRelations) + stockLog, err := s.StockLogsRepository.GetByID(c.Context(), id, func(db *gorm.DB) *gorm.DB { + return s.withRelations(db).Preload("ProductWarehouse.Product.ProductCategory") + }) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, fiber.NewError(fiber.StatusNotFound, "Adjustment not found")