From ed80e4f49291d01a61073d8c1384cdd046b38a15 Mon Sep 17 00:00:00 2001 From: M_Kececi Date: Tue, 31 Mar 2026 12:46:48 +0300 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- svc/routes/product_size_match.go | 73 ++++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 9 deletions(-) diff --git a/svc/routes/product_size_match.go b/svc/routes/product_size_match.go index c2f3824..b2188f0 100644 --- a/svc/routes/product_size_match.go +++ b/svc/routes/product_size_match.go @@ -22,18 +22,69 @@ type ProductSizeMatchResponse struct { Schemas map[string][]string `json:"schemas"` } -func defaultSizeSchemas() map[string][]string { +func fallbackTakSchema() map[string][]string { return map[string][]string{ - "tak": {"44", "46", "48", "50", "52", "54", "56", "58", "60", "62", "64", "66", "68", "70", "72", "74"}, - "ayk": {"39", "40", "41", "42", "43", "44", "45"}, - "ayk_garson": {"22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "STD"}, - "yas": {"2", "4", "6", "8", "10", "12", "14"}, - "pan": {"38", "40", "42", "44", "46", "48", "50", "52", "54", "56", "58", "60", "62", "64", "66", "68"}, - "gom": {"XS", "S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL", "6XL", "7XL"}, - "aksbir": {" ", "44", "STD", "110", "115", "120", "125", "130", "135"}, + "tak": {"44", "46", "48", "50", "52", "54", "56", "58", "60", "62", "64", "66", "68", "70", "72", "74"}, } } +func parseSizeValuesCSV(raw string) []string { + parts := strings.Split(raw, ",") + out := make([]string, 0, len(parts)) + seen := map[string]struct{}{} + for _, p := range parts { + v := strings.TrimSpace(p) + if v == "" { + v = " " + } + if _, ok := seen[v]; ok { + continue + } + seen[v] = struct{}{} + out = append(out, v) + } + return out +} + +func loadSizeSchemas(pgDB *sql.DB) (map[string][]string, error) { + rows, err := pgDB.Query(` + SELECT + COALESCE(group_key, ''), + COALESCE(size_values, '') + FROM mk_size_group + `) + if err != nil { + return nil, err + } + defer rows.Close() + + schemas := map[string][]string{} + for rows.Next() { + var groupKey string + var sizeValues string + if err := rows.Scan(&groupKey, &sizeValues); err != nil { + return nil, err + } + key := strings.TrimSpace(groupKey) + if key == "" { + continue + } + schemas[key] = parseSizeValuesCSV(sizeValues) + } + if err := rows.Err(); err != nil { + return nil, err + } + + if len(schemas) == 0 { + schemas = fallbackTakSchema() + } + if _, ok := schemas["tak"]; !ok { + schemas["tak"] = fallbackTakSchema()["tak"] + } + + return schemas, nil +} + func loadProductSizeMatchData(pgDB *sql.DB) (*ProductSizeMatchResponse, error) { rows, err := pgDB.Query(` SELECT @@ -58,9 +109,13 @@ func loadProductSizeMatchData(pgDB *sql.DB) (*ProductSizeMatchResponse, error) { } defer rows.Close() + schemas, err := loadSizeSchemas(pgDB) + if err != nil { + schemas = fallbackTakSchema() + } resp := &ProductSizeMatchResponse{ Rules: make([]ProductSizeMatchRule, 0), - Schemas: defaultSizeSchemas(), + Schemas: schemas, } for rows.Next() {