import { Entity, ValueObject, Model } from './model'; import { Class, ObjectType, Options } from './common-types'; import { DataSource } from './datasource'; import { Filter, Where } from './query'; export interface Repository { } /** * Basic CRUD operations for ValueObject and Entity. No ID is required. */ export interface CrudRepository extends Repository { /** * Create a new record * @param dataObject * @param options * @promise resolves a T */ create(dataObject: ObjectType, options?: Options): Promise; /** * Create all records * @param entities * @param options * @promise resolves an array of created records */ createAll(entities: ObjectType[], options?: Options): Promise; /** * Find matching records * @param filter * @param options * @promise resolves an array retrieved matching records */ find(filter?: Filter, options?: Options): Promise; /** * Updating matching records with attributes from the data object * @param dataObject * @param where * @param options * @promise resolves the count of updated records */ updateAll(dataObject: ObjectType, where?: Where, options?: Options): Promise; /** * Delete matching records * @param where * @param options * @promise resolves the count of deleted records */ deleteAll(where?: Where, options?: Options): Promise; /** * Count matching records * @param where * @param options * @promise resolves the count of matching records */ count(where?: Where, options?: Options): Promise; } /** * Base interface for a repository of entities */ export interface EntityRepository extends Repository { } /** * CRUD operations for a repository of entities */ export interface EntityCrudRepository extends EntityRepository, CrudRepository { /** * Save an entity. If no id is present, create a new entity * @param entity * @param options * @promise resolves the saved entity */ save(entity: ObjectType, options?: Options): Promise; /** * Update an entity * @param entity * @param options * @promise resolves a boolean represents update succeeds(true) * or fails(false) */ update(entity: ObjectType, options?: Options): Promise; /** * Delete an entity * @param entity * @param options * @promise resolves a boolean represents delete succeeds(true) * or fails(false) */ delete(entity: ObjectType, options?: Options): Promise; /** * Find an entity by id * @param id * @param options * @promise resolves the returned entity */ findById(id: ID, filter?: Filter, options?: Options): Promise; /** * Update an entity by id with property/value pairs in the data object * @param data * @param id * @param options * @promise resolves a boolean represents update succeeds(true) * or fails(false) */ updateById(id: ID, data: ObjectType, options?: Options): Promise; /** * Replace an entity by id * @param data * @param id * @param options * @promise resolves a boolean represents replace succeeds(true) * or fails(false) */ replaceById(id: ID, data: ObjectType, options?: Options): Promise; /** * Delete an entity by id * @param id * @param options * @promise resolves a boolean represents delete succeeds(true) * or fails(false) */ deleteById(id: ID, options?: Options): Promise; /** * Check if an entity exists for the given id * @param id * @param options * @promise resolves a boolean represents entity exists(true) * or not(false) */ exists(id: ID, options?: Options): Promise; } /** * Repository implementation * * Example: * * User can import `CrudRepositoryImpl` and call its functions like: * `CrudRepositoryImpl.find(somefilters, someoptions)` * * Or extend class `CrudRepositoryImpl` and override its functions: * ```ts * export class TestRepository extends CrudRepositoryImpl { * constructor(dataSource: DataSource, model: Test) { * super(dataSource, Customer); * } * * // Override `deleteAll` to disable the operation * deleteAll(where?: Where, options?: Options) { * return Promise.reject(new Error('deleteAll is disabled')); * } * } * ``` */ export declare class CrudRepositoryImpl implements EntityCrudRepository { dataSource: DataSource; model: Class; private connector; constructor(dataSource: DataSource, model: Class); create(entity: ObjectType, options?: Options): Promise; createAll(entities: ObjectType[], options?: Options): Promise; save(entity: ObjectType, options?: Options): Promise; find(filter?: Filter, options?: Options): Promise; findById(id: ID, options?: Options): Promise; update(entity: ObjectType, options?: Options): Promise; delete(entity: ObjectType, options?: Options): Promise; updateAll(data: ObjectType, where?: Where, options?: Options): Promise; updateById(id: ID, data: ObjectType, options?: Options): Promise; replaceById(id: ID, data: ObjectType, options?: Options): Promise; deleteAll(where?: Where, options?: Options): Promise; deleteById(id: ID, options?: Options): Promise; count(where?: Where, options?: Options): Promise; exists(id: ID, options?: Options): Promise; }