41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
/* Most of repositories will probably need generic
|
|
save/find/delete operations, so it's easier
|
|
to have some shared interfaces.
|
|
More specific queries should be defined
|
|
in a respective repository.
|
|
*/
|
|
|
|
export class Paginated<T> {
|
|
readonly total: number;
|
|
readonly perPage: number;
|
|
readonly page: number;
|
|
readonly data: readonly T[];
|
|
|
|
constructor(props: Paginated<T>) {
|
|
this.total = props.total;
|
|
this.perPage = props.perPage;
|
|
this.page = props.page;
|
|
this.data = props.data;
|
|
}
|
|
}
|
|
|
|
export type OrderBy = { field: string | true; param: 'asc' | 'desc' };
|
|
|
|
export type PaginatedQueryParams = {
|
|
perPage: number;
|
|
page: number;
|
|
offset: number;
|
|
orderBy: OrderBy;
|
|
};
|
|
|
|
export interface RepositoryPort<Entity> {
|
|
insert(entity: Entity | Entity[]): Promise<void>;
|
|
findOneById(id: string, include?: any): Promise<Entity>;
|
|
healthCheck(): Promise<boolean>;
|
|
// findAll(): Promise<Entity[]>;
|
|
// findAllPaginated(params: PaginatedQueryParams): Promise<Paginated<Entity>>;
|
|
// delete(entity: Entity): Promise<boolean>;
|
|
|
|
// transaction<T>(handler: () => Promise<T>): Promise<T>;
|
|
}
|