(ctx context.Context, query *ent.TaskQuery, args *ListTaskArgs, paramMargin int)
| 241 | } |
| 242 | |
| 243 | func (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 | |
| 289 | func (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) |
no test coverage detected