|
1 | 1 | package cosy |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "fmt" |
5 | 4 | "github.com/0xJacky/Nginx-UI/internal/logger" |
6 | 5 | "gorm.io/gorm" |
7 | 6 | "gorm.io/gorm/schema" |
| 7 | + "strings" |
8 | 8 | "sync" |
9 | 9 | ) |
10 | 10 |
|
11 | 11 | func (c *Ctx[T]) SortOrder() func(db *gorm.DB) *gorm.DB { |
12 | 12 | return func(db *gorm.DB) *gorm.DB { |
13 | | - sort := c.ctx.DefaultQuery("order", "desc") |
14 | | - if sort != "desc" && sort != "asc" { |
15 | | - sort = "desc" |
| 13 | + order := c.ctx.DefaultQuery("order", "desc") |
| 14 | + if order != "desc" && order != "asc" { |
| 15 | + order = "desc" |
16 | 16 | } |
17 | 17 |
|
18 | | - order := c.itemKey |
19 | | - if value, ok := c.ctx.Get("order"); ok { |
20 | | - // check if the order field is valid |
21 | | - // todo: maybe we can use more generic way to check if the sort_by is valid |
22 | | - s, _ := schema.Parse(c.Model, &sync.Map{}, schema.NamingStrategy{}) |
23 | | - if _, ok := s.FieldsByDBName[value.(string)]; ok { |
24 | | - order = value.(string) |
25 | | - } else { |
26 | | - logger.Error("invalid order field:", order) |
27 | | - } |
28 | | - } else if value, ok := c.ctx.Get("sort_by"); ok { |
29 | | - order = value.(string) |
| 18 | + sortBy := c.ctx.DefaultQuery("sort_by", c.itemKey) |
| 19 | + |
| 20 | + s, _ := schema.Parse(c.Model, &sync.Map{}, schema.NamingStrategy{}) |
| 21 | + if _, ok := s.FieldsByDBName[sortBy]; !ok && sortBy != c.itemKey { |
| 22 | + logger.Error("invalid order field:", sortBy) |
| 23 | + return db |
30 | 24 | } |
31 | 25 |
|
32 | | - order = fmt.Sprintf("%s %s", order, sort) |
33 | | - return db.Order(order) |
| 26 | + var sb strings.Builder |
| 27 | + sb.WriteString(sortBy) |
| 28 | + sb.WriteString(" ") |
| 29 | + sb.WriteString(order) |
| 30 | + |
| 31 | + return db.Order(sb.String()) |
34 | 32 | } |
35 | 33 | } |
36 | 34 |
|
|
0 commit comments