diff --git a/modules/quarantine/controller/quarantine_controller.go b/modules/quarantine/controller/quarantine_controller.go index cdd9abd..3259760 100644 --- a/modules/quarantine/controller/quarantine_controller.go +++ b/modules/quarantine/controller/quarantine_controller.go @@ -17,6 +17,7 @@ type QuarantineController interface { Delete(ctx *gin.Context) GetById(ctx *gin.Context) GetAll(ctx *gin.Context) + GetLinesByQuarantineId(ctx *gin.Context) CreateLine(ctx *gin.Context) UpdateLine(ctx *gin.Context) DeleteLine(ctx *gin.Context) @@ -28,6 +29,20 @@ type quarantineController struct { db *gorm.DB } +// GetLinesByQuarantineId implements QuarantineController. +func (c *quarantineController) GetLinesByQuarantineId(ctx *gin.Context) { + id := ctx.Param("id") + lines, err := c.quarantineService.GetLinesByQuarantineId(ctx, id) + + if err != nil { + res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_QUARANTINE_LINES, err.Error(), nil) + ctx.JSON(500, res) + return + } + res := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_QUARANTINE_LINES, lines) + ctx.JSON(200, res) +} + func NewQuarantineController(i *do.Injector, quarantineService service.QuarantineService) QuarantineController { return &quarantineController{ quarantineService: quarantineService, diff --git a/modules/quarantine/dto/quarantine_dto.go b/modules/quarantine/dto/quarantine_dto.go index 316b195..d15485e 100644 --- a/modules/quarantine/dto/quarantine_dto.go +++ b/modules/quarantine/dto/quarantine_dto.go @@ -1,5 +1,10 @@ package dto +import ( + "github.com/Caknoooo/go-gin-clean-starter/database/entities" + "github.com/Caknoooo/go-gin-clean-starter/pkg/utils" +) + const ( MESSAGE_FAILED_CREATE_QUARANTINE = "failed create quarantine" MESSAGE_FAILED_CREATE_QUARANTINE_LINE = "failed create quarantine line" @@ -18,6 +23,8 @@ const ( MESSAGE_FAILED_GET_DATA_FROM_BODY = "failed get data from body" MESSAGE_SUCCESS_COMPLETE_QUARANTINE = "success complete quarantine" MESSAGE_FAILED_COMPLETE_QUARANTINE = "failed complete quarantine" + MESSAGE_FAILED_GET_QUARANTINE_LINES = "failed get quarantine lines" + MESSAGE_SUCCESS_GET_QUARANTINE_LINES = "success get quarantine lines" ) type QuarantineCreateRequest struct { @@ -85,3 +92,44 @@ type QuarantineLineResponse struct { Quarantine string `json:"quarantine"` Client string `json:"client"` } + +func MapQuarantineToResponse(entity entities.TInventoryQuarantineEntity, lines []entities.TInventoryQuarantineLineEntity) QuarantineResponse { + resp := QuarantineResponse{ + ID: entity.ID.String(), + DocumentNumber: entity.DocumentNumber, + DocumentDate: utils.DateTimeToString(entity.DocumentDate), + Status: entity.Status, + WarehouseID: entity.WarehouseID.String(), + ZonaID: entity.ZonaID.String(), + ClientID: entity.ClientID.String(), + Warehouse: entity.Warehouse.Name, + Zona: entity.Zona.Name, + Client: entity.Client.Name, + } + return resp +} + +func MapQuarantineLineToResponse(line entities.TInventoryQuarantineLineEntity) QuarantineLineResponse { + return QuarantineLineResponse{ + ID: line.ID.String(), + QuarantineID: line.QuarantineID.String(), + StorageID: line.StorageID.String(), + ProductID: line.ProductID.String(), + ClientID: line.ClientID.String(), + Product: line.Product.Name, + Storage: line.StorageID.String(), // gunakan StorageID, karena field Name tidak ada + Quarantine: line.Quarantine.DocumentNumber, + Client: line.Client.Name, + } +} + +func MapQuarantineLinesToResponse(lines []entities.TInventoryQuarantineLineEntity) []QuarantineLineResponse { + var responses []QuarantineLineResponse + for _, e := range lines { + responses = append(responses, MapQuarantineLineToResponse(e)) + } + if responses == nil { + responses = make([]QuarantineLineResponse, 0) + } + return responses +} diff --git a/modules/quarantine/service/quarantine_service.go b/modules/quarantine/service/quarantine_service.go index 0f08b04..6f197a5 100644 --- a/modules/quarantine/service/quarantine_service.go +++ b/modules/quarantine/service/quarantine_service.go @@ -7,6 +7,7 @@ import ( "github.com/Caknoooo/go-gin-clean-starter/database/entities" invstoragerepository "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_storage/repository" productrepository "github.com/Caknoooo/go-gin-clean-starter/modules/product/repository" + dto "github.com/Caknoooo/go-gin-clean-starter/modules/quarantine/dto" dtodomain "github.com/Caknoooo/go-gin-clean-starter/modules/quarantine/dto" "github.com/Caknoooo/go-gin-clean-starter/modules/quarantine/query" "github.com/Caknoooo/go-gin-clean-starter/modules/quarantine/repository" @@ -21,6 +22,7 @@ type QuarantineService interface { GetAll(ctx context.Context, filter query.QuarantineFilter) ([]dtodomain.QuarantineResponse, int64, error) Update(ctx context.Context, req dtodomain.QuarantineUpdateRequest, id string) (dtodomain.QuarantineResponse, error) Delete(ctx context.Context, id string) error + GetLinesByQuarantineId(ctx context.Context, quarantineId string) ([]dtodomain.QuarantineLineResponse, error) CreateLine(ctx context.Context, quarantineId string, req dtodomain.QuarantineLineCreateRequest) (dtodomain.QuarantineLineResponse, error) UpdateLine(ctx context.Context, lineId string, req dtodomain.QuarantineLineUpdateRequest) (dtodomain.QuarantineLineResponse, error) DeleteLine(ctx context.Context, lineId string) error @@ -34,6 +36,15 @@ type quarantineService struct { productRepo productrepository.ProductRepository } +// GetLinesByQuarantineId implements QuarantineService. +func (s *quarantineService) GetLinesByQuarantineId(ctx context.Context, quarantineId string) ([]dtodomain.QuarantineLineResponse, error) { + lines, err := s.quarantineLineRepo.GetAllByQuarantineId(ctx, quarantineId) + if err != nil { + return nil, err + } + return dto.MapQuarantineLinesToResponse(lines), nil +} + func NewQuarantineService(db *gorm.DB, quarantineRepo repository.QuarantineRepository, quarantineLineRepo repository.QuarantineLineRepository, productRepo productrepository.ProductRepository, uomRepo uomrepository.UomRepository, invStorageRepository invstoragerepository.InventoryStorageRepository) QuarantineService { return &quarantineService{ db: db, @@ -78,7 +89,7 @@ func (s *quarantineService) Create(ctx context.Context, req dtodomain.Quarantine } } tx.Commit() - return mapQuarantineToResponse(created, lines), nil + return dto.MapQuarantineToResponse(created, lines), nil } func (s *quarantineService) GetById(ctx context.Context, id string) (dtodomain.QuarantineResponse, error) { @@ -87,7 +98,7 @@ func (s *quarantineService) GetById(ctx context.Context, id string) (dtodomain.Q return dtodomain.QuarantineResponse{}, err } lines, _ := s.quarantineLineRepo.GetAllByQuarantineId(ctx, id) - return mapQuarantineToResponse(entity, lines), nil + return dto.MapQuarantineToResponse(entity, lines), nil } func (s *quarantineService) GetAll(ctx context.Context, filter query.QuarantineFilter) ([]dtodomain.QuarantineResponse, int64, error) { @@ -98,7 +109,7 @@ func (s *quarantineService) GetAll(ctx context.Context, filter query.QuarantineF var responses []dtodomain.QuarantineResponse for _, entity := range entities { lines, _ := s.quarantineLineRepo.GetAllByQuarantineId(ctx, entity.ID.String()) - responses = append(responses, mapQuarantineToResponse(entity, lines)) + responses = append(responses, dto.MapQuarantineToResponse(entity, lines)) } return responses, total, nil } @@ -125,7 +136,7 @@ func (s *quarantineService) Update(ctx context.Context, req dtodomain.Quarantine } tx.Commit() lines, _ := s.quarantineLineRepo.GetAllByQuarantineId(ctx, id) - return mapQuarantineToResponse(updated, lines), nil + return dto.MapQuarantineToResponse(updated, lines), nil } func (s *quarantineService) Delete(ctx context.Context, id string) error { @@ -157,7 +168,7 @@ func (s *quarantineService) CreateLine(ctx context.Context, quarantineId string, if err != nil { return dtodomain.QuarantineLineResponse{}, err } - return mapQuarantineLineToResponse(created), nil + return dto.MapQuarantineLineToResponse(created), nil } func (s *quarantineService) UpdateLine(ctx context.Context, lineId string, req dtodomain.QuarantineLineUpdateRequest) (dtodomain.QuarantineLineResponse, error) { @@ -171,7 +182,7 @@ func (s *quarantineService) UpdateLine(ctx context.Context, lineId string, req d if err != nil { return dtodomain.QuarantineLineResponse{}, err } - return mapQuarantineLineToResponse(updated), nil + return dto.MapQuarantineLineToResponse(updated), nil } func (s *quarantineService) DeleteLine(ctx context.Context, lineId string) error { @@ -189,7 +200,7 @@ func (s *quarantineService) OnComplete(ctx context.Context, id string) (dtodomai return dtodomain.QuarantineResponse{}, err } lines, _ := s.quarantineLineRepo.GetAllByQuarantineId(ctx, id) - return mapQuarantineToResponse(updated, lines), nil + return dto.MapQuarantineToResponse(updated, lines), nil } func parseUUID(id string) uuid.UUID { @@ -201,36 +212,3 @@ func parseDate(dateStr string) time.Time { t, _ := time.Parse("2006-01-02", dateStr) return t } - -func mapQuarantineToResponse(entity entities.TInventoryQuarantineEntity, lines []entities.TInventoryQuarantineLineEntity) dtodomain.QuarantineResponse { - resp := dtodomain.QuarantineResponse{ - ID: entity.ID.String(), - DocumentNumber: entity.DocumentNumber, - DocumentDate: entity.DocumentDate.Format("2006-01-02"), - Status: entity.Status, - WarehouseID: entity.WarehouseID.String(), - ZonaID: entity.ZonaID.String(), - ClientID: entity.ClientID.String(), - Warehouse: entity.Warehouse.Name, - Zona: entity.Zona.Name, - Client: entity.Client.Name, - } - for _, line := range lines { - resp.QuarantineLines = append(resp.QuarantineLines, mapQuarantineLineToResponse(line)) - } - return resp -} - -func mapQuarantineLineToResponse(line entities.TInventoryQuarantineLineEntity) dtodomain.QuarantineLineResponse { - return dtodomain.QuarantineLineResponse{ - ID: line.ID.String(), - QuarantineID: line.QuarantineID.String(), - StorageID: line.StorageID.String(), - ProductID: line.ProductID.String(), - ClientID: line.ClientID.String(), - Product: line.Product.Name, - Storage: line.StorageID.String(), // gunakan StorageID, karena field Name tidak ada - Quarantine: line.Quarantine.DocumentNumber, - Client: line.Client.Name, - } -}