package grmi
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
type Condition struct {
|
|
Items map[string]*ConditionItem
|
|
OrderByFields []*ColumnField
|
|
}
|
|
|
|
func NewCondition(items map[string]*ConditionItem) *Condition {
|
|
orderByFields := make([]*ColumnField, 0, 10)
|
|
conditionItems := make(map[string]*ConditionItem, 0)
|
|
for key, item := range items {
|
|
if item.OrderBy {
|
|
orderByFields = append(orderByFields, item.ColumnField)
|
|
}
|
|
valueParser, ok := valueParsers[item.ColumnField.GoType]
|
|
if ok {
|
|
item.valueParser = valueParser
|
|
conditionItems[key] = item
|
|
}
|
|
}
|
|
return &Condition{Items: conditionItems, 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, item.NewPredicate(item.PredicateType, predicateValue))
|
|
}
|
|
return predicates, nil
|
|
}
|