@liqd-js/mongodb-model
Version:
Mongo model class
76 lines (75 loc) • 5.29 kB
TypeScript
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;
}