@liqd-js/mongodb-model
Version:
Mongo model class
53 lines (52 loc) • 4.6 kB
TypeScript
import { Collection, Document, FindOptions, Filter, UpdateFilter } from 'mongodb';
import { ModelAggregateOptions, ModelCreateOptions, ModelListOptions, MongoRootDocument, WithTotal, ModelUpdateResponse, AbstractModelSmartFilters, PublicMethodNames, ModelExtensions, ModelFindOptions, ModelUpdateOptions, AbstractModelProperties, ComputedPropertiesParam, SyncComputedPropertyMethod, ExtractSmartFilters, ExtractComputedProperties } from './types';
import { AbstractModels } from "./index";
export declare const Aggregator: any;
/**
* Abstract model class
* @template DBE - Database entity
* @template DTO - Data transfer object
* @template Extensions - Model parameters
* @class
*/
export declare abstract class AbstractModel<DBE extends MongoRootDocument, DTO extends Document, Extensions extends ModelExtensions<DBE, AbstractModelSmartFilters<ExtractSmartFilters<Extensions>>, AbstractModelProperties<ExtractComputedProperties<Extensions>>>> {
#private;
collection: Collection<DBE>;
private abstractFindAggregator;
converters: Extensions['converters'];
smartFilters?: ExtractSmartFilters<Extensions>;
private readonly computedProperties;
private readonly cache?;
protected constructor(models: AbstractModels, collection: Collection<DBE>, params: Extensions);
protected id(): DTO['id'] | Promise<DTO['id']>;
dbeID(id: DTO['id'] | DBE['_id']): DBE['_id'];
dtoID(dbeID: DBE['_id'] | DTO['id']): DTO['id'];
protected pipeline<K extends keyof Extensions['converters']>(options: ModelAggregateOptions<DBE, Extensions['smartFilters'], Extensions['computedProperties']>, conversion?: K): Promise<Document[]>;
create(dbe: Omit<DBE, '_id'>, id?: DTO['id'], options?: ModelCreateOptions): Promise<DTO['id']>;
createFrom(data: any, id?: DTO['id'], options?: ModelCreateOptions): Promise<DTO['id']>;
update(id: DTO['id'] | DBE['_id'], update: Partial<DBE> | UpdateFilter<DBE>, options?: ModelUpdateOptions): Promise<ModelUpdateResponse<DBE>>;
updateMany(id: DTO['id'][] | DBE['_id'][], update: Partial<DBE> | UpdateFilter<DBE>): Promise<ModelUpdateResponse<DBE>>;
updateOne(match: ModelFindOptions<DBE, ExtractSmartFilters<Extensions>>, update: Partial<DBE> | UpdateFilter<DBE>, options?: ModelUpdateOptions): Promise<ModelUpdateResponse<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: ModelFindOptions<DBE, ExtractSmartFilters<Extensions>>, conversion?: K, sort?: FindOptions<DBE>['sort']): Promise<Awaited<ReturnType<Extensions['converters'][K]['converter']>> | null>;
list<K extends keyof Extensions['converters']>(options: ModelListOptions<DBE, ExtractSmartFilters<Extensions>>, conversion?: K): Promise<WithTotal<Array<Awaited<ReturnType<Extensions['converters'][K]['converter']>> & {
$cursor?: string;
}>>>;
aggregate<T>(pipeline: Document[], options?: ModelAggregateOptions<DBE, Extensions['smartFilters'], Extensions['computedProperties']>): Promise<T[]>;
count(pipeline: Document[], options?: ModelAggregateOptions<DBE, Extensions['smartFilters'], Extensions['computedProperties']>): Promise<number>;
protected accessFilter(): Promise<Filter<DBE> | void>;
resolveSmartFilter(smartFilter: {
[key in PublicMethodNames<ExtractSmartFilters<Extensions>>]?: any;
}): Promise<{
filter?: Filter<DBE>;
pipeline?: Document[];
}>;
resolveComputedProperties(properties?: ComputedPropertiesParam<any>): Promise<Awaited<ReturnType<SyncComputedPropertyMethod>>>;
delete(id: DTO['id'] | DBE['_id']): Promise<Boolean>;
private cacheKey;
}