mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
FEAT[BE] :implement movement number generation and sequence management for transfer layings
This commit is contained in:
+25
@@ -2,6 +2,7 @@ package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"gitlab.com/mbugroup/lti-api.git/internal/common/repository"
|
||||
@@ -16,6 +17,10 @@ type TransferLayingRepository interface {
|
||||
|
||||
// Tambah method baru untuk query dengan filter lengkap
|
||||
GetAllWithFilters(ctx context.Context, offset int, limit int, params *GetAllFilterParams) ([]entity.LayingTransfer, int64, error)
|
||||
|
||||
// Get sequence for movement number
|
||||
GetNextMovementNumber(ctx context.Context) (int64, error)
|
||||
GenerateMovementNumber(ctx context.Context) (string, error)
|
||||
}
|
||||
|
||||
type TransferLayingRepositoryImpl struct {
|
||||
@@ -29,6 +34,26 @@ func NewTransferLayingRepository(db *gorm.DB) TransferLayingRepository {
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *TransferLayingRepositoryImpl) GetNextMovementNumber(ctx context.Context) (int64, error) {
|
||||
var seq int64
|
||||
err := r.db.WithContext(ctx).Raw("SELECT nextval('transfer_laying_seq')").Scan(&seq).Error
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return seq, nil
|
||||
}
|
||||
|
||||
func (r *TransferLayingRepositoryImpl) GenerateMovementNumber(ctx context.Context) (string, error) {
|
||||
seq, err := r.GetNextMovementNumber(ctx)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
// Format: TL00001, TL00002, dst
|
||||
movementNumber := fmt.Sprintf("TL%05d", seq)
|
||||
return movementNumber, nil
|
||||
}
|
||||
|
||||
func (r *TransferLayingRepositoryImpl) IdExists(ctx context.Context, id uint) (bool, error) {
|
||||
return repository.Exists[entity.LayingTransfer](ctx, r.db, id)
|
||||
}
|
||||
|
||||
@@ -271,7 +271,11 @@ func (s *transferLayingService) CreateOne(c *fiber.Ctx, req *validation.Create)
|
||||
return nil, fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Jumlah total sumber (%.0f) harus sama dengan jumlah total tujuan (%.0f)", totalSourceQty, totalTargetQty))
|
||||
}
|
||||
|
||||
transferNumber := fmt.Sprintf("TL-%d", time.Now().UnixNano())
|
||||
transferNumber, err := s.Repository.GenerateMovementNumber(c.Context())
|
||||
if err != nil {
|
||||
s.Log.Errorf("Failed to generate movement number: %+v", err)
|
||||
return nil, fiber.NewError(fiber.StatusInternalServerError, "Gagal membuat nomor transfer")
|
||||
}
|
||||
|
||||
createBody := &entity.LayingTransfer{
|
||||
TransferNumber: transferNumber,
|
||||
|
||||
Reference in New Issue
Block a user