pagination.go 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612
  1. // Code generated by ent, DO NOT EDIT.
  2. package ent
  3. import (
  4. "context"
  5. "fmt"
  6. "wechat-api/ent/agent"
  7. "wechat-api/ent/batchmsg"
  8. "wechat-api/ent/category"
  9. "wechat-api/ent/contact"
  10. "wechat-api/ent/employee"
  11. "wechat-api/ent/employeeconfig"
  12. "wechat-api/ent/label"
  13. "wechat-api/ent/labelrelationship"
  14. "wechat-api/ent/message"
  15. "wechat-api/ent/messagerecords"
  16. "wechat-api/ent/msg"
  17. "wechat-api/ent/server"
  18. "wechat-api/ent/sopnode"
  19. "wechat-api/ent/sopstage"
  20. "wechat-api/ent/soptask"
  21. "wechat-api/ent/token"
  22. "wechat-api/ent/tutorial"
  23. "wechat-api/ent/workexperience"
  24. "wechat-api/ent/wx"
  25. )
  26. const errInvalidPage = "INVALID_PAGE"
  27. const (
  28. listField = "list"
  29. pageNumField = "pageNum"
  30. pageSizeField = "pageSize"
  31. )
  32. type PageDetails struct {
  33. Page uint64 `json:"page"`
  34. Size uint64 `json:"size"`
  35. Total uint64 `json:"total"`
  36. }
  37. // OrderDirection defines the directions in which to order a list of items.
  38. type OrderDirection string
  39. const (
  40. // OrderDirectionAsc specifies an ascending order.
  41. OrderDirectionAsc OrderDirection = "ASC"
  42. // OrderDirectionDesc specifies a descending order.
  43. OrderDirectionDesc OrderDirection = "DESC"
  44. )
  45. // Validate the order direction value.
  46. func (o OrderDirection) Validate() error {
  47. if o != OrderDirectionAsc && o != OrderDirectionDesc {
  48. return fmt.Errorf("%s is not a valid OrderDirection", o)
  49. }
  50. return nil
  51. }
  52. // String implements fmt.Stringer interface.
  53. func (o OrderDirection) String() string {
  54. return string(o)
  55. }
  56. func (o OrderDirection) reverse() OrderDirection {
  57. if o == OrderDirectionDesc {
  58. return OrderDirectionAsc
  59. }
  60. return OrderDirectionDesc
  61. }
  62. const errInvalidPagination = "INVALID_PAGINATION"
  63. type AgentPager struct {
  64. Order agent.OrderOption
  65. Filter func(*AgentQuery) (*AgentQuery, error)
  66. }
  67. // AgentPaginateOption enables pagination customization.
  68. type AgentPaginateOption func(*AgentPager)
  69. // DefaultAgentOrder is the default ordering of Agent.
  70. var DefaultAgentOrder = Desc(agent.FieldID)
  71. func newAgentPager(opts []AgentPaginateOption) (*AgentPager, error) {
  72. pager := &AgentPager{}
  73. for _, opt := range opts {
  74. opt(pager)
  75. }
  76. if pager.Order == nil {
  77. pager.Order = DefaultAgentOrder
  78. }
  79. return pager, nil
  80. }
  81. func (p *AgentPager) ApplyFilter(query *AgentQuery) (*AgentQuery, error) {
  82. if p.Filter != nil {
  83. return p.Filter(query)
  84. }
  85. return query, nil
  86. }
  87. // AgentPageList is Agent PageList result.
  88. type AgentPageList struct {
  89. List []*Agent `json:"list"`
  90. PageDetails *PageDetails `json:"pageDetails"`
  91. }
  92. func (a *AgentQuery) Page(
  93. ctx context.Context, pageNum uint64, pageSize uint64, opts ...AgentPaginateOption,
  94. ) (*AgentPageList, error) {
  95. pager, err := newAgentPager(opts)
  96. if err != nil {
  97. return nil, err
  98. }
  99. if a, err = pager.ApplyFilter(a); err != nil {
  100. return nil, err
  101. }
  102. ret := &AgentPageList{}
  103. ret.PageDetails = &PageDetails{
  104. Page: pageNum,
  105. Size: pageSize,
  106. }
  107. query := a.Clone()
  108. query.ctx.Fields = nil
  109. count, err := query.Count(ctx)
  110. if err != nil {
  111. return nil, err
  112. }
  113. ret.PageDetails.Total = uint64(count)
  114. if pager.Order != nil {
  115. a = a.Order(pager.Order)
  116. } else {
  117. a = a.Order(DefaultAgentOrder)
  118. }
  119. a = a.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  120. list, err := a.All(ctx)
  121. if err != nil {
  122. return nil, err
  123. }
  124. ret.List = list
  125. return ret, nil
  126. }
  127. type BatchMsgPager struct {
  128. Order batchmsg.OrderOption
  129. Filter func(*BatchMsgQuery) (*BatchMsgQuery, error)
  130. }
  131. // BatchMsgPaginateOption enables pagination customization.
  132. type BatchMsgPaginateOption func(*BatchMsgPager)
  133. // DefaultBatchMsgOrder is the default ordering of BatchMsg.
  134. var DefaultBatchMsgOrder = Desc(batchmsg.FieldID)
  135. func newBatchMsgPager(opts []BatchMsgPaginateOption) (*BatchMsgPager, error) {
  136. pager := &BatchMsgPager{}
  137. for _, opt := range opts {
  138. opt(pager)
  139. }
  140. if pager.Order == nil {
  141. pager.Order = DefaultBatchMsgOrder
  142. }
  143. return pager, nil
  144. }
  145. func (p *BatchMsgPager) ApplyFilter(query *BatchMsgQuery) (*BatchMsgQuery, error) {
  146. if p.Filter != nil {
  147. return p.Filter(query)
  148. }
  149. return query, nil
  150. }
  151. // BatchMsgPageList is BatchMsg PageList result.
  152. type BatchMsgPageList struct {
  153. List []*BatchMsg `json:"list"`
  154. PageDetails *PageDetails `json:"pageDetails"`
  155. }
  156. func (bm *BatchMsgQuery) Page(
  157. ctx context.Context, pageNum uint64, pageSize uint64, opts ...BatchMsgPaginateOption,
  158. ) (*BatchMsgPageList, error) {
  159. pager, err := newBatchMsgPager(opts)
  160. if err != nil {
  161. return nil, err
  162. }
  163. if bm, err = pager.ApplyFilter(bm); err != nil {
  164. return nil, err
  165. }
  166. ret := &BatchMsgPageList{}
  167. ret.PageDetails = &PageDetails{
  168. Page: pageNum,
  169. Size: pageSize,
  170. }
  171. query := bm.Clone()
  172. query.ctx.Fields = nil
  173. count, err := query.Count(ctx)
  174. if err != nil {
  175. return nil, err
  176. }
  177. ret.PageDetails.Total = uint64(count)
  178. if pager.Order != nil {
  179. bm = bm.Order(pager.Order)
  180. } else {
  181. bm = bm.Order(DefaultBatchMsgOrder)
  182. }
  183. bm = bm.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  184. list, err := bm.All(ctx)
  185. if err != nil {
  186. return nil, err
  187. }
  188. ret.List = list
  189. return ret, nil
  190. }
  191. type CategoryPager struct {
  192. Order category.OrderOption
  193. Filter func(*CategoryQuery) (*CategoryQuery, error)
  194. }
  195. // CategoryPaginateOption enables pagination customization.
  196. type CategoryPaginateOption func(*CategoryPager)
  197. // DefaultCategoryOrder is the default ordering of Category.
  198. var DefaultCategoryOrder = Desc(category.FieldID)
  199. func newCategoryPager(opts []CategoryPaginateOption) (*CategoryPager, error) {
  200. pager := &CategoryPager{}
  201. for _, opt := range opts {
  202. opt(pager)
  203. }
  204. if pager.Order == nil {
  205. pager.Order = DefaultCategoryOrder
  206. }
  207. return pager, nil
  208. }
  209. func (p *CategoryPager) ApplyFilter(query *CategoryQuery) (*CategoryQuery, error) {
  210. if p.Filter != nil {
  211. return p.Filter(query)
  212. }
  213. return query, nil
  214. }
  215. // CategoryPageList is Category PageList result.
  216. type CategoryPageList struct {
  217. List []*Category `json:"list"`
  218. PageDetails *PageDetails `json:"pageDetails"`
  219. }
  220. func (c *CategoryQuery) Page(
  221. ctx context.Context, pageNum uint64, pageSize uint64, opts ...CategoryPaginateOption,
  222. ) (*CategoryPageList, error) {
  223. pager, err := newCategoryPager(opts)
  224. if err != nil {
  225. return nil, err
  226. }
  227. if c, err = pager.ApplyFilter(c); err != nil {
  228. return nil, err
  229. }
  230. ret := &CategoryPageList{}
  231. ret.PageDetails = &PageDetails{
  232. Page: pageNum,
  233. Size: pageSize,
  234. }
  235. query := c.Clone()
  236. query.ctx.Fields = nil
  237. count, err := query.Count(ctx)
  238. if err != nil {
  239. return nil, err
  240. }
  241. ret.PageDetails.Total = uint64(count)
  242. if pager.Order != nil {
  243. c = c.Order(pager.Order)
  244. } else {
  245. c = c.Order(DefaultCategoryOrder)
  246. }
  247. c = c.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  248. list, err := c.All(ctx)
  249. if err != nil {
  250. return nil, err
  251. }
  252. ret.List = list
  253. return ret, nil
  254. }
  255. type ContactPager struct {
  256. Order contact.OrderOption
  257. Filter func(*ContactQuery) (*ContactQuery, error)
  258. }
  259. // ContactPaginateOption enables pagination customization.
  260. type ContactPaginateOption func(*ContactPager)
  261. // DefaultContactOrder is the default ordering of Contact.
  262. var DefaultContactOrder = Desc(contact.FieldID)
  263. func newContactPager(opts []ContactPaginateOption) (*ContactPager, error) {
  264. pager := &ContactPager{}
  265. for _, opt := range opts {
  266. opt(pager)
  267. }
  268. if pager.Order == nil {
  269. pager.Order = DefaultContactOrder
  270. }
  271. return pager, nil
  272. }
  273. func (p *ContactPager) ApplyFilter(query *ContactQuery) (*ContactQuery, error) {
  274. if p.Filter != nil {
  275. return p.Filter(query)
  276. }
  277. return query, nil
  278. }
  279. // ContactPageList is Contact PageList result.
  280. type ContactPageList struct {
  281. List []*Contact `json:"list"`
  282. PageDetails *PageDetails `json:"pageDetails"`
  283. }
  284. func (c *ContactQuery) Page(
  285. ctx context.Context, pageNum uint64, pageSize uint64, opts ...ContactPaginateOption,
  286. ) (*ContactPageList, error) {
  287. pager, err := newContactPager(opts)
  288. if err != nil {
  289. return nil, err
  290. }
  291. if c, err = pager.ApplyFilter(c); err != nil {
  292. return nil, err
  293. }
  294. ret := &ContactPageList{}
  295. ret.PageDetails = &PageDetails{
  296. Page: pageNum,
  297. Size: pageSize,
  298. }
  299. query := c.Clone()
  300. query.ctx.Fields = nil
  301. count, err := query.Count(ctx)
  302. if err != nil {
  303. return nil, err
  304. }
  305. ret.PageDetails.Total = uint64(count)
  306. if pager.Order != nil {
  307. c = c.Order(pager.Order)
  308. } else {
  309. c = c.Order(DefaultContactOrder)
  310. }
  311. c = c.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  312. list, err := c.All(ctx)
  313. if err != nil {
  314. return nil, err
  315. }
  316. ret.List = list
  317. return ret, nil
  318. }
  319. type EmployeePager struct {
  320. Order employee.OrderOption
  321. Filter func(*EmployeeQuery) (*EmployeeQuery, error)
  322. }
  323. // EmployeePaginateOption enables pagination customization.
  324. type EmployeePaginateOption func(*EmployeePager)
  325. // DefaultEmployeeOrder is the default ordering of Employee.
  326. var DefaultEmployeeOrder = Desc(employee.FieldID)
  327. func newEmployeePager(opts []EmployeePaginateOption) (*EmployeePager, error) {
  328. pager := &EmployeePager{}
  329. for _, opt := range opts {
  330. opt(pager)
  331. }
  332. if pager.Order == nil {
  333. pager.Order = DefaultEmployeeOrder
  334. }
  335. return pager, nil
  336. }
  337. func (p *EmployeePager) ApplyFilter(query *EmployeeQuery) (*EmployeeQuery, error) {
  338. if p.Filter != nil {
  339. return p.Filter(query)
  340. }
  341. return query, nil
  342. }
  343. // EmployeePageList is Employee PageList result.
  344. type EmployeePageList struct {
  345. List []*Employee `json:"list"`
  346. PageDetails *PageDetails `json:"pageDetails"`
  347. }
  348. func (e *EmployeeQuery) Page(
  349. ctx context.Context, pageNum uint64, pageSize uint64, opts ...EmployeePaginateOption,
  350. ) (*EmployeePageList, error) {
  351. pager, err := newEmployeePager(opts)
  352. if err != nil {
  353. return nil, err
  354. }
  355. if e, err = pager.ApplyFilter(e); err != nil {
  356. return nil, err
  357. }
  358. ret := &EmployeePageList{}
  359. ret.PageDetails = &PageDetails{
  360. Page: pageNum,
  361. Size: pageSize,
  362. }
  363. query := e.Clone()
  364. query.ctx.Fields = nil
  365. count, err := query.Count(ctx)
  366. if err != nil {
  367. return nil, err
  368. }
  369. ret.PageDetails.Total = uint64(count)
  370. if pager.Order != nil {
  371. e = e.Order(pager.Order)
  372. } else {
  373. e = e.Order(DefaultEmployeeOrder)
  374. }
  375. e = e.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  376. list, err := e.All(ctx)
  377. if err != nil {
  378. return nil, err
  379. }
  380. ret.List = list
  381. return ret, nil
  382. }
  383. type EmployeeConfigPager struct {
  384. Order employeeconfig.OrderOption
  385. Filter func(*EmployeeConfigQuery) (*EmployeeConfigQuery, error)
  386. }
  387. // EmployeeConfigPaginateOption enables pagination customization.
  388. type EmployeeConfigPaginateOption func(*EmployeeConfigPager)
  389. // DefaultEmployeeConfigOrder is the default ordering of EmployeeConfig.
  390. var DefaultEmployeeConfigOrder = Desc(employeeconfig.FieldID)
  391. func newEmployeeConfigPager(opts []EmployeeConfigPaginateOption) (*EmployeeConfigPager, error) {
  392. pager := &EmployeeConfigPager{}
  393. for _, opt := range opts {
  394. opt(pager)
  395. }
  396. if pager.Order == nil {
  397. pager.Order = DefaultEmployeeConfigOrder
  398. }
  399. return pager, nil
  400. }
  401. func (p *EmployeeConfigPager) ApplyFilter(query *EmployeeConfigQuery) (*EmployeeConfigQuery, error) {
  402. if p.Filter != nil {
  403. return p.Filter(query)
  404. }
  405. return query, nil
  406. }
  407. // EmployeeConfigPageList is EmployeeConfig PageList result.
  408. type EmployeeConfigPageList struct {
  409. List []*EmployeeConfig `json:"list"`
  410. PageDetails *PageDetails `json:"pageDetails"`
  411. }
  412. func (ec *EmployeeConfigQuery) Page(
  413. ctx context.Context, pageNum uint64, pageSize uint64, opts ...EmployeeConfigPaginateOption,
  414. ) (*EmployeeConfigPageList, error) {
  415. pager, err := newEmployeeConfigPager(opts)
  416. if err != nil {
  417. return nil, err
  418. }
  419. if ec, err = pager.ApplyFilter(ec); err != nil {
  420. return nil, err
  421. }
  422. ret := &EmployeeConfigPageList{}
  423. ret.PageDetails = &PageDetails{
  424. Page: pageNum,
  425. Size: pageSize,
  426. }
  427. query := ec.Clone()
  428. query.ctx.Fields = nil
  429. count, err := query.Count(ctx)
  430. if err != nil {
  431. return nil, err
  432. }
  433. ret.PageDetails.Total = uint64(count)
  434. if pager.Order != nil {
  435. ec = ec.Order(pager.Order)
  436. } else {
  437. ec = ec.Order(DefaultEmployeeConfigOrder)
  438. }
  439. ec = ec.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  440. list, err := ec.All(ctx)
  441. if err != nil {
  442. return nil, err
  443. }
  444. ret.List = list
  445. return ret, nil
  446. }
  447. type LabelPager struct {
  448. Order label.OrderOption
  449. Filter func(*LabelQuery) (*LabelQuery, error)
  450. }
  451. // LabelPaginateOption enables pagination customization.
  452. type LabelPaginateOption func(*LabelPager)
  453. // DefaultLabelOrder is the default ordering of Label.
  454. var DefaultLabelOrder = Desc(label.FieldID)
  455. func newLabelPager(opts []LabelPaginateOption) (*LabelPager, error) {
  456. pager := &LabelPager{}
  457. for _, opt := range opts {
  458. opt(pager)
  459. }
  460. if pager.Order == nil {
  461. pager.Order = DefaultLabelOrder
  462. }
  463. return pager, nil
  464. }
  465. func (p *LabelPager) ApplyFilter(query *LabelQuery) (*LabelQuery, error) {
  466. if p.Filter != nil {
  467. return p.Filter(query)
  468. }
  469. return query, nil
  470. }
  471. // LabelPageList is Label PageList result.
  472. type LabelPageList struct {
  473. List []*Label `json:"list"`
  474. PageDetails *PageDetails `json:"pageDetails"`
  475. }
  476. func (l *LabelQuery) Page(
  477. ctx context.Context, pageNum uint64, pageSize uint64, opts ...LabelPaginateOption,
  478. ) (*LabelPageList, error) {
  479. pager, err := newLabelPager(opts)
  480. if err != nil {
  481. return nil, err
  482. }
  483. if l, err = pager.ApplyFilter(l); err != nil {
  484. return nil, err
  485. }
  486. ret := &LabelPageList{}
  487. ret.PageDetails = &PageDetails{
  488. Page: pageNum,
  489. Size: pageSize,
  490. }
  491. query := l.Clone()
  492. query.ctx.Fields = nil
  493. count, err := query.Count(ctx)
  494. if err != nil {
  495. return nil, err
  496. }
  497. ret.PageDetails.Total = uint64(count)
  498. if pager.Order != nil {
  499. l = l.Order(pager.Order)
  500. } else {
  501. l = l.Order(DefaultLabelOrder)
  502. }
  503. l = l.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  504. list, err := l.All(ctx)
  505. if err != nil {
  506. return nil, err
  507. }
  508. ret.List = list
  509. return ret, nil
  510. }
  511. type LabelRelationshipPager struct {
  512. Order labelrelationship.OrderOption
  513. Filter func(*LabelRelationshipQuery) (*LabelRelationshipQuery, error)
  514. }
  515. // LabelRelationshipPaginateOption enables pagination customization.
  516. type LabelRelationshipPaginateOption func(*LabelRelationshipPager)
  517. // DefaultLabelRelationshipOrder is the default ordering of LabelRelationship.
  518. var DefaultLabelRelationshipOrder = Desc(labelrelationship.FieldID)
  519. func newLabelRelationshipPager(opts []LabelRelationshipPaginateOption) (*LabelRelationshipPager, error) {
  520. pager := &LabelRelationshipPager{}
  521. for _, opt := range opts {
  522. opt(pager)
  523. }
  524. if pager.Order == nil {
  525. pager.Order = DefaultLabelRelationshipOrder
  526. }
  527. return pager, nil
  528. }
  529. func (p *LabelRelationshipPager) ApplyFilter(query *LabelRelationshipQuery) (*LabelRelationshipQuery, error) {
  530. if p.Filter != nil {
  531. return p.Filter(query)
  532. }
  533. return query, nil
  534. }
  535. // LabelRelationshipPageList is LabelRelationship PageList result.
  536. type LabelRelationshipPageList struct {
  537. List []*LabelRelationship `json:"list"`
  538. PageDetails *PageDetails `json:"pageDetails"`
  539. }
  540. func (lr *LabelRelationshipQuery) Page(
  541. ctx context.Context, pageNum uint64, pageSize uint64, opts ...LabelRelationshipPaginateOption,
  542. ) (*LabelRelationshipPageList, error) {
  543. pager, err := newLabelRelationshipPager(opts)
  544. if err != nil {
  545. return nil, err
  546. }
  547. if lr, err = pager.ApplyFilter(lr); err != nil {
  548. return nil, err
  549. }
  550. ret := &LabelRelationshipPageList{}
  551. ret.PageDetails = &PageDetails{
  552. Page: pageNum,
  553. Size: pageSize,
  554. }
  555. query := lr.Clone()
  556. query.ctx.Fields = nil
  557. count, err := query.Count(ctx)
  558. if err != nil {
  559. return nil, err
  560. }
  561. ret.PageDetails.Total = uint64(count)
  562. if pager.Order != nil {
  563. lr = lr.Order(pager.Order)
  564. } else {
  565. lr = lr.Order(DefaultLabelRelationshipOrder)
  566. }
  567. lr = lr.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  568. list, err := lr.All(ctx)
  569. if err != nil {
  570. return nil, err
  571. }
  572. ret.List = list
  573. return ret, nil
  574. }
  575. type MessagePager struct {
  576. Order message.OrderOption
  577. Filter func(*MessageQuery) (*MessageQuery, error)
  578. }
  579. // MessagePaginateOption enables pagination customization.
  580. type MessagePaginateOption func(*MessagePager)
  581. // DefaultMessageOrder is the default ordering of Message.
  582. var DefaultMessageOrder = Desc(message.FieldID)
  583. func newMessagePager(opts []MessagePaginateOption) (*MessagePager, error) {
  584. pager := &MessagePager{}
  585. for _, opt := range opts {
  586. opt(pager)
  587. }
  588. if pager.Order == nil {
  589. pager.Order = DefaultMessageOrder
  590. }
  591. return pager, nil
  592. }
  593. func (p *MessagePager) ApplyFilter(query *MessageQuery) (*MessageQuery, error) {
  594. if p.Filter != nil {
  595. return p.Filter(query)
  596. }
  597. return query, nil
  598. }
  599. // MessagePageList is Message PageList result.
  600. type MessagePageList struct {
  601. List []*Message `json:"list"`
  602. PageDetails *PageDetails `json:"pageDetails"`
  603. }
  604. func (m *MessageQuery) Page(
  605. ctx context.Context, pageNum uint64, pageSize uint64, opts ...MessagePaginateOption,
  606. ) (*MessagePageList, error) {
  607. pager, err := newMessagePager(opts)
  608. if err != nil {
  609. return nil, err
  610. }
  611. if m, err = pager.ApplyFilter(m); err != nil {
  612. return nil, err
  613. }
  614. ret := &MessagePageList{}
  615. ret.PageDetails = &PageDetails{
  616. Page: pageNum,
  617. Size: pageSize,
  618. }
  619. query := m.Clone()
  620. query.ctx.Fields = nil
  621. count, err := query.Count(ctx)
  622. if err != nil {
  623. return nil, err
  624. }
  625. ret.PageDetails.Total = uint64(count)
  626. if pager.Order != nil {
  627. m = m.Order(pager.Order)
  628. } else {
  629. m = m.Order(DefaultMessageOrder)
  630. }
  631. m = m.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  632. list, err := m.All(ctx)
  633. if err != nil {
  634. return nil, err
  635. }
  636. ret.List = list
  637. return ret, nil
  638. }
  639. type MessageRecordsPager struct {
  640. Order messagerecords.OrderOption
  641. Filter func(*MessageRecordsQuery) (*MessageRecordsQuery, error)
  642. }
  643. // MessageRecordsPaginateOption enables pagination customization.
  644. type MessageRecordsPaginateOption func(*MessageRecordsPager)
  645. // DefaultMessageRecordsOrder is the default ordering of MessageRecords.
  646. var DefaultMessageRecordsOrder = Desc(messagerecords.FieldID)
  647. func newMessageRecordsPager(opts []MessageRecordsPaginateOption) (*MessageRecordsPager, error) {
  648. pager := &MessageRecordsPager{}
  649. for _, opt := range opts {
  650. opt(pager)
  651. }
  652. if pager.Order == nil {
  653. pager.Order = DefaultMessageRecordsOrder
  654. }
  655. return pager, nil
  656. }
  657. func (p *MessageRecordsPager) ApplyFilter(query *MessageRecordsQuery) (*MessageRecordsQuery, error) {
  658. if p.Filter != nil {
  659. return p.Filter(query)
  660. }
  661. return query, nil
  662. }
  663. // MessageRecordsPageList is MessageRecords PageList result.
  664. type MessageRecordsPageList struct {
  665. List []*MessageRecords `json:"list"`
  666. PageDetails *PageDetails `json:"pageDetails"`
  667. }
  668. func (mr *MessageRecordsQuery) Page(
  669. ctx context.Context, pageNum uint64, pageSize uint64, opts ...MessageRecordsPaginateOption,
  670. ) (*MessageRecordsPageList, error) {
  671. pager, err := newMessageRecordsPager(opts)
  672. if err != nil {
  673. return nil, err
  674. }
  675. if mr, err = pager.ApplyFilter(mr); err != nil {
  676. return nil, err
  677. }
  678. ret := &MessageRecordsPageList{}
  679. ret.PageDetails = &PageDetails{
  680. Page: pageNum,
  681. Size: pageSize,
  682. }
  683. query := mr.Clone()
  684. query.ctx.Fields = nil
  685. count, err := query.Count(ctx)
  686. if err != nil {
  687. return nil, err
  688. }
  689. ret.PageDetails.Total = uint64(count)
  690. if pager.Order != nil {
  691. mr = mr.Order(pager.Order)
  692. } else {
  693. mr = mr.Order(DefaultMessageRecordsOrder)
  694. }
  695. mr = mr.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  696. list, err := mr.All(ctx)
  697. if err != nil {
  698. return nil, err
  699. }
  700. ret.List = list
  701. return ret, nil
  702. }
  703. type MsgPager struct {
  704. Order msg.OrderOption
  705. Filter func(*MsgQuery) (*MsgQuery, error)
  706. }
  707. // MsgPaginateOption enables pagination customization.
  708. type MsgPaginateOption func(*MsgPager)
  709. // DefaultMsgOrder is the default ordering of Msg.
  710. var DefaultMsgOrder = Desc(msg.FieldID)
  711. func newMsgPager(opts []MsgPaginateOption) (*MsgPager, error) {
  712. pager := &MsgPager{}
  713. for _, opt := range opts {
  714. opt(pager)
  715. }
  716. if pager.Order == nil {
  717. pager.Order = DefaultMsgOrder
  718. }
  719. return pager, nil
  720. }
  721. func (p *MsgPager) ApplyFilter(query *MsgQuery) (*MsgQuery, error) {
  722. if p.Filter != nil {
  723. return p.Filter(query)
  724. }
  725. return query, nil
  726. }
  727. // MsgPageList is Msg PageList result.
  728. type MsgPageList struct {
  729. List []*Msg `json:"list"`
  730. PageDetails *PageDetails `json:"pageDetails"`
  731. }
  732. func (m *MsgQuery) Page(
  733. ctx context.Context, pageNum uint64, pageSize uint64, opts ...MsgPaginateOption,
  734. ) (*MsgPageList, error) {
  735. pager, err := newMsgPager(opts)
  736. if err != nil {
  737. return nil, err
  738. }
  739. if m, err = pager.ApplyFilter(m); err != nil {
  740. return nil, err
  741. }
  742. ret := &MsgPageList{}
  743. ret.PageDetails = &PageDetails{
  744. Page: pageNum,
  745. Size: pageSize,
  746. }
  747. query := m.Clone()
  748. query.ctx.Fields = nil
  749. count, err := query.Count(ctx)
  750. if err != nil {
  751. return nil, err
  752. }
  753. ret.PageDetails.Total = uint64(count)
  754. if pager.Order != nil {
  755. m = m.Order(pager.Order)
  756. } else {
  757. m = m.Order(DefaultMsgOrder)
  758. }
  759. m = m.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  760. list, err := m.All(ctx)
  761. if err != nil {
  762. return nil, err
  763. }
  764. ret.List = list
  765. return ret, nil
  766. }
  767. type ServerPager struct {
  768. Order server.OrderOption
  769. Filter func(*ServerQuery) (*ServerQuery, error)
  770. }
  771. // ServerPaginateOption enables pagination customization.
  772. type ServerPaginateOption func(*ServerPager)
  773. // DefaultServerOrder is the default ordering of Server.
  774. var DefaultServerOrder = Desc(server.FieldID)
  775. func newServerPager(opts []ServerPaginateOption) (*ServerPager, error) {
  776. pager := &ServerPager{}
  777. for _, opt := range opts {
  778. opt(pager)
  779. }
  780. if pager.Order == nil {
  781. pager.Order = DefaultServerOrder
  782. }
  783. return pager, nil
  784. }
  785. func (p *ServerPager) ApplyFilter(query *ServerQuery) (*ServerQuery, error) {
  786. if p.Filter != nil {
  787. return p.Filter(query)
  788. }
  789. return query, nil
  790. }
  791. // ServerPageList is Server PageList result.
  792. type ServerPageList struct {
  793. List []*Server `json:"list"`
  794. PageDetails *PageDetails `json:"pageDetails"`
  795. }
  796. func (s *ServerQuery) Page(
  797. ctx context.Context, pageNum uint64, pageSize uint64, opts ...ServerPaginateOption,
  798. ) (*ServerPageList, error) {
  799. pager, err := newServerPager(opts)
  800. if err != nil {
  801. return nil, err
  802. }
  803. if s, err = pager.ApplyFilter(s); err != nil {
  804. return nil, err
  805. }
  806. ret := &ServerPageList{}
  807. ret.PageDetails = &PageDetails{
  808. Page: pageNum,
  809. Size: pageSize,
  810. }
  811. query := s.Clone()
  812. query.ctx.Fields = nil
  813. count, err := query.Count(ctx)
  814. if err != nil {
  815. return nil, err
  816. }
  817. ret.PageDetails.Total = uint64(count)
  818. if pager.Order != nil {
  819. s = s.Order(pager.Order)
  820. } else {
  821. s = s.Order(DefaultServerOrder)
  822. }
  823. s = s.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  824. list, err := s.All(ctx)
  825. if err != nil {
  826. return nil, err
  827. }
  828. ret.List = list
  829. return ret, nil
  830. }
  831. type SopNodePager struct {
  832. Order sopnode.OrderOption
  833. Filter func(*SopNodeQuery) (*SopNodeQuery, error)
  834. }
  835. // SopNodePaginateOption enables pagination customization.
  836. type SopNodePaginateOption func(*SopNodePager)
  837. // DefaultSopNodeOrder is the default ordering of SopNode.
  838. var DefaultSopNodeOrder = Desc(sopnode.FieldID)
  839. func newSopNodePager(opts []SopNodePaginateOption) (*SopNodePager, error) {
  840. pager := &SopNodePager{}
  841. for _, opt := range opts {
  842. opt(pager)
  843. }
  844. if pager.Order == nil {
  845. pager.Order = DefaultSopNodeOrder
  846. }
  847. return pager, nil
  848. }
  849. func (p *SopNodePager) ApplyFilter(query *SopNodeQuery) (*SopNodeQuery, error) {
  850. if p.Filter != nil {
  851. return p.Filter(query)
  852. }
  853. return query, nil
  854. }
  855. // SopNodePageList is SopNode PageList result.
  856. type SopNodePageList struct {
  857. List []*SopNode `json:"list"`
  858. PageDetails *PageDetails `json:"pageDetails"`
  859. }
  860. func (sn *SopNodeQuery) Page(
  861. ctx context.Context, pageNum uint64, pageSize uint64, opts ...SopNodePaginateOption,
  862. ) (*SopNodePageList, error) {
  863. pager, err := newSopNodePager(opts)
  864. if err != nil {
  865. return nil, err
  866. }
  867. if sn, err = pager.ApplyFilter(sn); err != nil {
  868. return nil, err
  869. }
  870. ret := &SopNodePageList{}
  871. ret.PageDetails = &PageDetails{
  872. Page: pageNum,
  873. Size: pageSize,
  874. }
  875. query := sn.Clone()
  876. query.ctx.Fields = nil
  877. count, err := query.Count(ctx)
  878. if err != nil {
  879. return nil, err
  880. }
  881. ret.PageDetails.Total = uint64(count)
  882. if pager.Order != nil {
  883. sn = sn.Order(pager.Order)
  884. } else {
  885. sn = sn.Order(DefaultSopNodeOrder)
  886. }
  887. sn = sn.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  888. list, err := sn.All(ctx)
  889. if err != nil {
  890. return nil, err
  891. }
  892. ret.List = list
  893. return ret, nil
  894. }
  895. type SopStagePager struct {
  896. Order sopstage.OrderOption
  897. Filter func(*SopStageQuery) (*SopStageQuery, error)
  898. }
  899. // SopStagePaginateOption enables pagination customization.
  900. type SopStagePaginateOption func(*SopStagePager)
  901. // DefaultSopStageOrder is the default ordering of SopStage.
  902. var DefaultSopStageOrder = Desc(sopstage.FieldID)
  903. func newSopStagePager(opts []SopStagePaginateOption) (*SopStagePager, error) {
  904. pager := &SopStagePager{}
  905. for _, opt := range opts {
  906. opt(pager)
  907. }
  908. if pager.Order == nil {
  909. pager.Order = DefaultSopStageOrder
  910. }
  911. return pager, nil
  912. }
  913. func (p *SopStagePager) ApplyFilter(query *SopStageQuery) (*SopStageQuery, error) {
  914. if p.Filter != nil {
  915. return p.Filter(query)
  916. }
  917. return query, nil
  918. }
  919. // SopStagePageList is SopStage PageList result.
  920. type SopStagePageList struct {
  921. List []*SopStage `json:"list"`
  922. PageDetails *PageDetails `json:"pageDetails"`
  923. }
  924. func (ss *SopStageQuery) Page(
  925. ctx context.Context, pageNum uint64, pageSize uint64, opts ...SopStagePaginateOption,
  926. ) (*SopStagePageList, error) {
  927. pager, err := newSopStagePager(opts)
  928. if err != nil {
  929. return nil, err
  930. }
  931. if ss, err = pager.ApplyFilter(ss); err != nil {
  932. return nil, err
  933. }
  934. ret := &SopStagePageList{}
  935. ret.PageDetails = &PageDetails{
  936. Page: pageNum,
  937. Size: pageSize,
  938. }
  939. query := ss.Clone()
  940. query.ctx.Fields = nil
  941. count, err := query.Count(ctx)
  942. if err != nil {
  943. return nil, err
  944. }
  945. ret.PageDetails.Total = uint64(count)
  946. if pager.Order != nil {
  947. ss = ss.Order(pager.Order)
  948. } else {
  949. ss = ss.Order(DefaultSopStageOrder)
  950. }
  951. ss = ss.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  952. list, err := ss.All(ctx)
  953. if err != nil {
  954. return nil, err
  955. }
  956. ret.List = list
  957. return ret, nil
  958. }
  959. type SopTaskPager struct {
  960. Order soptask.OrderOption
  961. Filter func(*SopTaskQuery) (*SopTaskQuery, error)
  962. }
  963. // SopTaskPaginateOption enables pagination customization.
  964. type SopTaskPaginateOption func(*SopTaskPager)
  965. // DefaultSopTaskOrder is the default ordering of SopTask.
  966. var DefaultSopTaskOrder = Desc(soptask.FieldID)
  967. func newSopTaskPager(opts []SopTaskPaginateOption) (*SopTaskPager, error) {
  968. pager := &SopTaskPager{}
  969. for _, opt := range opts {
  970. opt(pager)
  971. }
  972. if pager.Order == nil {
  973. pager.Order = DefaultSopTaskOrder
  974. }
  975. return pager, nil
  976. }
  977. func (p *SopTaskPager) ApplyFilter(query *SopTaskQuery) (*SopTaskQuery, error) {
  978. if p.Filter != nil {
  979. return p.Filter(query)
  980. }
  981. return query, nil
  982. }
  983. // SopTaskPageList is SopTask PageList result.
  984. type SopTaskPageList struct {
  985. List []*SopTask `json:"list"`
  986. PageDetails *PageDetails `json:"pageDetails"`
  987. }
  988. func (st *SopTaskQuery) Page(
  989. ctx context.Context, pageNum uint64, pageSize uint64, opts ...SopTaskPaginateOption,
  990. ) (*SopTaskPageList, error) {
  991. pager, err := newSopTaskPager(opts)
  992. if err != nil {
  993. return nil, err
  994. }
  995. if st, err = pager.ApplyFilter(st); err != nil {
  996. return nil, err
  997. }
  998. ret := &SopTaskPageList{}
  999. ret.PageDetails = &PageDetails{
  1000. Page: pageNum,
  1001. Size: pageSize,
  1002. }
  1003. query := st.Clone()
  1004. query.ctx.Fields = nil
  1005. count, err := query.Count(ctx)
  1006. if err != nil {
  1007. return nil, err
  1008. }
  1009. ret.PageDetails.Total = uint64(count)
  1010. if pager.Order != nil {
  1011. st = st.Order(pager.Order)
  1012. } else {
  1013. st = st.Order(DefaultSopTaskOrder)
  1014. }
  1015. st = st.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  1016. list, err := st.All(ctx)
  1017. if err != nil {
  1018. return nil, err
  1019. }
  1020. ret.List = list
  1021. return ret, nil
  1022. }
  1023. type TokenPager struct {
  1024. Order token.OrderOption
  1025. Filter func(*TokenQuery) (*TokenQuery, error)
  1026. }
  1027. // TokenPaginateOption enables pagination customization.
  1028. type TokenPaginateOption func(*TokenPager)
  1029. // DefaultTokenOrder is the default ordering of Token.
  1030. var DefaultTokenOrder = Desc(token.FieldID)
  1031. func newTokenPager(opts []TokenPaginateOption) (*TokenPager, error) {
  1032. pager := &TokenPager{}
  1033. for _, opt := range opts {
  1034. opt(pager)
  1035. }
  1036. if pager.Order == nil {
  1037. pager.Order = DefaultTokenOrder
  1038. }
  1039. return pager, nil
  1040. }
  1041. func (p *TokenPager) ApplyFilter(query *TokenQuery) (*TokenQuery, error) {
  1042. if p.Filter != nil {
  1043. return p.Filter(query)
  1044. }
  1045. return query, nil
  1046. }
  1047. // TokenPageList is Token PageList result.
  1048. type TokenPageList struct {
  1049. List []*Token `json:"list"`
  1050. PageDetails *PageDetails `json:"pageDetails"`
  1051. }
  1052. func (t *TokenQuery) Page(
  1053. ctx context.Context, pageNum uint64, pageSize uint64, opts ...TokenPaginateOption,
  1054. ) (*TokenPageList, error) {
  1055. pager, err := newTokenPager(opts)
  1056. if err != nil {
  1057. return nil, err
  1058. }
  1059. if t, err = pager.ApplyFilter(t); err != nil {
  1060. return nil, err
  1061. }
  1062. ret := &TokenPageList{}
  1063. ret.PageDetails = &PageDetails{
  1064. Page: pageNum,
  1065. Size: pageSize,
  1066. }
  1067. query := t.Clone()
  1068. query.ctx.Fields = nil
  1069. count, err := query.Count(ctx)
  1070. if err != nil {
  1071. return nil, err
  1072. }
  1073. ret.PageDetails.Total = uint64(count)
  1074. if pager.Order != nil {
  1075. t = t.Order(pager.Order)
  1076. } else {
  1077. t = t.Order(DefaultTokenOrder)
  1078. }
  1079. t = t.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  1080. list, err := t.All(ctx)
  1081. if err != nil {
  1082. return nil, err
  1083. }
  1084. ret.List = list
  1085. return ret, nil
  1086. }
  1087. type TutorialPager struct {
  1088. Order tutorial.OrderOption
  1089. Filter func(*TutorialQuery) (*TutorialQuery, error)
  1090. }
  1091. // TutorialPaginateOption enables pagination customization.
  1092. type TutorialPaginateOption func(*TutorialPager)
  1093. // DefaultTutorialOrder is the default ordering of Tutorial.
  1094. var DefaultTutorialOrder = Desc(tutorial.FieldID)
  1095. func newTutorialPager(opts []TutorialPaginateOption) (*TutorialPager, error) {
  1096. pager := &TutorialPager{}
  1097. for _, opt := range opts {
  1098. opt(pager)
  1099. }
  1100. if pager.Order == nil {
  1101. pager.Order = DefaultTutorialOrder
  1102. }
  1103. return pager, nil
  1104. }
  1105. func (p *TutorialPager) ApplyFilter(query *TutorialQuery) (*TutorialQuery, error) {
  1106. if p.Filter != nil {
  1107. return p.Filter(query)
  1108. }
  1109. return query, nil
  1110. }
  1111. // TutorialPageList is Tutorial PageList result.
  1112. type TutorialPageList struct {
  1113. List []*Tutorial `json:"list"`
  1114. PageDetails *PageDetails `json:"pageDetails"`
  1115. }
  1116. func (t *TutorialQuery) Page(
  1117. ctx context.Context, pageNum uint64, pageSize uint64, opts ...TutorialPaginateOption,
  1118. ) (*TutorialPageList, error) {
  1119. pager, err := newTutorialPager(opts)
  1120. if err != nil {
  1121. return nil, err
  1122. }
  1123. if t, err = pager.ApplyFilter(t); err != nil {
  1124. return nil, err
  1125. }
  1126. ret := &TutorialPageList{}
  1127. ret.PageDetails = &PageDetails{
  1128. Page: pageNum,
  1129. Size: pageSize,
  1130. }
  1131. query := t.Clone()
  1132. query.ctx.Fields = nil
  1133. count, err := query.Count(ctx)
  1134. if err != nil {
  1135. return nil, err
  1136. }
  1137. ret.PageDetails.Total = uint64(count)
  1138. if pager.Order != nil {
  1139. t = t.Order(pager.Order)
  1140. } else {
  1141. t = t.Order(DefaultTutorialOrder)
  1142. }
  1143. t = t.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  1144. list, err := t.All(ctx)
  1145. if err != nil {
  1146. return nil, err
  1147. }
  1148. ret.List = list
  1149. return ret, nil
  1150. }
  1151. type WorkExperiencePager struct {
  1152. Order workexperience.OrderOption
  1153. Filter func(*WorkExperienceQuery) (*WorkExperienceQuery, error)
  1154. }
  1155. // WorkExperiencePaginateOption enables pagination customization.
  1156. type WorkExperiencePaginateOption func(*WorkExperiencePager)
  1157. // DefaultWorkExperienceOrder is the default ordering of WorkExperience.
  1158. var DefaultWorkExperienceOrder = Desc(workexperience.FieldID)
  1159. func newWorkExperiencePager(opts []WorkExperiencePaginateOption) (*WorkExperiencePager, error) {
  1160. pager := &WorkExperiencePager{}
  1161. for _, opt := range opts {
  1162. opt(pager)
  1163. }
  1164. if pager.Order == nil {
  1165. pager.Order = DefaultWorkExperienceOrder
  1166. }
  1167. return pager, nil
  1168. }
  1169. func (p *WorkExperiencePager) ApplyFilter(query *WorkExperienceQuery) (*WorkExperienceQuery, error) {
  1170. if p.Filter != nil {
  1171. return p.Filter(query)
  1172. }
  1173. return query, nil
  1174. }
  1175. // WorkExperiencePageList is WorkExperience PageList result.
  1176. type WorkExperiencePageList struct {
  1177. List []*WorkExperience `json:"list"`
  1178. PageDetails *PageDetails `json:"pageDetails"`
  1179. }
  1180. func (we *WorkExperienceQuery) Page(
  1181. ctx context.Context, pageNum uint64, pageSize uint64, opts ...WorkExperiencePaginateOption,
  1182. ) (*WorkExperiencePageList, error) {
  1183. pager, err := newWorkExperiencePager(opts)
  1184. if err != nil {
  1185. return nil, err
  1186. }
  1187. if we, err = pager.ApplyFilter(we); err != nil {
  1188. return nil, err
  1189. }
  1190. ret := &WorkExperiencePageList{}
  1191. ret.PageDetails = &PageDetails{
  1192. Page: pageNum,
  1193. Size: pageSize,
  1194. }
  1195. query := we.Clone()
  1196. query.ctx.Fields = nil
  1197. count, err := query.Count(ctx)
  1198. if err != nil {
  1199. return nil, err
  1200. }
  1201. ret.PageDetails.Total = uint64(count)
  1202. if pager.Order != nil {
  1203. we = we.Order(pager.Order)
  1204. } else {
  1205. we = we.Order(DefaultWorkExperienceOrder)
  1206. }
  1207. we = we.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  1208. list, err := we.All(ctx)
  1209. if err != nil {
  1210. return nil, err
  1211. }
  1212. ret.List = list
  1213. return ret, nil
  1214. }
  1215. type WxPager struct {
  1216. Order wx.OrderOption
  1217. Filter func(*WxQuery) (*WxQuery, error)
  1218. }
  1219. // WxPaginateOption enables pagination customization.
  1220. type WxPaginateOption func(*WxPager)
  1221. // DefaultWxOrder is the default ordering of Wx.
  1222. var DefaultWxOrder = Desc(wx.FieldID)
  1223. func newWxPager(opts []WxPaginateOption) (*WxPager, error) {
  1224. pager := &WxPager{}
  1225. for _, opt := range opts {
  1226. opt(pager)
  1227. }
  1228. if pager.Order == nil {
  1229. pager.Order = DefaultWxOrder
  1230. }
  1231. return pager, nil
  1232. }
  1233. func (p *WxPager) ApplyFilter(query *WxQuery) (*WxQuery, error) {
  1234. if p.Filter != nil {
  1235. return p.Filter(query)
  1236. }
  1237. return query, nil
  1238. }
  1239. // WxPageList is Wx PageList result.
  1240. type WxPageList struct {
  1241. List []*Wx `json:"list"`
  1242. PageDetails *PageDetails `json:"pageDetails"`
  1243. }
  1244. func (w *WxQuery) Page(
  1245. ctx context.Context, pageNum uint64, pageSize uint64, opts ...WxPaginateOption,
  1246. ) (*WxPageList, error) {
  1247. pager, err := newWxPager(opts)
  1248. if err != nil {
  1249. return nil, err
  1250. }
  1251. if w, err = pager.ApplyFilter(w); err != nil {
  1252. return nil, err
  1253. }
  1254. ret := &WxPageList{}
  1255. ret.PageDetails = &PageDetails{
  1256. Page: pageNum,
  1257. Size: pageSize,
  1258. }
  1259. query := w.Clone()
  1260. query.ctx.Fields = nil
  1261. count, err := query.Count(ctx)
  1262. if err != nil {
  1263. return nil, err
  1264. }
  1265. ret.PageDetails.Total = uint64(count)
  1266. if pager.Order != nil {
  1267. w = w.Order(pager.Order)
  1268. } else {
  1269. w = w.Order(DefaultWxOrder)
  1270. }
  1271. w = w.Offset(int((pageNum - 1) * pageSize)).Limit(int(pageSize))
  1272. list, err := w.All(ctx)
  1273. if err != nil {
  1274. return nil, err
  1275. }
  1276. ret.List = list
  1277. return ret, nil
  1278. }