Skip to content

Commit

Permalink
refactor: encapsulate pagination logic
Browse files Browse the repository at this point in the history
  • Loading branch information
nrusso committed Nov 22, 2023
1 parent 4e1eebd commit 3d0ddcf
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 17 deletions.
18 changes: 1 addition & 17 deletions src/Item/Infrastructure/Repositories/ItemMongooseRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<IItemDomain, ItemMongooseDocument> implements IItemRepository
{
Expand Down Expand Up @@ -38,20 +35,7 @@ class ItemMongooseRepository extends BaseMongooseRepository<IItemDomain, ItemMon
void queryBuilder.where(ItemFilter.NAME).regex(rSearch);
}

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;
return this.pagination(queryBuilder, criteria);
}
}

Expand Down
21 changes: 21 additions & 0 deletions src/Main/Infrastructure/Repositories/BaseMongooseRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ import * as mongoose from 'mongoose';
import { IBaseDomain, ICriteria, IPaginator, NotFoundException } from '@digichanges/shared-experience';
import IByOptions from './IByOptions';
import IBaseRepository from './IBaseRepository';
import MongoosePaginator from '../Orm/MongoosePaginator';
import ResponsePayload from '../../../Shared/Utils/ResponsePayload';
import PaginatorTransformer from '../../../Shared/Utils/PaginatorTransformer';

abstract class BaseMongooseRepository<T extends IBaseDomain, D extends Document & T> implements IBaseRepository<T>
{
Expand Down Expand Up @@ -93,6 +96,24 @@ abstract class BaseMongooseRepository<T extends IBaseDomain, D extends Document
return exist;
}

async pagination(queryBuilder: mongoose.Query<D[], D>, 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<IPaginator>;
}

Expand Down

0 comments on commit 3d0ddcf

Please sign in to comment.