52 lines
1.2 KiB
Cheetah
52 lines
1.2 KiB
Cheetah
{{ define "pagination_query" }}
|
|
// Code generated by entc template, DO NOT EDIT.
|
|
|
|
{{/* A template that adds the functionality for running each client <T> in debug mode */}}
|
|
|
|
{{/* Add the base header for the generated file */}}
|
|
{{ $pkg := base $.Config.Package }}
|
|
{{ template "header" $ }}
|
|
|
|
{{ range $n := $.Nodes }}
|
|
|
|
// PaginateAfterID paginates {{ $n.Name }} by monotonically increasing "id".
|
|
// It preserves any existing filters/joins applied to the query, fetches up to "limit" items,
|
|
// and returns the next cursor (last ID of this page) and whether a next page exists.
|
|
func (q *{{ $n.Name }}Query) PaginateAfterID(ctx context.Context, afterID, limit int) ([]*{{ $n.Name }}, int, bool, error) {
|
|
if limit <= 0 {
|
|
limit = 20
|
|
}
|
|
|
|
qq := q.Clone().
|
|
Order(func(s *sql.Selector) {
|
|
s.OrderBy(s.C("id"))
|
|
}).
|
|
Limit(limit + 1) // fetch one extra to detect "has next"
|
|
|
|
if afterID > 0 {
|
|
qq = qq.Where(func(s *sql.Selector) {
|
|
s.Where(sql.GT(s.C("id"), afterID))
|
|
})
|
|
}
|
|
|
|
rows, err := qq.All(ctx)
|
|
if err != nil {
|
|
return nil, 0, false, err
|
|
}
|
|
|
|
hasNext := len(rows) > limit
|
|
if hasNext {
|
|
rows = rows[:limit]
|
|
}
|
|
|
|
next := 0
|
|
if len(rows) > 0 {
|
|
next = rows[len(rows)-1].ID
|
|
}
|
|
|
|
return rows, next, hasNext, nil
|
|
}
|
|
|
|
{{ end }}
|
|
|
|
{{ end }} |