Move pagination_query.tmpl and time_mixin.go to starter

This commit is contained in:
Achim Rohn
2025-11-15 14:10:00 +01:00
parent 8f50cc9c29
commit 7a3e1ffcfc
6 changed files with 85 additions and 11 deletions
+1 -3
View File
@@ -1,8 +1,6 @@
package schema
import (
ersteller_ent "git.gorlug.de/code/ersteller/schema/ent"
"entgo.io/ent"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/field"
@@ -14,7 +12,7 @@ type GoogleAuth struct {
func (GoogleAuth) Mixin() []ent.Mixin {
return []ent.Mixin{
ersteller_ent.TimeMixin{},
TimeMixin{},
}
}
+52
View File
@@ -0,0 +1,52 @@
{{ 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 }}
+27
View File
@@ -0,0 +1,27 @@
package schema
import (
"time"
"entgo.io/ent"
"entgo.io/ent/schema/field"
"entgo.io/ent/schema/mixin"
)
// TimeMixin implements the ent.Mixin for sharing
// time fields with package schemas.
type TimeMixin struct {
mixin.Schema
}
// Fields of the TimeMixin.
func (TimeMixin) Fields() []ent.Field {
return []ent.Field{
field.Time("created_at").
Default(time.Now).
Immutable(),
field.Time("updated_at").
Default(time.Now).
UpdateDefault(time.Now),
}
}
+1 -3
View File
@@ -1,8 +1,6 @@
package schema
import (
"git.gorlug.de/code/ersteller/schema/ent"
"entgo.io/ent"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/field"
@@ -14,7 +12,7 @@ type Todo struct {
func (Todo) Mixin() []ent.Mixin {
return []ent.Mixin{
ersteller_ent.TimeMixin{},
TimeMixin{},
}
}
+1 -3
View File
@@ -1,8 +1,6 @@
package schema
import (
"git.gorlug.de/code/ersteller/schema/ent"
"entgo.io/ent"
"entgo.io/ent/schema/field"
)
@@ -14,7 +12,7 @@ type User struct {
func (User) Mixin() []ent.Mixin {
return []ent.Mixin{
ersteller_ent.TimeMixin{},
TimeMixin{},
}
}