pagination.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  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/label"
  8. "wechat-api/ent/labelrelationship"
  9. "wechat-api/ent/message"
  10. "wechat-api/ent/server"
  11. "wechat-api/ent/wx"
  12. )
  13. const errInvalidPage = "INVALID_PAGE"
  14. const (
  15. listField = "list"
  16. pageNumField = "pageNum"
  17. pageSizeField = "pageSize"
  18. )
  19. type PageDetails struct {
  20. Page uint64 `json:"page"`
  21. Size uint64 `json:"size"`
  22. Total uint64 `json:"total"`
  23. }
  24. // OrderDirection defines the directions in which to order a list of items.
  25. type OrderDirection string
  26. const (
  27. // OrderDirectionAsc specifies an ascending order.
  28. OrderDirectionAsc OrderDirection = "ASC"
  29. // OrderDirectionDesc specifies a descending order.
  30. OrderDirectionDesc OrderDirection = "DESC"
  31. )
  32. // Validate the order direction value.
  33. func (o OrderDirection) Validate() error {
  34. if o != OrderDirectionAsc && o != OrderDirectionDesc {
  35. return fmt.Errorf("%s is not a valid OrderDirection", o)
  36. }
  37. return nil
  38. }
  39. // String implements fmt.Stringer interface.
  40. func (o OrderDirection) String() string {
  41. return string(o)
  42. }
  43. func (o OrderDirection) reverse() OrderDirection {
  44. if o == OrderDirectionDesc {
  45. return OrderDirectionAsc
  46. }
  47. return OrderDirectionDesc
  48. }
  49. const errInvalidPagination = "INVALID_PAGINATION"
  50. type ContactPager struct {
  51. Order contact.OrderOption
  52. Filter func(*ContactQuery) (*ContactQuery, error)
  53. }
  54. // ContactPaginateOption enables pagination customization.
  55. type ContactPaginateOption func(*ContactPager)
  56. // DefaultContactOrder is the default ordering of Contact.
  57. var DefaultContactOrder = Desc(contact.FieldID)
  58. func newContactPager(opts []ContactPaginateOption) (*ContactPager, error) {
  59. pager := &ContactPager{}
  60. for _, opt := range opts {
  61. opt(pager)
  62. }
  63. if pager.Order == nil {
  64. pager.Order = DefaultContactOrder
  65. }
  66. return pager, nil
  67. }
  68. func (p *ContactPager) ApplyFilter(query *ContactQuery) (*ContactQuery, error) {
  69. if p.Filter != nil {
  70. return p.Filter(query)
  71. }
  72. return query, nil
  73. }
  74. // ContactPageList is Contact PageList result.
  75. type ContactPageList struct {
  76. List []*Contact `json:"list"`
  77. PageDetails *PageDetails `json:"pageDetails"`
  78. }
  79. func (c *ContactQuery) Page(
  80. ctx context.Context, pageNum uint64, pageSize uint64, opts ...ContactPaginateOption,
  81. ) (*ContactPageList, error) {
  82. pager, err := newContactPager(opts)
  83. if err != nil {
  84. return nil, err
  85. }
  86. if c, err = pager.ApplyFilter(c); err != nil {
  87. return nil, err
  88. }
  89. ret := &ContactPageList{}
  90. ret.PageDetails = &PageDetails{
  91. Page: pageNum,
  92. Size: pageSize,
  93. }
  94. query := c.Clone()
  95. query.ctx.Fields = nil
  96. count, err := query.Count(ctx)
  97. if err != nil {
  98. return nil, err
  99. }
  100. ret.PageDetails.Total = uint64(count)
  101. if pager.Order != nil {
  102. c = c.Order(pager.Order)
  103. } else {
  104. c = c.Order(DefaultContactOrder)
  105. }
  106. c = c.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  107. list, err := c.All(ctx)
  108. if err != nil {
  109. return nil, err
  110. }
  111. ret.List = list
  112. return ret, nil
  113. }
  114. type LabelPager struct {
  115. Order label.OrderOption
  116. Filter func(*LabelQuery) (*LabelQuery, error)
  117. }
  118. // LabelPaginateOption enables pagination customization.
  119. type LabelPaginateOption func(*LabelPager)
  120. // DefaultLabelOrder is the default ordering of Label.
  121. var DefaultLabelOrder = Desc(label.FieldID)
  122. func newLabelPager(opts []LabelPaginateOption) (*LabelPager, error) {
  123. pager := &LabelPager{}
  124. for _, opt := range opts {
  125. opt(pager)
  126. }
  127. if pager.Order == nil {
  128. pager.Order = DefaultLabelOrder
  129. }
  130. return pager, nil
  131. }
  132. func (p *LabelPager) ApplyFilter(query *LabelQuery) (*LabelQuery, error) {
  133. if p.Filter != nil {
  134. return p.Filter(query)
  135. }
  136. return query, nil
  137. }
  138. // LabelPageList is Label PageList result.
  139. type LabelPageList struct {
  140. List []*Label `json:"list"`
  141. PageDetails *PageDetails `json:"pageDetails"`
  142. }
  143. func (l *LabelQuery) Page(
  144. ctx context.Context, pageNum uint64, pageSize uint64, opts ...LabelPaginateOption,
  145. ) (*LabelPageList, error) {
  146. pager, err := newLabelPager(opts)
  147. if err != nil {
  148. return nil, err
  149. }
  150. if l, err = pager.ApplyFilter(l); err != nil {
  151. return nil, err
  152. }
  153. ret := &LabelPageList{}
  154. ret.PageDetails = &PageDetails{
  155. Page: pageNum,
  156. Size: pageSize,
  157. }
  158. query := l.Clone()
  159. query.ctx.Fields = nil
  160. count, err := query.Count(ctx)
  161. if err != nil {
  162. return nil, err
  163. }
  164. ret.PageDetails.Total = uint64(count)
  165. if pager.Order != nil {
  166. l = l.Order(pager.Order)
  167. } else {
  168. l = l.Order(DefaultLabelOrder)
  169. }
  170. l = l.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  171. list, err := l.All(ctx)
  172. if err != nil {
  173. return nil, err
  174. }
  175. ret.List = list
  176. return ret, nil
  177. }
  178. type LabelRelationshipPager struct {
  179. Order labelrelationship.OrderOption
  180. Filter func(*LabelRelationshipQuery) (*LabelRelationshipQuery, error)
  181. }
  182. // LabelRelationshipPaginateOption enables pagination customization.
  183. type LabelRelationshipPaginateOption func(*LabelRelationshipPager)
  184. // DefaultLabelRelationshipOrder is the default ordering of LabelRelationship.
  185. var DefaultLabelRelationshipOrder = Desc(labelrelationship.FieldID)
  186. func newLabelRelationshipPager(opts []LabelRelationshipPaginateOption) (*LabelRelationshipPager, error) {
  187. pager := &LabelRelationshipPager{}
  188. for _, opt := range opts {
  189. opt(pager)
  190. }
  191. if pager.Order == nil {
  192. pager.Order = DefaultLabelRelationshipOrder
  193. }
  194. return pager, nil
  195. }
  196. func (p *LabelRelationshipPager) ApplyFilter(query *LabelRelationshipQuery) (*LabelRelationshipQuery, error) {
  197. if p.Filter != nil {
  198. return p.Filter(query)
  199. }
  200. return query, nil
  201. }
  202. // LabelRelationshipPageList is LabelRelationship PageList result.
  203. type LabelRelationshipPageList struct {
  204. List []*LabelRelationship `json:"list"`
  205. PageDetails *PageDetails `json:"pageDetails"`
  206. }
  207. func (lr *LabelRelationshipQuery) Page(
  208. ctx context.Context, pageNum uint64, pageSize uint64, opts ...LabelRelationshipPaginateOption,
  209. ) (*LabelRelationshipPageList, error) {
  210. pager, err := newLabelRelationshipPager(opts)
  211. if err != nil {
  212. return nil, err
  213. }
  214. if lr, err = pager.ApplyFilter(lr); err != nil {
  215. return nil, err
  216. }
  217. ret := &LabelRelationshipPageList{}
  218. ret.PageDetails = &PageDetails{
  219. Page: pageNum,
  220. Size: pageSize,
  221. }
  222. query := lr.Clone()
  223. query.ctx.Fields = nil
  224. count, err := query.Count(ctx)
  225. if err != nil {
  226. return nil, err
  227. }
  228. ret.PageDetails.Total = uint64(count)
  229. if pager.Order != nil {
  230. lr = lr.Order(pager.Order)
  231. } else {
  232. lr = lr.Order(DefaultLabelRelationshipOrder)
  233. }
  234. lr = lr.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  235. list, err := lr.All(ctx)
  236. if err != nil {
  237. return nil, err
  238. }
  239. ret.List = list
  240. return ret, nil
  241. }
  242. type MessagePager struct {
  243. Order message.OrderOption
  244. Filter func(*MessageQuery) (*MessageQuery, error)
  245. }
  246. // MessagePaginateOption enables pagination customization.
  247. type MessagePaginateOption func(*MessagePager)
  248. // DefaultMessageOrder is the default ordering of Message.
  249. var DefaultMessageOrder = Desc(message.FieldID)
  250. func newMessagePager(opts []MessagePaginateOption) (*MessagePager, error) {
  251. pager := &MessagePager{}
  252. for _, opt := range opts {
  253. opt(pager)
  254. }
  255. if pager.Order == nil {
  256. pager.Order = DefaultMessageOrder
  257. }
  258. return pager, nil
  259. }
  260. func (p *MessagePager) ApplyFilter(query *MessageQuery) (*MessageQuery, error) {
  261. if p.Filter != nil {
  262. return p.Filter(query)
  263. }
  264. return query, nil
  265. }
  266. // MessagePageList is Message PageList result.
  267. type MessagePageList struct {
  268. List []*Message `json:"list"`
  269. PageDetails *PageDetails `json:"pageDetails"`
  270. }
  271. func (m *MessageQuery) Page(
  272. ctx context.Context, pageNum uint64, pageSize uint64, opts ...MessagePaginateOption,
  273. ) (*MessagePageList, error) {
  274. pager, err := newMessagePager(opts)
  275. if err != nil {
  276. return nil, err
  277. }
  278. if m, err = pager.ApplyFilter(m); err != nil {
  279. return nil, err
  280. }
  281. ret := &MessagePageList{}
  282. ret.PageDetails = &PageDetails{
  283. Page: pageNum,
  284. Size: pageSize,
  285. }
  286. query := m.Clone()
  287. query.ctx.Fields = nil
  288. count, err := query.Count(ctx)
  289. if err != nil {
  290. return nil, err
  291. }
  292. ret.PageDetails.Total = uint64(count)
  293. if pager.Order != nil {
  294. m = m.Order(pager.Order)
  295. } else {
  296. m = m.Order(DefaultMessageOrder)
  297. }
  298. m = m.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  299. list, err := m.All(ctx)
  300. if err != nil {
  301. return nil, err
  302. }
  303. ret.List = list
  304. return ret, nil
  305. }
  306. type ServerPager struct {
  307. Order server.OrderOption
  308. Filter func(*ServerQuery) (*ServerQuery, error)
  309. }
  310. // ServerPaginateOption enables pagination customization.
  311. type ServerPaginateOption func(*ServerPager)
  312. // DefaultServerOrder is the default ordering of Server.
  313. var DefaultServerOrder = Desc(server.FieldID)
  314. func newServerPager(opts []ServerPaginateOption) (*ServerPager, error) {
  315. pager := &ServerPager{}
  316. for _, opt := range opts {
  317. opt(pager)
  318. }
  319. if pager.Order == nil {
  320. pager.Order = DefaultServerOrder
  321. }
  322. return pager, nil
  323. }
  324. func (p *ServerPager) ApplyFilter(query *ServerQuery) (*ServerQuery, error) {
  325. if p.Filter != nil {
  326. return p.Filter(query)
  327. }
  328. return query, nil
  329. }
  330. // ServerPageList is Server PageList result.
  331. type ServerPageList struct {
  332. List []*Server `json:"list"`
  333. PageDetails *PageDetails `json:"pageDetails"`
  334. }
  335. func (s *ServerQuery) Page(
  336. ctx context.Context, pageNum uint64, pageSize uint64, opts ...ServerPaginateOption,
  337. ) (*ServerPageList, error) {
  338. pager, err := newServerPager(opts)
  339. if err != nil {
  340. return nil, err
  341. }
  342. if s, err = pager.ApplyFilter(s); err != nil {
  343. return nil, err
  344. }
  345. ret := &ServerPageList{}
  346. ret.PageDetails = &PageDetails{
  347. Page: pageNum,
  348. Size: pageSize,
  349. }
  350. query := s.Clone()
  351. query.ctx.Fields = nil
  352. count, err := query.Count(ctx)
  353. if err != nil {
  354. return nil, err
  355. }
  356. ret.PageDetails.Total = uint64(count)
  357. if pager.Order != nil {
  358. s = s.Order(pager.Order)
  359. } else {
  360. s = s.Order(DefaultServerOrder)
  361. }
  362. s = s.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  363. list, err := s.All(ctx)
  364. if err != nil {
  365. return nil, err
  366. }
  367. ret.List = list
  368. return ret, nil
  369. }
  370. type WxPager struct {
  371. Order wx.OrderOption
  372. Filter func(*WxQuery) (*WxQuery, error)
  373. }
  374. // WxPaginateOption enables pagination customization.
  375. type WxPaginateOption func(*WxPager)
  376. // DefaultWxOrder is the default ordering of Wx.
  377. var DefaultWxOrder = Desc(wx.FieldID)
  378. func newWxPager(opts []WxPaginateOption) (*WxPager, error) {
  379. pager := &WxPager{}
  380. for _, opt := range opts {
  381. opt(pager)
  382. }
  383. if pager.Order == nil {
  384. pager.Order = DefaultWxOrder
  385. }
  386. return pager, nil
  387. }
  388. func (p *WxPager) ApplyFilter(query *WxQuery) (*WxQuery, error) {
  389. if p.Filter != nil {
  390. return p.Filter(query)
  391. }
  392. return query, nil
  393. }
  394. // WxPageList is Wx PageList result.
  395. type WxPageList struct {
  396. List []*Wx `json:"list"`
  397. PageDetails *PageDetails `json:"pageDetails"`
  398. }
  399. func (w *WxQuery) Page(
  400. ctx context.Context, pageNum uint64, pageSize uint64, opts ...WxPaginateOption,
  401. ) (*WxPageList, error) {
  402. pager, err := newWxPager(opts)
  403. if err != nil {
  404. return nil, err
  405. }
  406. if w, err = pager.ApplyFilter(w); err != nil {
  407. return nil, err
  408. }
  409. ret := &WxPageList{}
  410. ret.PageDetails = &PageDetails{
  411. Page: pageNum,
  412. Size: pageSize,
  413. }
  414. query := w.Clone()
  415. query.ctx.Fields = nil
  416. count, err := query.Count(ctx)
  417. if err != nil {
  418. return nil, err
  419. }
  420. ret.PageDetails.Total = uint64(count)
  421. if pager.Order != nil {
  422. w = w.Order(pager.Order)
  423. } else {
  424. w = w.Order(DefaultWxOrder)
  425. }
  426. w = w.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  427. list, err := w.All(ctx)
  428. if err != nil {
  429. return nil, err
  430. }
  431. ret.List = list
  432. return ret, nil
  433. }