From 8135871dd32f9531fb8ef01c4f7e96db4c8f0727 Mon Sep 17 00:00:00 2001 From: molon <3739161+molon@users.noreply.github.com> Date: Tue, 8 Oct 2024 00:36:04 +0800 Subject: [PATCH] fromLast => fromEnd --- cursor/keyset.go | 4 ++-- cursor/offset.go | 6 +++--- gormrelay/keyset.go | 18 +++++++++--------- gormrelay/offset_test.go | 2 +- paginaition.go | 4 ++-- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/cursor/keyset.go b/cursor/keyset.go index 398557c..2d16860 100644 --- a/cursor/keyset.go +++ b/cursor/keyset.go @@ -10,7 +10,7 @@ import ( ) type KeysetFinder[T any] interface { - Find(ctx context.Context, after, before *map[string]any, orderBys []relay.OrderBy, limit int, fromLast bool) ([]T, error) + Find(ctx context.Context, after, before *map[string]any, orderBys []relay.OrderBy, limit int, fromEnd bool) ([]T, error) Count(ctx context.Context) (int, error) } @@ -45,7 +45,7 @@ func NewKeysetAdapter[T any](finder KeysetFinder[T]) relay.ApplyCursorsFunc[T] { if req.Limit <= 0 || (totalCount != nil && *totalCount <= 0) { edges = make([]relay.LazyEdge[T], 0) } else { - nodes, err := finder.Find(ctx, after, before, req.OrderBys, req.Limit, req.FromLast) + nodes, err := finder.Find(ctx, after, before, req.OrderBys, req.Limit, req.FromEnd) if err != nil { return nil, err } diff --git a/cursor/offset.go b/cursor/offset.go index 458ea35..9333ee2 100644 --- a/cursor/offset.go +++ b/cursor/offset.go @@ -37,9 +37,9 @@ func NewOffsetAdapter[T any](finder OffsetFinder[T]) relay.ApplyCursorsFunc[T] { totalCount = &count } - if req.FromLast && before == nil { + if req.FromEnd && before == nil { if totalCount == nil { - return nil, errors.New("totalCount is required for fromLast and nil before") + return nil, errors.New("totalCount is required for fromEnd and nil before") } before = totalCount } @@ -61,7 +61,7 @@ func NewOffsetAdapter[T any](finder OffsetFinder[T]) relay.ApplyCursorsFunc[T] { if limit > rangeLen { limit = rangeLen } - if req.FromLast && limit < rangeLen { + if req.FromEnd && limit < rangeLen { skip = *before - limit } } diff --git a/gormrelay/keyset.go b/gormrelay/keyset.go index 7c50109..a4684d8 100644 --- a/gormrelay/keyset.go +++ b/gormrelay/keyset.go @@ -88,7 +88,7 @@ func createWhereExpr(s *schema.Schema, orderBys []relay.OrderBy, keyset map[stri // clause.Limit{Limit: &limit}, // // ) -func scopeKeyset(after, before *map[string]any, orderBys []relay.OrderBy, limit int, fromLast bool) func(db *gorm.DB) *gorm.DB { +func scopeKeyset(after, before *map[string]any, orderBys []relay.OrderBy, limit int, fromEnd bool) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB { if db.Statement.Model == nil { db.AddError(errors.New("model is nil")) @@ -131,7 +131,7 @@ func scopeKeyset(after, before *map[string]any, orderBys []relay.OrderBy, limit } desc := orderBy.Desc - if fromLast { + if fromEnd { desc = !desc } orderByColumns = append(orderByColumns, clause.OrderByColumn{ @@ -150,7 +150,7 @@ func scopeKeyset(after, before *map[string]any, orderBys []relay.OrderBy, limit } } -func findByKeyset[T any](db *gorm.DB, after, before *map[string]any, orderBys []relay.OrderBy, limit int, fromLast bool) ([]T, error) { +func findByKeyset[T any](db *gorm.DB, after, before *map[string]any, orderBys []relay.OrderBy, limit int, fromEnd bool) ([]T, error) { var nodes []T if limit == 0 { return nodes, nil @@ -166,7 +166,7 @@ func findByKeyset[T any](db *gorm.DB, after, before *map[string]any, orderBys [] sliceType := reflect.SliceOf(modelType) nodesVal := reflect.New(sliceType).Elem() - err := db.Scopes(scopeKeyset(after, before, orderBys, limit, fromLast)).Find(nodesVal.Addr().Interface()).Error + err := db.Scopes(scopeKeyset(after, before, orderBys, limit, fromEnd)).Find(nodesVal.Addr().Interface()).Error if err != nil { return nil, errors.Wrap(err, "find") } @@ -176,7 +176,7 @@ func findByKeyset[T any](db *gorm.DB, after, before *map[string]any, orderBys [] nodes[i] = nodesVal.Index(i).Interface().(T) } - if fromLast { + if fromEnd { lo.Reverse(nodes) } return nodes, nil @@ -187,11 +187,11 @@ func findByKeyset[T any](db *gorm.DB, after, before *map[string]any, orderBys [] db = db.Model(t) } - err = db.Scopes(scopeKeyset(after, before, orderBys, limit, fromLast)).Find(&nodes).Error + err = db.Scopes(scopeKeyset(after, before, orderBys, limit, fromEnd)).Find(&nodes).Error if err != nil { return nil, errors.Wrap(err, "find") } - if fromLast { + if fromEnd { lo.Reverse(nodes) } return nodes, nil @@ -205,7 +205,7 @@ func NewKeysetFinder[T any](db *gorm.DB) *KeysetFinder[T] { return &KeysetFinder[T]{db: db} } -func (a *KeysetFinder[T]) Find(ctx context.Context, after, before *map[string]any, orderBys []relay.OrderBy, limit int, fromLast bool) ([]T, error) { +func (a *KeysetFinder[T]) Find(ctx context.Context, after, before *map[string]any, orderBys []relay.OrderBy, limit int, fromEnd bool) ([]T, error) { if limit == 0 { return []T{}, nil } @@ -215,7 +215,7 @@ func (a *KeysetFinder[T]) Find(ctx context.Context, after, before *map[string]an db = db.WithContext(ctx) } - nodes, err := findByKeyset[T](db, after, before, orderBys, limit, fromLast) + nodes, err := findByKeyset[T](db, after, before, orderBys, limit, fromEnd) if err != nil { return nil, err } diff --git a/gormrelay/offset_test.go b/gormrelay/offset_test.go index 3e803d6..497cb18 100644 --- a/gormrelay/offset_test.go +++ b/gormrelay/offset_test.go @@ -545,6 +545,6 @@ func TestOffsetWithLastAndNilBeforeIfSkipTotalCount(t *testing.T) { Last: lo.ToPtr(10), }, ) - require.ErrorContains(t, err, "totalCount is required for fromLast and nil before") + require.ErrorContains(t, err, "totalCount is required for fromEnd and nil before") require.Nil(t, resp) } diff --git a/paginaition.go b/paginaition.go index eca1a2f..06769b9 100644 --- a/paginaition.go +++ b/paginaition.go @@ -44,7 +44,7 @@ type ApplyCursorsRequest struct { After *string OrderBys []OrderBy Limit int - FromLast bool + FromEnd bool } type LazyEdge[T any] struct { @@ -106,7 +106,7 @@ func Paginate[T any](ctx context.Context, req *PaginateRequest[T], applyCursorsF After: req.After, OrderBys: orderBys, Limit: limit, - FromLast: req.Last != nil, + FromEnd: req.Last != nil, }) if err != nil { return nil, err