/* 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 { readonly total: number; readonly perPage: number; readonly page: number; readonly data: readonly T[]; constructor(props: Paginated) { 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 { insert(entity: Entity | Entity[]): Promise; findOneById(id: string, include?: any): Promise; healthCheck(): Promise; // findAll(): Promise; // findAllPaginated(params: PaginatedQueryParams): Promise>; // delete(entity: Entity): Promise; // transaction(handler: () => Promise): Promise; }