Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package queryreq
  2. // SortParam 排序参数
  3. type SortParam struct {
  4. Field string `json:"field"` // 前端字段名
  5. Order string `json:"order"` // asc/desc
  6. }
  7. // FilterParam 筛选参数
  8. type FilterParam struct {
  9. Field string `json:"field"` // 前端字段名
  10. Operator Operator `json:"operator"` // 运算符枚举
  11. Value interface{} `json:"value"` // 值(支持多种类型)
  12. }
  13. // QueryRequest 通用查询请求
  14. type QueryRequest struct {
  15. Page int `json:"page"` // 页码(从0开始)
  16. PageSize int `json:"pageSize"` // 每页大小
  17. Sort []SortParam `json:"sort,omitempty"`
  18. Filter []FilterParam `json:"filter,omitempty"`
  19. }
  20. // Validate 验证查询请求参数
  21. func (q *QueryRequest) Validate() error {
  22. // 验证分页参数
  23. if q.Page < 0 {
  24. q.Page = 0
  25. }
  26. if q.PageSize <= 0 {
  27. q.PageSize = 10
  28. } else if q.PageSize > 1000 {
  29. q.PageSize = 1000 // 限制最大页大小
  30. }
  31. // 验证排序参数
  32. for i := range q.Sort {
  33. if q.Sort[i].Order != "asc" && q.Sort[i].Order != "desc" {
  34. q.Sort[i].Order = "asc" // 默认升序
  35. }
  36. }
  37. // 验证筛选参数
  38. for i := range q.Filter {
  39. if !q.Filter[i].Operator.IsValid() {
  40. // 无效运算符,移除该筛选条件
  41. q.Filter = append(q.Filter[:i], q.Filter[i+1:]...)
  42. continue
  43. }
  44. }
  45. return nil
  46. }
  47. // GetOffset 计算分页偏移量
  48. func (q *QueryRequest) GetOffset() int {
  49. return q.Page * q.PageSize
  50. }
  51. // GetLimit 获取分页限制
  52. func (q *QueryRequest) GetLimit() int {
  53. return q.PageSize
  54. }