From cf380fc711636a1970b82e3e430ce9f601521649 Mon Sep 17 00:00:00 2001 From: Habib Fatkhul Rohman Date: Fri, 28 Nov 2025 14:39:02 +0700 Subject: [PATCH] feat: add GetLinesByMovementId method to InventoryMovementController and service for retrieving movement lines --- .../controller/inventory_movement_controller.go | 13 +++++++++++++ .../dto/inventory_movement_dto.go | 2 ++ .../repository/inventory_movement_repository.go | 4 +++- modules/inventory_movement/routes.go | 1 + .../service/inventory_movement_service.go | 17 +++++++++++++++++ 5 files changed, 36 insertions(+), 1 deletion(-) diff --git a/modules/inventory_movement/controller/inventory_movement_controller.go b/modules/inventory_movement/controller/inventory_movement_controller.go index f70c1f3..da5faac 100644 --- a/modules/inventory_movement/controller/inventory_movement_controller.go +++ b/modules/inventory_movement/controller/inventory_movement_controller.go @@ -17,6 +17,7 @@ type InventoryMovementController interface { Delete(ctx *gin.Context) GetById(ctx *gin.Context) GetAll(ctx *gin.Context) + GetLinesByMovementId(ctx *gin.Context) CreateLine(ctx *gin.Context) UpdateLine(ctx *gin.Context) DeleteLine(ctx *gin.Context) @@ -26,6 +27,18 @@ type inventoryMovementController struct { movementService service.InventoryMovementService } +func (c *inventoryMovementController) GetLinesByMovementId(ctx *gin.Context) { + id := ctx.Param("id") + result, err := c.movementService.GetLinesByMovementId(ctx, id) + if err != nil { + res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_INVENTORY_MOVEMENT_LINE, err.Error(), nil) + ctx.JSON(http.StatusInternalServerError, res) + return + } + res := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_INVENTORY_MOVEMENT_LINE, result) + ctx.JSON(http.StatusOK, res) +} + func (c *inventoryMovementController) Create(ctx *gin.Context) { var req dto.InventoryMovementCreateRequest if err := ctx.ShouldBindJSON(&req); err != nil { diff --git a/modules/inventory_movement/dto/inventory_movement_dto.go b/modules/inventory_movement/dto/inventory_movement_dto.go index 99138d1..6c46bd8 100644 --- a/modules/inventory_movement/dto/inventory_movement_dto.go +++ b/modules/inventory_movement/dto/inventory_movement_dto.go @@ -22,6 +22,8 @@ const ( MESSAGE_SUCCESS_DELETE_INVENTORY_MOVEMENT = "success delete inventory movement" MESSAGE_SUCCESS_DELETE_INVENTORY_MOVEMENT_LINE = "success delete inventory movement line" MESSAGE_FAILED_GET_DATA_FROM_BODY = "failed get data from body" + MESSAGE_FAILED_GET_INVENTORY_MOVEMENT_LINE = "failed get inventory movement line" + MESSAGE_SUCCESS_GET_INVENTORY_MOVEMENT_LINE = "success get inventory movement line" ) type InventoryMovementCreateRequest struct { diff --git a/modules/inventory_movement/repository/inventory_movement_repository.go b/modules/inventory_movement/repository/inventory_movement_repository.go index 37c8193..4124476 100644 --- a/modules/inventory_movement/repository/inventory_movement_repository.go +++ b/modules/inventory_movement/repository/inventory_movement_repository.go @@ -52,7 +52,9 @@ func (r *inventoryMovementRepository) GetAll(ctx context.Context, filter query.I db = query.ApplyInventoryMovementFilters(db, filter) var movements []entities.TInventoryMovementEntity var total int64 - if err := db.Find(&movements).Count(&total).Error; err != nil { + if err := db. + Preload("Client"). + Find(&movements).Count(&total).Error; err != nil { return nil, 0, err } return movements, total, nil diff --git a/modules/inventory_movement/routes.go b/modules/inventory_movement/routes.go index 42cbb75..7d790f0 100644 --- a/modules/inventory_movement/routes.go +++ b/modules/inventory_movement/routes.go @@ -20,6 +20,7 @@ func RegisterRoutes(server *gin.Engine, injector *do.Injector) { movementRoutes.PUT(":id", middlewares.Authenticate(jwtService), movementController.Update) movementRoutes.DELETE(":id", middlewares.Authenticate(jwtService), movementController.Delete) movementRoutes.GET("", middlewares.Authenticate(jwtService), movementController.GetAll) + movementRoutes.GET(":id/lines", middlewares.Authenticate(jwtService), movementController.GetLinesByMovementId) movementRoutes.POST(":id/lines", middlewares.Authenticate(jwtService), movementController.CreateLine) movementRoutes.PUT("lines/:id", middlewares.Authenticate(jwtService), movementController.UpdateLine) movementRoutes.DELETE("lines/:id", middlewares.Authenticate(jwtService), movementController.DeleteLine) diff --git a/modules/inventory_movement/service/inventory_movement_service.go b/modules/inventory_movement/service/inventory_movement_service.go index a2b4ead..3ef657d 100644 --- a/modules/inventory_movement/service/inventory_movement_service.go +++ b/modules/inventory_movement/service/inventory_movement_service.go @@ -18,6 +18,7 @@ type InventoryMovementService interface { GetAll(ctx context.Context, filter query.InventoryMovementFilter) ([]dtodomain.InventoryMovementResponse, int64, error) Update(ctx context.Context, req dtodomain.InventoryMovementUpdateRequest, id string) (dtodomain.InventoryMovementResponse, error) Delete(ctx context.Context, id string) error + GetLinesByMovementId(ctx context.Context, movementId string) ([]dtodomain.InventoryMovementLineResponse, error) CreateLine(ctx context.Context, movementId string, req dtodomain.InventoryMovementLineCreateRequest) (dtodomain.InventoryMovementLineResponse, error) UpdateLine(ctx context.Context, lineId string, req dtodomain.InventoryMovementLineUpdateRequest) (dtodomain.InventoryMovementLineResponse, error) DeleteLine(ctx context.Context, lineId string) error @@ -29,6 +30,22 @@ type inventoryMovementService struct { movementLineRepo repository.InventoryMovementLineRepository } +// GetLinesByMovementId implements InventoryMovementService. +func (s *inventoryMovementService) GetLinesByMovementId(ctx context.Context, movementId string) ([]dtodomain.InventoryMovementLineResponse, error) { + lines, err := s.movementLineRepo.GetAllByMovementId(ctx, movementId) + if err != nil { + return nil, err + } + var responses []dtodomain.InventoryMovementLineResponse + for _, e := range lines { + responses = append(responses, dtodomain.ToInventoryMovementLineResponse(e)) + } + if responses == nil { + responses = make([]dtodomain.InventoryMovementLineResponse, 0) + } + return responses, nil +} + func (s *inventoryMovementService) Create(ctx context.Context, req dtodomain.InventoryMovementCreateRequest) (dtodomain.InventoryMovementResponse, error) { tx := s.db.Begin() defer func() {