pagination.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. // Code generated by ent, DO NOT EDIT.
  2. package ent
  3. import (
  4. "context"
  5. "fmt"
  6. "github.com/suyuan32/simple-admin-job/ent/task"
  7. "github.com/suyuan32/simple-admin-job/ent/tasklog"
  8. )
  9. const errInvalidPage = "INVALID_PAGE"
  10. const (
  11. listField = "list"
  12. pageNumField = "pageNum"
  13. pageSizeField = "pageSize"
  14. )
  15. type PageDetails struct {
  16. Page uint64 `json:"page"`
  17. Size uint64 `json:"size"`
  18. Total uint64 `json:"total"`
  19. }
  20. // OrderDirection defines the directions in which to order a list of items.
  21. type OrderDirection string
  22. const (
  23. // OrderDirectionAsc specifies an ascending order.
  24. OrderDirectionAsc OrderDirection = "ASC"
  25. // OrderDirectionDesc specifies a descending order.
  26. OrderDirectionDesc OrderDirection = "DESC"
  27. )
  28. // Validate the order direction value.
  29. func (o OrderDirection) Validate() error {
  30. if o != OrderDirectionAsc && o != OrderDirectionDesc {
  31. return fmt.Errorf("%s is not a valid OrderDirection", o)
  32. }
  33. return nil
  34. }
  35. // String implements fmt.Stringer interface.
  36. func (o OrderDirection) String() string {
  37. return string(o)
  38. }
  39. func (o OrderDirection) reverse() OrderDirection {
  40. if o == OrderDirectionDesc {
  41. return OrderDirectionAsc
  42. }
  43. return OrderDirectionDesc
  44. }
  45. const errInvalidPagination = "INVALID_PAGINATION"
  46. type TaskPager struct {
  47. Order task.OrderOption
  48. Filter func(*TaskQuery) (*TaskQuery, error)
  49. }
  50. // TaskPaginateOption enables pagination customization.
  51. type TaskPaginateOption func(*TaskPager)
  52. // DefaultTaskOrder is the default ordering of Task.
  53. var DefaultTaskOrder = Desc(task.FieldID)
  54. func newTaskPager(opts []TaskPaginateOption) (*TaskPager, error) {
  55. pager := &TaskPager{}
  56. for _, opt := range opts {
  57. opt(pager)
  58. }
  59. if pager.Order == nil {
  60. pager.Order = DefaultTaskOrder
  61. }
  62. return pager, nil
  63. }
  64. func (p *TaskPager) ApplyFilter(query *TaskQuery) (*TaskQuery, error) {
  65. if p.Filter != nil {
  66. return p.Filter(query)
  67. }
  68. return query, nil
  69. }
  70. // TaskPageList is Task PageList result.
  71. type TaskPageList struct {
  72. List []*Task `json:"list"`
  73. PageDetails *PageDetails `json:"pageDetails"`
  74. }
  75. func (t *TaskQuery) Page(
  76. ctx context.Context, pageNum uint64, pageSize uint64, opts ...TaskPaginateOption,
  77. ) (*TaskPageList, error) {
  78. pager, err := newTaskPager(opts)
  79. if err != nil {
  80. return nil, err
  81. }
  82. if t, err = pager.ApplyFilter(t); err != nil {
  83. return nil, err
  84. }
  85. ret := &TaskPageList{}
  86. ret.PageDetails = &PageDetails{
  87. Page: pageNum,
  88. Size: pageSize,
  89. }
  90. count, err := t.Clone().Count(ctx)
  91. if err != nil {
  92. return nil, err
  93. }
  94. ret.PageDetails.Total = uint64(count)
  95. if pager.Order != nil {
  96. t = t.Order(pager.Order)
  97. } else {
  98. t = t.Order(DefaultTaskOrder)
  99. }
  100. t = t.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  101. list, err := t.All(ctx)
  102. if err != nil {
  103. return nil, err
  104. }
  105. ret.List = list
  106. return ret, nil
  107. }
  108. type TaskLogPager struct {
  109. Order tasklog.OrderOption
  110. Filter func(*TaskLogQuery) (*TaskLogQuery, error)
  111. }
  112. // TaskLogPaginateOption enables pagination customization.
  113. type TaskLogPaginateOption func(*TaskLogPager)
  114. // DefaultTaskLogOrder is the default ordering of TaskLog.
  115. var DefaultTaskLogOrder = Desc(tasklog.FieldID)
  116. func newTaskLogPager(opts []TaskLogPaginateOption) (*TaskLogPager, error) {
  117. pager := &TaskLogPager{}
  118. for _, opt := range opts {
  119. opt(pager)
  120. }
  121. if pager.Order == nil {
  122. pager.Order = DefaultTaskLogOrder
  123. }
  124. return pager, nil
  125. }
  126. func (p *TaskLogPager) ApplyFilter(query *TaskLogQuery) (*TaskLogQuery, error) {
  127. if p.Filter != nil {
  128. return p.Filter(query)
  129. }
  130. return query, nil
  131. }
  132. // TaskLogPageList is TaskLog PageList result.
  133. type TaskLogPageList struct {
  134. List []*TaskLog `json:"list"`
  135. PageDetails *PageDetails `json:"pageDetails"`
  136. }
  137. func (tl *TaskLogQuery) Page(
  138. ctx context.Context, pageNum uint64, pageSize uint64, opts ...TaskLogPaginateOption,
  139. ) (*TaskLogPageList, error) {
  140. pager, err := newTaskLogPager(opts)
  141. if err != nil {
  142. return nil, err
  143. }
  144. if tl, err = pager.ApplyFilter(tl); err != nil {
  145. return nil, err
  146. }
  147. ret := &TaskLogPageList{}
  148. ret.PageDetails = &PageDetails{
  149. Page: pageNum,
  150. Size: pageSize,
  151. }
  152. count, err := tl.Clone().Count(ctx)
  153. if err != nil {
  154. return nil, err
  155. }
  156. ret.PageDetails.Total = uint64(count)
  157. if pager.Order != nil {
  158. tl = tl.Order(pager.Order)
  159. } else {
  160. tl = tl.Order(DefaultTaskLogOrder)
  161. }
  162. tl = tl.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  163. list, err := tl.All(ctx)
  164. if err != nil {
  165. return nil, err
  166. }
  167. ret.List = list
  168. return ret, nil
  169. }