[FEAT/BE] add coloumn usage_qty and change standart ensure product

This commit is contained in:
ragilap
2026-02-18 16:01:20 +07:00
parent e0d42fe6d3
commit 3da05eea02
5 changed files with 39 additions and 125 deletions
+14 -27
View File
@@ -21,9 +21,7 @@ type productWarehouseExistsRepo interface {
}
type recordingValidationRepo interface {
ValidateFeedProductWarehouses(ctx context.Context, ids []uint) (uint, error)
ValidateEggProductWarehouses(ctx context.Context, ids []uint) (uint, error)
ValidateDepletionProductWarehouses(ctx context.Context, ids []uint) (uint, error)
ValidateProductWarehousesByFlags(ctx context.Context, ids []uint, flags []string) (uint, error)
}
func EnsureProductWarehousesExist(ctx context.Context, repo productWarehouseExistsRepo, ids []uint) error {
@@ -42,13 +40,11 @@ func EnsureProductWarehousesExist(ctx context.Context, repo productWarehouseExis
return nil
}
type pwValidatorFunc func(ctx context.Context, ids []uint) (uint, error)
func ensureProductWarehouses(ctx context.Context, ids []uint, label string, validator pwValidatorFunc) error {
if len(ids) == 0 || validator == nil {
func EnsureProductWarehousesByFlags(ctx context.Context, repo recordingValidationRepo, ids []uint, flags []string, label string) error {
if repo == nil || len(ids) == 0 {
return nil
}
invalidID, err := validator(ctx, ids)
invalidID, err := repo.ValidateProductWarehousesByFlags(ctx, ids, flags)
if err != nil {
return err
}
@@ -73,25 +69,16 @@ func CollectWarehouseIDs[T any](items []T, getID idGetter[T]) []uint {
return ids
}
func EnsureFeedProductWarehouses(ctx context.Context, repo recordingValidationRepo, ids []uint) error {
if repo == nil {
return nil
}
return ensureProductWarehouses(ctx, ids, "feed", repo.ValidateFeedProductWarehouses)
}
func EnsureEggProductWarehouses(ctx context.Context, repo recordingValidationRepo, ids []uint) error {
if repo == nil {
return nil
}
return ensureProductWarehouses(ctx, ids, "egg", repo.ValidateEggProductWarehouses)
}
func EnsureDepletionProductWarehouses(ctx context.Context, repo recordingValidationRepo, ids []uint) error {
if repo == nil {
return nil
}
return ensureProductWarehouses(ctx, ids, "depletion", repo.ValidateDepletionProductWarehouses)
func EnsureProductWarehousesByFlagsForItems[T any](
ctx context.Context,
repo recordingValidationRepo,
items []T,
getID idGetter[T],
flags []string,
label string,
) error {
ids := CollectWarehouseIDs(items, getID)
return EnsureProductWarehousesByFlags(ctx, repo, ids, flags, label)
}
func ComputeDepletionRate(prevRecording *entity.Recording, currentDepletion float64, totalChick int64) float64 {