Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -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"},
|
||||
}
|
||||
}
|
||||
|
||||
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() {
|
||||
|
||||
Reference in New Issue
Block a user