Files
quyun-v2/backend/app/requests/sort.go
2025-12-18 10:27:40 +08:00

45 lines
905 B
Go

package requests
import (
"strings"
"github.com/samber/lo"
)
// SortQueryFilter defines common query sorting parameters used by list endpoints.
type SortQueryFilter struct {
// Asc specifies comma-separated field names to sort ascending by.
Asc *string `json:"asc" form:"asc"`
// Desc specifies comma-separated field names to sort descending by.
Desc *string `json:"desc" form:"desc"`
}
func (s *SortQueryFilter) AscFields() []string {
if s.Asc == nil {
return nil
}
return strings.Split(*s.Asc, ",")
}
func (s *SortQueryFilter) DescFields() []string {
if s.Desc == nil {
return nil
}
return strings.Split(*s.Desc, ",")
}
func (s *SortQueryFilter) DescID() *SortQueryFilter {
if s.Desc == nil {
s.Desc = lo.ToPtr("id")
}
items := s.DescFields()
if lo.Contains(items, "id") {
return s
}
items = append(items, "id")
s.Desc = lo.ToPtr(strings.Join(items, ","))
return s
}