pagination.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. // Code generated by ent, DO NOT EDIT.
  2. package ent
  3. import (
  4. "context"
  5. "fmt"
  6. "wechat-api/ent/contact"
  7. "wechat-api/ent/server"
  8. "wechat-api/ent/wx"
  9. )
  10. const errInvalidPage = "INVALID_PAGE"
  11. const (
  12. listField = "list"
  13. pageNumField = "pageNum"
  14. pageSizeField = "pageSize"
  15. )
  16. type PageDetails struct {
  17. Page uint64 `json:"page"`
  18. Size uint64 `json:"size"`
  19. Total uint64 `json:"total"`
  20. }
  21. // OrderDirection defines the directions in which to order a list of items.
  22. type OrderDirection string
  23. const (
  24. // OrderDirectionAsc specifies an ascending order.
  25. OrderDirectionAsc OrderDirection = "ASC"
  26. // OrderDirectionDesc specifies a descending order.
  27. OrderDirectionDesc OrderDirection = "DESC"
  28. )
  29. // Validate the order direction value.
  30. func (o OrderDirection) Validate() error {
  31. if o != OrderDirectionAsc && o != OrderDirectionDesc {
  32. return fmt.Errorf("%s is not a valid OrderDirection", o)
  33. }
  34. return nil
  35. }
  36. // String implements fmt.Stringer interface.
  37. func (o OrderDirection) String() string {
  38. return string(o)
  39. }
  40. func (o OrderDirection) reverse() OrderDirection {
  41. if o == OrderDirectionDesc {
  42. return OrderDirectionAsc
  43. }
  44. return OrderDirectionDesc
  45. }
  46. const errInvalidPagination = "INVALID_PAGINATION"
  47. type ContactPager struct {
  48. Order contact.OrderOption
  49. Filter func(*ContactQuery) (*ContactQuery, error)
  50. }
  51. // ContactPaginateOption enables pagination customization.
  52. type ContactPaginateOption func(*ContactPager)
  53. // DefaultContactOrder is the default ordering of Contact.
  54. var DefaultContactOrder = Desc(contact.FieldID)
  55. func newContactPager(opts []ContactPaginateOption) (*ContactPager, error) {
  56. pager := &ContactPager{}
  57. for _, opt := range opts {
  58. opt(pager)
  59. }
  60. if pager.Order == nil {
  61. pager.Order = DefaultContactOrder
  62. }
  63. return pager, nil
  64. }
  65. func (p *ContactPager) ApplyFilter(query *ContactQuery) (*ContactQuery, error) {
  66. if p.Filter != nil {
  67. return p.Filter(query)
  68. }
  69. return query, nil
  70. }
  71. // ContactPageList is Contact PageList result.
  72. type ContactPageList struct {
  73. List []*Contact `json:"list"`
  74. PageDetails *PageDetails `json:"pageDetails"`
  75. }
  76. func (c *ContactQuery) Page(
  77. ctx context.Context, pageNum uint64, pageSize uint64, opts ...ContactPaginateOption,
  78. ) (*ContactPageList, error) {
  79. pager, err := newContactPager(opts)
  80. if err != nil {
  81. return nil, err
  82. }
  83. if c, err = pager.ApplyFilter(c); err != nil {
  84. return nil, err
  85. }
  86. ret := &ContactPageList{}
  87. ret.PageDetails = &PageDetails{
  88. Page: pageNum,
  89. Size: pageSize,
  90. }
  91. count, err := c.Clone().Count(ctx)
  92. if err != nil {
  93. return nil, err
  94. }
  95. ret.PageDetails.Total = uint64(count)
  96. if pager.Order != nil {
  97. c = c.Order(pager.Order)
  98. } else {
  99. c = c.Order(DefaultContactOrder)
  100. }
  101. c = c.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  102. list, err := c.All(ctx)
  103. if err != nil {
  104. return nil, err
  105. }
  106. ret.List = list
  107. return ret, nil
  108. }
  109. type ServerPager struct {
  110. Order server.OrderOption
  111. Filter func(*ServerQuery) (*ServerQuery, error)
  112. }
  113. // ServerPaginateOption enables pagination customization.
  114. type ServerPaginateOption func(*ServerPager)
  115. // DefaultServerOrder is the default ordering of Server.
  116. var DefaultServerOrder = Desc(server.FieldID)
  117. func newServerPager(opts []ServerPaginateOption) (*ServerPager, error) {
  118. pager := &ServerPager{}
  119. for _, opt := range opts {
  120. opt(pager)
  121. }
  122. if pager.Order == nil {
  123. pager.Order = DefaultServerOrder
  124. }
  125. return pager, nil
  126. }
  127. func (p *ServerPager) ApplyFilter(query *ServerQuery) (*ServerQuery, error) {
  128. if p.Filter != nil {
  129. return p.Filter(query)
  130. }
  131. return query, nil
  132. }
  133. // ServerPageList is Server PageList result.
  134. type ServerPageList struct {
  135. List []*Server `json:"list"`
  136. PageDetails *PageDetails `json:"pageDetails"`
  137. }
  138. func (s *ServerQuery) Page(
  139. ctx context.Context, pageNum uint64, pageSize uint64, opts ...ServerPaginateOption,
  140. ) (*ServerPageList, error) {
  141. pager, err := newServerPager(opts)
  142. if err != nil {
  143. return nil, err
  144. }
  145. if s, err = pager.ApplyFilter(s); err != nil {
  146. return nil, err
  147. }
  148. ret := &ServerPageList{}
  149. ret.PageDetails = &PageDetails{
  150. Page: pageNum,
  151. Size: pageSize,
  152. }
  153. count, err := s.Clone().Count(ctx)
  154. if err != nil {
  155. return nil, err
  156. }
  157. ret.PageDetails.Total = uint64(count)
  158. if pager.Order != nil {
  159. s = s.Order(pager.Order)
  160. } else {
  161. s = s.Order(DefaultServerOrder)
  162. }
  163. s = s.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  164. list, err := s.All(ctx)
  165. if err != nil {
  166. return nil, err
  167. }
  168. ret.List = list
  169. return ret, nil
  170. }
  171. type WxPager struct {
  172. Order wx.OrderOption
  173. Filter func(*WxQuery) (*WxQuery, error)
  174. }
  175. // WxPaginateOption enables pagination customization.
  176. type WxPaginateOption func(*WxPager)
  177. // DefaultWxOrder is the default ordering of Wx.
  178. var DefaultWxOrder = Desc(wx.FieldID)
  179. func newWxPager(opts []WxPaginateOption) (*WxPager, error) {
  180. pager := &WxPager{}
  181. for _, opt := range opts {
  182. opt(pager)
  183. }
  184. if pager.Order == nil {
  185. pager.Order = DefaultWxOrder
  186. }
  187. return pager, nil
  188. }
  189. func (p *WxPager) ApplyFilter(query *WxQuery) (*WxQuery, error) {
  190. if p.Filter != nil {
  191. return p.Filter(query)
  192. }
  193. return query, nil
  194. }
  195. // WxPageList is Wx PageList result.
  196. type WxPageList struct {
  197. List []*Wx `json:"list"`
  198. PageDetails *PageDetails `json:"pageDetails"`
  199. }
  200. func (w *WxQuery) Page(
  201. ctx context.Context, pageNum uint64, pageSize uint64, opts ...WxPaginateOption,
  202. ) (*WxPageList, error) {
  203. pager, err := newWxPager(opts)
  204. if err != nil {
  205. return nil, err
  206. }
  207. if w, err = pager.ApplyFilter(w); err != nil {
  208. return nil, err
  209. }
  210. ret := &WxPageList{}
  211. ret.PageDetails = &PageDetails{
  212. Page: pageNum,
  213. Size: pageSize,
  214. }
  215. count, err := w.Clone().Count(ctx)
  216. if err != nil {
  217. return nil, err
  218. }
  219. ret.PageDetails.Total = uint64(count)
  220. if pager.Order != nil {
  221. w = w.Order(pager.Order)
  222. } else {
  223. w = w.Order(DefaultWxOrder)
  224. }
  225. w = w.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  226. list, err := w.All(ctx)
  227. if err != nil {
  228. return nil, err
  229. }
  230. ret.List = list
  231. return ret, nil
  232. }