import {ModelId} from '../types.js'; import {Flatten} from '../types.js'; import {ModelData} from '../types.js'; import {PartialBy} from '../types.js'; import {Service} from '@e22m4u/js-service'; import {Adapter} from '../adapter/index.js'; import {WhereClause} from '../filter/index.js'; import {FilterClause} from '../filter/index.js'; import {ItemFilterClause} from '../filter/index.js'; import {ServiceContainer} from '@e22m4u/js-service'; import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME} from '../definition/index.js'; /** * Repository. */ export declare class Repository< Data extends ModelData = ModelData, IdType extends ModelId = ModelId, IdName extends string = DEFAULT_PRIMARY_KEY_PROPERTY_NAME, FlatData extends ModelData = Flatten, > extends Service { /** * Model name. */ get modelName(): string; /** * Datasource name. */ get datasourceName(): string; /** * Constructor. * * @param container * @param modelName */ constructor(container: ServiceContainer, modelName: string); /** * Get adapter. */ getAdapter(): Promise; /** * Create. * * @param data * @param filter */ create( data: OptionalUnlessRequiredId, filter?: ItemFilterClause, ): Promise; /** * Replace by id. * * @param id * @param data * @param filter */ replaceById( id: IdType, data: WithoutId, filter?: ItemFilterClause, ): Promise; /** * Replace or create. * * @param data * @param filter */ replaceOrCreate( data: OptionalUnlessRequiredId, filter?: ItemFilterClause, ): Promise; /** * Patch by id. * * @param id * @param data * @param filter */ patchById( id: IdType, data: PartialWithoutId, filter?: ItemFilterClause, ): Promise; /** * Find. * * @param filter */ find(filter?: FilterClause): Promise; /** * Find one. * * @param filter */ findOne(filter?: FilterClause): Promise; /** * Find by id. * * @param id * @param filter */ findById(id: IdType, filter?: ItemFilterClause): Promise; /** * Delete. * * @param where */ delete(where?: WhereClause): Promise; /** * Delete by id. * * @param id */ deleteById(id: IdType): Promise; /** * Exists. * * @param id */ exists(id: IdType): Promise; /** * Count. * * @param where */ count(where?: WhereClause): Promise; } /** * Removes id field. */ type WithoutId = Flatten< Omit >; /** * Makes fields as optional and remove id field. */ type PartialWithoutId = Flatten< Partial> >; /** * Makes the required id field as optional. */ type OptionalUnlessRequiredId< IdName extends string, Data extends ModelData, > = Flatten : Data>;