diff --git a/src/features/store/repositories/store-review.repository.ts b/src/features/store/repositories/store-review.repository.ts index 4c7c96e..2931f5c 100644 --- a/src/features/store/repositories/store-review.repository.ts +++ b/src/features/store/repositories/store-review.repository.ts @@ -45,7 +45,9 @@ export class StoreReviewRepository { deleted_at: null, // storeDetail과 동일하게 비활성/삭제 매장의 리뷰는 노출하지 않는다 store: { is_active: true, deleted_at: null }, - ...(args.cursor ? { id: { lt: args.cursor } } : {}), + // 0n도 유효 인자(parseId("0")=0n). truthiness는 0n을 falsy로 떨궈 + // zero cursor가 페이지를 리셋하므로 undefined로만 분기한다. + ...(args.cursor !== undefined ? { id: { lt: args.cursor } } : {}), }, select: { id: true, diff --git a/src/features/store/services/store-review.service.spec.ts b/src/features/store/services/store-review.service.spec.ts index 4cb9587..ade210e 100644 --- a/src/features/store/services/store-review.service.spec.ts +++ b/src/features/store/services/store-review.service.spec.ts @@ -201,4 +201,16 @@ describe('StoreReviewService (real DB)', () => { expect(result.items[0].authorNickname).toBeNull(); }); + + it('cursor "0"은 페이지를 리셋하지 않고 빈 결과를 반환한다', async () => { + const store = await createStore(prisma); + await makeReview(store.id, {}); + + const result = await service.storeReviews({ + storeId: store.id.toString(), + cursor: '0', + }); + + expect(result.items).toEqual([]); + }); });