feat: update InventoryMovement entity and service to use non-pointer UUIDs for location and zone fields
Deploy Application / deploy (push) Successful in 18s Details

This commit is contained in:
Habib Fatkhul Rohman 2025-12-10 14:22:23 +07:00
parent 111d0cffa3
commit abd8780191
2 changed files with 31 additions and 25 deletions

View File

@ -16,13 +16,13 @@ type TInventoryMovementEntity struct {
MovementType string `gorm:"type:varchar(50);" json:"movement_type"` MovementType string `gorm:"type:varchar(50);" json:"movement_type"`
Status string `gorm:"type:varchar(50);default:'draft'" json:"status"` Status string `gorm:"type:varchar(50);default:'draft'" json:"status"`
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"` ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
SourceLocationID *uuid.UUID `gorm:"type:uuid;index;" json:"source_location_id"` SourceLocationID uuid.UUID `gorm:"type:uuid;index;" json:"source_location_id"`
DestinationLocationID *uuid.UUID `gorm:"type:uuid;index;" json:"destination_location_id"` DestinationLocationID uuid.UUID `gorm:"type:uuid;index;" json:"destination_location_id"`
SourceZoneID *uuid.UUID `gorm:"type:uuid;index;" json:"source_zone_id"` SourceZoneID uuid.UUID `gorm:"type:uuid;index;" json:"source_zone_id"`
DestinationZoneID *uuid.UUID `gorm:"type:uuid;index;" json:"destination_zone_id"` DestinationZoneID uuid.UUID `gorm:"type:uuid;index;" json:"destination_zone_id"`
SourceAisleID *uuid.UUID `gorm:"type:uuid;index;" json:"source_aisle_id"` SourceAisleID uuid.UUID `gorm:"type:uuid;index;" json:"source_aisle_id"`
DestinationAisleID *uuid.UUID `gorm:"type:uuid;index;" json:"destination_aisle_id"` DestinationAisleID uuid.UUID `gorm:"type:uuid;index;" json:"destination_aisle_id"`
MovementLines []TInventoryMovementLineEntity `gorm:"foreignKey:InvMovementID;references:ID"` MovementLines []TInventoryMovementLineEntity `gorm:"foreignKey:InvMovementID;references:ID"`
SourceLocation MWarehouseEntity `gorm:"foreignKey:SourceLocationID;references:ID"` SourceLocation MWarehouseEntity `gorm:"foreignKey:SourceLocationID;references:ID"`

View File

@ -78,23 +78,25 @@ func (s *inventoryMovementService) Create(ctx context.Context, req dtodomain.Inv
tx.Rollback() tx.Rollback()
return dtodomain.InventoryMovementResponse{}, err return dtodomain.InventoryMovementResponse{}, err
} }
var sourceLocID *uuid.UUID
if req.SourceLocationID != nil && *req.SourceLocationID != "" { var sourceLocationID, destinationLocationID, sourceZoneID, destinationZoneID, sourceAisleID, destinationAisleID uuid.UUID
parsed, err := uuid.Parse(*req.SourceLocationID) if req.SourceLocationID != nil {
if err != nil { sourceLocationID = uuid.MustParse(*req.SourceLocationID)
tx.Rollback()
return dtodomain.InventoryMovementResponse{}, err
}
sourceLocID = &parsed
} }
var destLocID *uuid.UUID if req.DestinationLocationID != nil {
if req.DestinationLocationID != nil && *req.DestinationLocationID != "" { destinationLocationID = uuid.MustParse(*req.DestinationLocationID)
parsed, err := uuid.Parse(*req.DestinationLocationID) }
if err != nil { if req.SourceZoneID != nil {
tx.Rollback() sourceZoneID = uuid.MustParse(*req.SourceZoneID)
return dtodomain.InventoryMovementResponse{}, err }
} if req.DestinationZoneID != nil {
destLocID = &parsed destinationZoneID = uuid.MustParse(*req.DestinationZoneID)
}
if req.SourceAisleID != nil {
sourceAisleID = uuid.MustParse(*req.SourceAisleID)
}
if req.DestinationAisleID != nil {
destinationAisleID = uuid.MustParse(*req.DestinationAisleID)
} }
movement := entities.TInventoryMovementEntity{ movement := entities.TInventoryMovementEntity{
@ -103,8 +105,12 @@ func (s *inventoryMovementService) Create(ctx context.Context, req dtodomain.Inv
MovementType: req.MovementType, MovementType: req.MovementType,
ClientID: clientUUID, ClientID: clientUUID,
Status: req.Status, Status: req.Status,
SourceLocationID: sourceLocID, SourceLocationID: sourceLocationID,
DestinationLocationID: destLocID, DestinationLocationID: destinationLocationID,
SourceZoneID: sourceZoneID,
DestinationZoneID: destinationZoneID,
SourceAisleID: sourceAisleID,
DestinationAisleID: destinationAisleID,
FullAuditTrail: utils.FillAuditTrail(ctx, constants.CREATE), FullAuditTrail: utils.FillAuditTrail(ctx, constants.CREATE),
} }
created, err := s.movementRepo.Create(ctx, tx, movement) created, err := s.movementRepo.Create(ctx, tx, movement)