From 3d0ddcfac171c608657bf44479aa48a4eac3fbfa Mon Sep 17 00:00:00 2001 From: nrusso Date: Wed, 22 Nov 2023 20:11:37 -0300 Subject: [PATCH] refactor: encapsulate pagination logic --- .../Repositories/ItemMongooseRepository.ts | 18 +--------------- .../Repositories/BaseMongooseRepository.ts | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/Item/Infrastructure/Repositories/ItemMongooseRepository.ts b/src/Item/Infrastructure/Repositories/ItemMongooseRepository.ts index 4451ce6a..f0cc3a95 100644 --- a/src/Item/Infrastructure/Repositories/ItemMongooseRepository.ts +++ b/src/Item/Infrastructure/Repositories/ItemMongooseRepository.ts @@ -3,14 +3,11 @@ import { ICriteria } from '@digichanges/shared-experience'; import IItemRepository from './IItemRepository'; import ItemFilter from '../../Presentation/Criterias/ItemFilter'; -import MongoosePaginator from '../../../Main/Infrastructure/Orm/MongoosePaginator'; import BaseMongooseRepository from '../../../Main/Infrastructure/Repositories/BaseMongooseRepository'; import IItemDomain from '../../Domain/Entities/IItemDomain'; import Item from '../../Domain/Entities/Item'; import { ItemMongooseDocument } from '../Schemas/ItemMongoose'; -import ResponsePayload from '../../../Shared/Utils/ResponsePayload'; -import PaginatorTransformer from '../../../Shared/Utils/PaginatorTransformer'; class ItemMongooseRepository extends BaseMongooseRepository implements IItemRepository { @@ -38,20 +35,7 @@ class ItemMongooseRepository extends BaseMongooseRepository implements IBaseRepository { @@ -93,6 +96,24 @@ abstract class BaseMongooseRepository, criteria: ICriteria) + { + const paginator = new MongoosePaginator(queryBuilder, criteria); + const data = await paginator.paginate(); + const metadata = paginator.getMetadata(); + const result = { data, metadata } as ResponsePayload; + + if (paginator.getExist()) + { + const paginatorTransformer = new PaginatorTransformer(); + const pagination = await paginatorTransformer.handle(paginator); + + Object.assign(result, { pagination }); + } + + return result; + } + abstract list(criteria: ICriteria): Promise; }