package grmi import ( "log" "strings" ) type Condition struct { *Paging Items map[string]ConditionItem OrderByFields []Field } func NewCondition(items map[string]ConditionItem, paging *Paging) Condition { orderByFields := make([]Field, 0, 10) conditionItems := make(map[string]ConditionItem, 0) for key, item := range items { if item.OrderBy { orderByFields = append(orderByFields, item.Field) } valueParser, ok := valueParsers[item.Field.GoType] if ok { item.valueParser = valueParser conditionItems[key] = item } else { log.Fatalf("不支持字段%s作为查询条件!\r\n", item.Field.Name) } } return Condition{Items: conditionItems, Paging: paging, OrderByFields: orderByFields} } func (self *Condition) BuildPredicates(urlParameters map[string]string) ([]Predicate, error) { predicates := make([]Predicate, 0, len(urlParameters)) for name, value := range urlParameters { item, ok := self.Items[strings.ToLower(name)] if !ok { continue } predicateValue, err := item.valueParser(value) if err != nil { return nil, NewRequestError(err) } predicates = append(predicates, NewPredicate(item.ColumnName, item.PredicateType, predicateValue)) } return predicates, nil }