This commit is contained in:
2026-03-25 02:23:12 +01:00
parent c13365916c
commit 0f21ed1f81
6 changed files with 151 additions and 119 deletions

View File

@@ -55,7 +55,9 @@ func WhereFromStrings(column, conditionOperator, value string) Filter {
value = strings.ReplaceAll(value, "~", "")
filt = func(d *gorm.DB) *gorm.DB {
return d.Where("lower("+column+`) LIKE lower(?)`, "%"+value+"%")
// return d.Where("lower("+column+`) LIKE lower(?)`, "%"+value+"%")
// (jeśli masz collation case-insensitive, np. utf8mb4_general_ci)
return d.Where(column+` LIKE ?`, "%"+value+"%")
}
@@ -65,6 +67,33 @@ func WhereFromStrings(column, conditionOperator, value string) Filter {
}
}
// Handle IN operator for comma-separated values (e.g., product_id_in=1,2,3,4)
if conditionOperator == "IN" {
parts := strings.Split(value, ",")
var values []interface{}
for _, p := range parts {
p = strings.TrimSpace(p)
if p == "" {
continue
}
// Try to parse as int first
if i, err := strconv.ParseInt(p, 10, 64); err == nil {
values = append(values, i)
} else if f, err := strconv.ParseFloat(p, 64); err == nil {
values = append(values, f)
} else {
values = append(values, p)
}
}
filt = func(d *gorm.DB) *gorm.DB {
return d.Where(column+" IN ?", values)
}
return Filter{
category: WHERE_FILTER,
filter: filt,
}
}
if strings.Contains(value, "]") && strings.Contains(value, "[") {
period := strings.ReplaceAll(value, "[", "")
period = strings.ReplaceAll(period, "]", "")

View File

@@ -46,7 +46,7 @@ func ParseWhereScopes[T any](c fiber.Ctx, ignoredKeys []string, formColumnMappin
}
func extractOperator(key string) (base string, operatorSuffix string) {
suffixes := []string{"_gt", "_gte", "_lt", "_lte", "_eq", "_neq"}
suffixes := []string{"_gt", "_gte", "_lt", "_lte", "_eq", "_neq", "_in"}
for _, suf := range suffixes {
if strings.HasSuffix(key, suf) {
return strings.TrimSuffix(key, suf), suf[1:]
@@ -69,6 +69,8 @@ func resolveOperator(suffix string) string {
return "!="
case "eq":
return "="
case "in":
return "IN"
default:
return "LIKE"
}