filters
This commit is contained in:
@@ -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, "]", "")
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user