Files
go-utils/entgo/query/order.go
2023-10-27 08:15:00 +08:00

54 lines
1.0 KiB
Go

package entgo
import (
"strings"
"entgo.io/ent/dialect/sql"
)
// QueryCommandToOrderConditions 查询命令转换为排序条件
func QueryCommandToOrderConditions(orderBys []string) (error, func(s *sql.Selector)) {
if len(orderBys) == 0 {
return nil, nil
}
return nil, func(s *sql.Selector) {
for _, v := range orderBys {
if strings.HasPrefix(v, "-") {
// 降序
key := v[1:]
if len(key) == 0 {
continue
}
BuildOrderSelect(s, key, true)
} else {
// 升序
if len(v) == 0 {
continue
}
BuildOrderSelect(s, v, false)
}
}
}
}
func BuildOrderSelector(orderBys []string, defaultOrderField string) (error, func(s *sql.Selector)) {
if len(orderBys) == 0 {
return nil, func(s *sql.Selector) {
BuildOrderSelect(s, defaultOrderField, true)
}
} else {
return QueryCommandToOrderConditions(orderBys)
}
}
func BuildOrderSelect(s *sql.Selector, field string, desc bool) {
if desc {
s.OrderBy(sql.Desc(s.C(field)))
} else {
s.OrderBy(sql.Asc(s.C(field)))
}
}