func processFilter(filter *usecases.Filter) (*interfaces.GormFilter, error) { fields := filter.Fields dbNamedFields := make([]string, len(fields)) for i, field := range fields { dbNamedFields[i] = utils.ToDBName(field) } if filter.Order != "" { order := strings.ToLower(filter.Order) matched, err := regexp.MatchString("\\A\\w+ (asc|desc)\\z", order) if err != nil || !matched { return nil, errors.New("invalid order filter") } split := strings.Split(filter.Order, " ") filter.Order = utils.ToDBName(split[0]) + " " + split[1] } processedFilter := &interfaces.GormFilter{Fields: dbNamedFields, Limit: filter.Limit, Offset: filter.Offset, Order: filter.Order} buffer := &bytes.Buffer{} err := processCondition(buffer, "", andSql, "", filter.Where) if err != nil { return nil, err } processedFilter.Where = buffer.String() gormIncludes, err := processInclude(filter.Include) if err != nil { return nil, err } processedFilter.Include = gormIncludes return processedFilter, nil }