Files
go-utils/entgo/util.go
2023-05-21 08:15:39 +08:00

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
}