62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package entgo
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
|
|
"entgo.io/ent/dialect/sql"
|
|
|
|
"github.com/tx7do/kratos-utils/stringcase"
|
|
)
|
|
|
|
type WhereConditions []func(s *sql.Selector)
|
|
type OrderConditions []func(*sql.Selector)
|
|
|
|
// QueryCommandToSelector 查询命令转换为选择器
|
|
func QueryCommandToSelector(queryCmd, orderByCmd map[string]string) (WhereConditions, OrderConditions) {
|
|
var whereCond WhereConditions
|
|
var orderCond OrderConditions
|
|
|
|
if queryCmd != nil {
|
|
queryStr, ok := queryCmd["query"]
|
|
if ok {
|
|
var queryMap map[string]string
|
|
err := json.Unmarshal([]byte(queryStr), &queryMap)
|
|
if err == nil {
|
|
for k, v := range queryMap {
|
|
key := stringcase.ToSnakeCase(k)
|
|
value := v
|
|
whereCond = append(whereCond, func(s *sql.Selector) {
|
|
s.Where(sql.EQ(s.C(key), value))
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if orderByCmd != nil {
|
|
orderByStr, ok := orderByCmd["orderBy"]
|
|
if ok {
|
|
var orderByMap map[string]string
|
|
err := json.Unmarshal([]byte(orderByStr), &orderByMap)
|
|
if err == nil {
|
|
for k, v := range orderByMap {
|
|
key := stringcase.ToSnakeCase(k)
|
|
switch strings.ToLower(v) {
|
|
case "desc", "descending", "descend":
|
|
orderCond = append(orderCond, func(s *sql.Selector) {
|
|
s.OrderBy(sql.Desc(s.C(key)))
|
|
})
|
|
case "asc", "ascending", "ascend":
|
|
orderCond = append(orderCond, func(s *sql.Selector) {
|
|
s.OrderBy(sql.Asc(s.C(key)))
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return whereCond, orderCond
|
|
}
|