MCPcopy Create free account
hub / github.com/cloudreve/cloudreve / cursorPagination

Method cursorPagination

inventory/task.go:243–287  ·  view source on GitHub ↗
(ctx context.Context, query *ent.TaskQuery, args *ListTaskArgs, paramMargin int)

Source from the content-addressed store, hash-verified

241}
242
243func (c *taskClient) cursorPagination(ctx context.Context, query *ent.TaskQuery, args *ListTaskArgs, paramMargin int) ([]*ent.Task, *PaginationResults, error) {
244 pageSize := capPageSize(c.maxSQlParam, args.PageSize, paramMargin)
245 query.Order(task.ByID(sql.OrderDesc()))
246
247 var (
248 pageToken *PageToken
249 err error
250 queryPaged = query
251 )
252 if args.PageToken != "" {
253 pageToken, err = pageTokenFromString(args.PageToken, c.hasher, hashid.TaskID)
254 if err != nil {
255 return nil, nil, fmt.Errorf("invalid page token %q: %w", args.PageToken, err)
256 }
257
258 queryPaged = query.Where(task.IDLT(pageToken.ID))
259 }
260
261 // Use page size + 1 to determine if there are more items to come
262 queryPaged.Limit(pageSize + 1)
263
264 tasks, err := queryPaged.
265 All(ctx)
266 if err != nil {
267 return nil, nil, err
268 }
269
270 // More items to come
271 nextTokenStr := ""
272 if len(tasks) > pageSize {
273 lastItem := tasks[len(tasks)-2]
274 nextToken, err := getTaskNextPageToken(c.hasher, lastItem)
275 if err != nil {
276 return nil, nil, fmt.Errorf("failed to generate next page token: %w", err)
277 }
278
279 nextTokenStr = nextToken
280 }
281
282 return lo.Subset(tasks, 0, uint(pageSize)), &PaginationResults{
283 PageSize: pageSize,
284 NextPageToken: nextTokenStr,
285 IsCursor: true,
286 }, nil
287}
288
289func (c *taskClient) offsetPagination(ctx context.Context, query *ent.TaskQuery, args *ListTaskArgs, paramMargin int) ([]*ent.Task, *PaginationResults, error) {
290 pageSize := capPageSize(c.maxSQlParam, args.PageSize, paramMargin)

Callers 1

ListMethod · 0.95

Calls 9

ByIDFunction · 0.92
IDLTFunction · 0.92
capPageSizeFunction · 0.85
pageTokenFromStringFunction · 0.85
getTaskNextPageTokenFunction · 0.85
OrderMethod · 0.65
LimitMethod · 0.65
WhereMethod · 0.45
AllMethod · 0.45

Tested by

no test coverage detected