diff --git a/svc/product_series_auto_scheduler.go b/svc/product_series_auto_scheduler.go index 80503ac..01b7a2e 100644 --- a/svc/product_series_auto_scheduler.go +++ b/svc/product_series_auto_scheduler.go @@ -101,6 +101,14 @@ func productSeriesFallbackAutoCreateEnabled() bool { return raw == "1" || raw == "true" || raw == "on" || raw == "yes" } +func productSeriesFallbackLogEnabled() bool { + raw := strings.TrimSpace(strings.ToLower(os.Getenv("PRODUCT_SERIES_FALLBACK_LOG"))) + if raw == "" { + return false + } + return raw == "1" || raw == "true" || raw == "on" || raw == "yes" +} + func productSeriesFallbackCode() string { code := strings.TrimSpace(os.Getenv("PRODUCT_SERIES_FALLBACK_SERIES_CODE")) if code == "" { @@ -485,11 +493,14 @@ func productSeriesApplyVariant(ctx context.Context, pg *sql.DB, v productSeriesA return 0, 1, err } if !ready { + if productSeriesFallbackLogEnabled() { + log.Printf("[ProductSeriesFallback] skip_not_ready product=%s color=%s dim3=%s", strings.TrimSpace(v.ProductCode), strings.TrimSpace(v.ColorCode), strings.TrimSpace(v.Dim3Code)) + } return 0, 1, nil } selected := productSeriesSelectRules(v, rules) if len(selected) == 0 { - fallbackID, _, err := productSeriesResolveFallbackSeries(ctx, pg) + fallbackID, fallbackCode, err := productSeriesResolveFallbackSeries(ctx, pg) if err != nil { return 0, 1, err } @@ -505,15 +516,24 @@ WHERE mmitem_id=$1 LIMIT 1 `, mmitemID, dim1ID, nullableInt64ForAuto(dim3ID)).Scan(&exists) if checkErr == nil { + if productSeriesFallbackLogEnabled() { + log.Printf("[ProductSeriesFallback] already_exists product=%s color=%s dim3=%s fallback=%s(%d)", strings.TrimSpace(v.ProductCode), strings.TrimSpace(v.ColorCode), strings.TrimSpace(v.Dim3Code), strings.TrimSpace(fallbackCode), fallbackID) + } // keep existing manual/previous assignment; nothing to do return 0, 0, nil } if checkErr != nil && checkErr != sql.ErrNoRows { return 0, 1, checkErr } + if productSeriesFallbackLogEnabled() { + log.Printf("[ProductSeriesFallback] apply product=%s color=%s dim3=%s fallback=%s(%d)", strings.TrimSpace(v.ProductCode), strings.TrimSpace(v.ColorCode), strings.TrimSpace(v.Dim3Code), strings.TrimSpace(fallbackCode), fallbackID) + } // Use the fallback series as the single selected rule. selected = []productSeriesAutoRule{{SeriesID: fallbackID}} } else { + if productSeriesFallbackLogEnabled() { + log.Printf("[ProductSeriesFallback] missing_fallback product=%s color=%s dim3=%s fallback_code=%s", strings.TrimSpace(v.ProductCode), strings.TrimSpace(v.ColorCode), strings.TrimSpace(v.Dim3Code), strings.TrimSpace(fallbackCode)) + } return 0, 1, nil } }