Merge remote-tracking branch 'origin/master'

This commit is contained in:
M_Kececi
2026-06-18 16:15:17 +03:00
parent d1f1e5a4f4
commit 9f4ed539ff
3 changed files with 20 additions and 24 deletions

View File

@@ -264,8 +264,8 @@ norm AS (
norm.product_code AS product_code, norm.product_code AS product_code,
md.val1::bigint AS dim1, md.val1::bigint AS dim1,
CASE CASE
WHEN md.val2 IS NULL OR md.val2 = 0 THEN NULL WHEN md.val3 IS NULL OR md.val3 = 0 THEN NULL
ELSE md.val2::bigint ELSE md.val3::bigint
END AS dim3 END AS dim3
FROM norm FROM norm
JOIN mmitem mm JOIN mmitem mm

View File

@@ -591,9 +591,10 @@ DO UPDATE SET dim_id = EXCLUDED.dim_id, updated_at = EXCLUDED.updated_at
if err := rows.Scan(&colorCode, &dim1Code, &dim3Code); err != nil { if err := rows.Scan(&colorCode, &dim1Code, &dim3Code); err != nil {
return nil, err return nil, err
} }
// Resolve to PG dim ids. For this installation we align with PG's authoritative mmitem_dim model: // Resolve to PG dim ids. For this installation we align with mmitem_dim key:
// - dim1 corresponds to mmitem_dim.val1 (typically Color). // - dim1 = color
// - dim3 corresponds to mmitem_dim.val2 (typically Size). // - dim3 = itemdim3 (optional)
// Size (ItemDim1Code) is not part of the key here.
d1 := int64(0) d1 := int64(0)
if id, ok := resolveDimvalFromToken(pgTx, "dimval1", colorCode); ok { if id, ok := resolveDimvalFromToken(pgTx, "dimval1", colorCode); ok {
d1 = id d1 = id
@@ -609,11 +610,8 @@ DO UPDATE SET dim_id = EXCLUDED.dim_id, updated_at = EXCLUDED.updated_at
continue continue
} }
var d3 sql.NullInt64 var d3 sql.NullInt64
// dim3 corresponds to mmitem_dim.val2 (usually ItemDim1Code). // dim3 corresponds to mmitem_dim.val3 (ItemDim3Code).
if id, ok := resolveDimvalFromToken(pgTx, "dimval1", dim1Code); ok { if id, ok := resolveDimvalFromToken(pgTx, "dimval1", dim3Code); ok {
d3 = sql.NullInt64{Int64: id, Valid: true}
resolvedDim3++
} else if id, ok := resolveDimvalFromToken(pgTx, "dimval1", dim3Code); ok {
d3 = sql.NullInt64{Int64: id, Valid: true} d3 = sql.NullInt64{Int64: id, Valid: true}
resolvedDim3++ resolvedDim3++
} }
@@ -720,15 +718,14 @@ WHERE mmitem_id = $1
if !v1.Valid || v1.Int64 <= 0 { if !v1.Valid || v1.Int64 <= 0 {
continue continue
} }
// Variant key in this installation: (val1=color, val3=itemdim3_if_any). Ignore val2 (size).
d1 := v1.Int64 d1 := v1.Int64
_ = mmdimID
_ = v2
var d3 sql.NullInt64 var d3 sql.NullInt64
// In production data we've observed the variant key as (val1, val2). val3 may exist but is not if v3.Valid && v3.Int64 > 0 {
// used as the second axis for pricing/campaign matching in this app. d3 = sql.NullInt64{Int64: v3.Int64, Valid: true}
_ = mmdimID
_ = v3
if v2.Valid && v2.Int64 > 0 {
d3 = sql.NullInt64{Int64: v2.Int64, Valid: true}
} }
key := fmt.Sprintf("%d|%d", d1, func() int64 { key := fmt.Sprintf("%d|%d", d1, func() int64 {

View File

@@ -772,14 +772,13 @@ WHERE mmitem_id = ANY($1::bigint[])
if !v1.Valid || v1.Int64 <= 0 { if !v1.Valid || v1.Int64 <= 0 {
continue continue
} }
// Variant key in this installation: (val1=color, val3=itemdim3_if_any). Ignore val2 (size).
d1 := v1.Int64 d1 := v1.Int64
d3k := int64(0)
// Variant key in this app is (val1, val2). val3 may exist but is not the second axis for matching.
_ = mmdimID _ = mmdimID
_ = v3 _ = v2
if v2.Valid && v2.Int64 > 0 { d3k := int64(0)
d3k = v2.Int64 if v3.Valid && v3.Int64 > 0 {
d3k = v3.Int64
} }
code := strings.TrimSpace(itemToCode[itemID]) code := strings.TrimSpace(itemToCode[itemID])
@@ -886,7 +885,7 @@ ORDER BY dim_id, updated_at DESC;
} }
// Map Nebim tokens to PG integer ids (dimval1 namespace). // Map Nebim tokens to PG integer ids (dimval1 namespace).
// This app uses key: dim1=<color>, dim3=<size> to match mmitem_dim (val1,val2). // This app uses key: dim1=<color>, dim3=<itemdim3> to match mmitem_dim (val1,val3).
d1 := int64(0) d1 := int64(0)
if id, ok := resolveDimID("dimval1", colorCode); ok { if id, ok := resolveDimID("dimval1", colorCode); ok {
d1 = id d1 = id
@@ -895,7 +894,7 @@ ORDER BY dim_id, updated_at DESC;
continue continue
} }
d3k := int64(0) d3k := int64(0)
if id, ok := resolveDimID("dimval1", dim1Code); ok { if id, ok := resolveDimID("dimval1", dim3Code); ok {
d3k = id d3k = id
} }
key := fmt.Sprintf("%d|%d|%d", itemID, d1, d3k) key := fmt.Sprintf("%d|%d|%d", itemID, d1, d3k)