Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -22,18 +22,69 @@ type ProductSizeMatchResponse struct {
|
|||||||
Schemas map[string][]string `json:"schemas"`
|
Schemas map[string][]string `json:"schemas"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultSizeSchemas() map[string][]string {
|
func fallbackTakSchema() map[string][]string {
|
||||||
return map[string][]string{
|
return map[string][]string{
|
||||||
"tak": {"44", "46", "48", "50", "52", "54", "56", "58", "60", "62", "64", "66", "68", "70", "72", "74"},
|
"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) {
|
func loadProductSizeMatchData(pgDB *sql.DB) (*ProductSizeMatchResponse, error) {
|
||||||
rows, err := pgDB.Query(`
|
rows, err := pgDB.Query(`
|
||||||
SELECT
|
SELECT
|
||||||
@@ -58,9 +109,13 @@ func loadProductSizeMatchData(pgDB *sql.DB) (*ProductSizeMatchResponse, error) {
|
|||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
|
schemas, err := loadSizeSchemas(pgDB)
|
||||||
|
if err != nil {
|
||||||
|
schemas = fallbackTakSchema()
|
||||||
|
}
|
||||||
resp := &ProductSizeMatchResponse{
|
resp := &ProductSizeMatchResponse{
|
||||||
Rules: make([]ProductSizeMatchRule, 0),
|
Rules: make([]ProductSizeMatchRule, 0),
|
||||||
Schemas: defaultSizeSchemas(),
|
Schemas: schemas,
|
||||||
}
|
}
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
|
|||||||
Reference in New Issue
Block a user