From 4f7e7740439dec82398b9589c78c96ebb9dd8eda Mon Sep 17 00:00:00 2001 From: Efril Date: Tue, 11 Aug 2026 20:47:38 +0700 Subject: [PATCH] feat(products): sort by --- internal/repository/product_repository.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/repository/product_repository.go b/internal/repository/product_repository.go index 5fa64e5..09862ea 100644 --- a/internal/repository/product_repository.go +++ b/internal/repository/product_repository.go @@ -112,7 +112,9 @@ func (r *ProductRepositoryImpl) List(ctx context.Context, filters map[string]int return nil, 0, err } - err := query.Limit(limit).Offset(offset).Find(&products).Error + // id is a tie-breaker so LIMIT/OFFSET paging stays stable when several products + // share the same created_at. + err := query.Order("created_at DESC, id DESC").Limit(limit).Offset(offset).Find(&products).Error return products, total, err } @@ -265,6 +267,8 @@ func (r *ProductRepositoryImpl) ListWithOutletPrice(ctx context.Context, filters return nil, 0, err } - err := query.Limit(limit).Offset(offset).Find(&products).Error + // Columns are qualified because the outlet join brings a second created_at/id + // into scope. id is a tie-breaker for stable LIMIT/OFFSET paging. + err := query.Order("products.created_at DESC, products.id DESC").Limit(limit).Offset(offset).Find(&products).Error return products, total, err } -- 2.54.0