feat: add GetLinesByQuarantineId method to QuarantineController and service for retrieving quarantine lines
Deploy Application / deploy (push) Successful in 25s
Details
Deploy Application / deploy (push) Successful in 25s
Details
This commit is contained in:
parent
257ffc8af2
commit
6fb7218de7
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue