UNPKG

@liqd-js/mongodb-model

Version:
76 lines (75 loc) 5.29 kB
import { Collection, Document, Filter, FindOptions, UpdateFilter } from 'mongodb'; import { MongoPropertyDocument, MongoRootDocument, PropertyModelAggregateOptions, PropertyModelFilter, PropertyModelListOptions, PublicMethodNames, WithTotal, PropertyModelFindOptions, AbstractPropertyModelSmartFilters, PropertyModelExtensions, ConstructorExtensions, ComputedPropertiesParam, SyncComputedPropertyMethod, ModelUpdateOptions, PropertyModelUpdateResponse, ExtractSmartFilters, ExtractComputedProperties, FirstType, AbstractPropertyModelComputedProperties, SecondType } from './types'; import { AbstractModels } from "./index"; /** * Abstract class for property models * @template RootDBE - Root Database entity * @template DBE - Database entity * @template DTO - Data transfer object * @template Extensions - Model parameters */ export declare abstract class AbstractPropertyModel<RootDBE extends MongoRootDocument, DBE extends MongoPropertyDocument, DTO extends Document, Extensions extends PropertyModelExtensions<DBE, AbstractPropertyModelSmartFilters<any, any>, AbstractPropertyModelComputedProperties<any, any>>> { #private; collection: Collection<RootDBE>; private abstractFindAggregator; private paths; private prefix; converters: Extensions['converters']; smartFilters?: FirstType<ExtractSmartFilters<Extensions>>; private readonly computedProperties?; private readonly cache?; /** * * @param models \{AbstractModels\} - Models instance * @param collection * @param path * @param params */ protected constructor(models: AbstractModels, collection: Collection<RootDBE>, path: string, params: ConstructorExtensions<Extensions>); protected id(): DTO['id'] | Promise<DTO['id']>; /** * Converts DTO['id'] to DBE['id'] * @param id {DTO['id'] | DBE['id']} - DTO or DBE id * @returns {DBE['id']} - DBE id */ dbeID(id: DTO['id'] | DBE['id']): DBE['id']; /** * Converts DBE['id'] to DTO['id'] * @param dbeID {DBE['id']} - DBE id * @returns {DTO['id']} - DTO id */ dtoID(dbeID: DBE['id'] | DTO['id']): DTO['id']; protected pipeline<K extends keyof Extensions['converters']>(options?: PropertyModelListOptions<RootDBE, DBE, ExtractSmartFilters<Extensions>> & { computedProperties?: ComputedPropertiesParam<SecondType<ExtractComputedProperties<Extensions>>>; }, conversion?: K): Promise<Document[]>; create(parentID: any, dbe: Omit<DBE, 'id'>, id?: DTO['id']): Promise<DTO['id']>; update(id: DTO['id'] | DBE['id'], update: Partial<DBE> | UpdateFilter<DBE>, options?: ModelUpdateOptions): Promise<PropertyModelUpdateResponse<DBE>>; updateMany(ids: DBE['id'][] | DTO['id'][], update: Partial<DBE> | UpdateFilter<DBE>): Promise<PropertyModelUpdateResponse<DBE>>; get(id: DTO['id'] | DBE['id']): Promise<Awaited<ReturnType<Extensions['converters']['dto']['converter']>> | null>; get<K extends keyof Extensions['converters']>(id: DTO['id'] | DBE['id'], conversion: K): Promise<Awaited<ReturnType<Extensions['converters'][K]['converter']>> | null>; get(id: Array<DTO['id'] | DBE['id']>): Promise<Array<Awaited<ReturnType<Extensions['converters']['dto']['converter']>> | null>>; get<K extends keyof Extensions['converters']>(id: Array<DTO['id'] | DBE['id']>, conversion: K): Promise<Array<Awaited<ReturnType<Extensions['converters'][K]['converter']>> | null>>; get<K extends keyof Extensions['converters']>(id: Array<DTO['id'] | DBE['id']>, conversion: K, filtered: true): Promise<Array<Awaited<ReturnType<Extensions['converters'][K]['converter']>>>>; get<K extends keyof Extensions['converters']>(id: Array<DTO['id'] | DBE['id']>, conversion: K, filtered: false): Promise<Array<Awaited<ReturnType<Extensions['converters'][K]['converter']>> | null>>; find<K extends keyof Extensions['converters']>(options: PropertyModelFindOptions<RootDBE, DBE, ExtractSmartFilters<Extensions>>, conversion?: K, sort?: FindOptions<DBE>['sort']): Promise<Awaited<ReturnType<Extensions['converters'][K]['converter']>> | null>; list<K extends keyof Extensions['converters']>(options: PropertyModelListOptions<RootDBE, DBE, ExtractSmartFilters<Extensions>>, conversion?: K): Promise<WithTotal<Array<Awaited<ReturnType<Extensions['converters'][K]['converter']>> & { $cursor?: string; }>>>; aggregate<T>(pipeline: Document[], options?: PropertyModelAggregateOptions<RootDBE, DBE, ExtractSmartFilters<Extensions>, ExtractComputedProperties<Extensions>>): Promise<T[]>; count(pipeline: Document[], options?: PropertyModelAggregateOptions<RootDBE, DBE, ExtractSmartFilters<Extensions>, ExtractComputedProperties<Extensions>>): Promise<number>; protected accessFilter(): Promise<PropertyModelFilter<RootDBE, DBE> | void>; resolveSmartFilter(smartFilter: { [key in PublicMethodNames<ExtractSmartFilters<Extensions>>]: any; }): Promise<{ [prefix: string]: { filter?: Filter<DBE>; pipeline?: Document[]; }; }>; resolveComputedProperties(properties?: ComputedPropertiesParam<any>): Promise<{ [path: string]: Awaited<ReturnType<SyncComputedPropertyMethod>>; }>; private filterStages; private splitProjection; private cacheKey; }