Merge remote-tracking branch 'origin/master'

This commit is contained in:
M_Kececi
2026-06-24 12:44:50 +03:00
parent 79ffe7862c
commit ccf34559c2

View File

@@ -576,6 +576,22 @@ func productSeriesApplyVariant(ctx context.Context, pg *sql.DB, v productSeriesA
} }
} }
if len(selected) == 0 { if len(selected) == 0 {
// Apply fallback based on per-size availability, not total.
// If none of the sizes has qty >= 1 (default), do nothing.
minSizeQty := envFloat64("PRODUCT_SERIES_FALLBACK_MIN_SIZE_QTY", 1)
if !productSeriesHasAnySizeAtLeast(v.SizeQty, minSizeQty) {
if productSeriesFallbackLogEnabled() {
log.Printf("[ProductSeriesFallback] skip_insufficient_stock product=%s color=%s dim3=%s min_size_qty=%.2f sizes=%s",
strings.TrimSpace(v.ProductCode),
strings.TrimSpace(v.ColorCode),
strings.TrimSpace(v.Dim3Code),
minSizeQty,
productSeriesFormatSizeQty(v.SizeQty),
)
}
return 0, 1, nil
}
fallbackID, fallbackCode, err := productSeriesResolveFallbackSeries(ctx, pg) fallbackID, fallbackCode, err := productSeriesResolveFallbackSeries(ctx, pg)
if err != nil { if err != nil {
return 0, 1, err return 0, 1, err
@@ -1409,6 +1425,27 @@ func envIntRange(key string, fallback int, min int, max int) int {
return n return n
} }
func envFloat64(key string, fallback float64) float64 {
raw := strings.TrimSpace(os.Getenv(key))
if raw == "" {
return fallback
}
v, err := strconv.ParseFloat(raw, 64)
if err != nil {
return fallback
}
return v
}
func productSeriesHasAnySizeAtLeast(sizeQty map[string]float64, min float64) bool {
for _, q := range sizeQty {
if q >= min {
return true
}
}
return false
}
func envHHMM(key string, fallbackHH int, fallbackMM int) (int, int) { func envHHMM(key string, fallbackHH int, fallbackMM int) (int, int) {
raw := strings.TrimSpace(os.Getenv(key)) raw := strings.TrimSpace(os.Getenv(key))
if raw == "" { if raw == "" {