|
6 | 6 | "strings" |
7 | 7 |
|
8 | 8 | sq "github.com/Masterminds/squirrel" |
| 9 | + "github.com/jackc/pgx/v5" |
9 | 10 | ) |
10 | 11 |
|
11 | 12 | const ( |
@@ -37,20 +38,16 @@ func (s Sort) String() string { |
37 | 38 | return fmt.Sprintf("%s %s", s.Column, s.Order) |
38 | 39 | } |
39 | 40 |
|
40 | | -func (s Sort) IsValid() bool { |
41 | | - return s.Column != "" && _MatcherOrderBy.MatchString(s.Column) |
42 | | -} |
43 | | - |
44 | | -var _MatcherOrderBy = regexp.MustCompile(`^-?([a-zA-Z_][a-zA-Z0-9_]*)$`) |
| 41 | +var _MatcherOrderBy = regexp.MustCompile(`-?([a-zA-Z0-9]+)`) |
45 | 42 |
|
46 | 43 | func NewSort(s string) (Sort, bool) { |
| 44 | + if s == "" || !_MatcherOrderBy.MatchString(s) { |
| 45 | + return Sort{}, false |
| 46 | + } |
47 | 47 | sort := Sort{ |
48 | 48 | Column: s, |
49 | 49 | Order: Asc, |
50 | 50 | } |
51 | | - if !sort.IsValid() { |
52 | | - return Sort{}, false |
53 | | - } |
54 | 51 | if strings.HasPrefix(s, "-") { |
55 | 52 | sort.Column = s[1:] |
56 | 53 | sort.Order = Desc |
@@ -83,13 +80,11 @@ func NewPage(size, page uint32, sort ...Sort) *Page { |
83 | 80 | func (p *Page) GetOrder(defaultSort ...string) []Sort { |
84 | 81 | // if page has sort, use it |
85 | 82 | if p != nil && len(p.Sort) != 0 { |
86 | | - sort := make([]Sort, 0, len(p.Sort)) |
87 | | - for _, s := range p.Sort { |
88 | | - if s.IsValid() { |
89 | | - sort = append(sort, s) |
90 | | - } |
| 83 | + for i, s := range p.Sort { |
| 84 | + s.Column = pgx.Identifier(strings.Split(s.Column, ".")).Sanitize() |
| 85 | + p.Sort[i] = s |
91 | 86 | } |
92 | | - return sort |
| 87 | + return p.Sort |
93 | 88 | } |
94 | 89 | // if page has column, use default sort |
95 | 90 | if p == nil || p.Column == "" { |
|
0 commit comments