@getanthill/datastore
Version:
Event-Sourced Datastore
49 lines (48 loc) • 2.48 kB
TypeScript
import type { ModelConfig, GenericType, Services, AnyObject, ModelInstance } from '../typings';
import type { GraphI } from './graph';
import { Collection } from 'mongodb';
export interface ModelsConfig {
models: ModelConfig[];
}
export declare class Models {
static INTERNAL_MODELS_COLLECTION: string;
MODELS: Map<string, GenericType>;
GRAPH: GraphI | null;
config: ModelsConfig;
services: Services;
constructor(config: ModelsConfig, services: Services);
initInternalModels(): Promise<void>;
addModel(modelConfig: ModelConfig, canReplace?: boolean): any;
loadModels(models: ModelConfig[], canReplace?: boolean): void;
reset(): Models;
hasModel(modelName: string): boolean;
getModel(modelName: string): GenericType;
isInternalModel(modelName: string): boolean;
getModelByCorrelationField(correlationField: string): GenericType | null;
load(): Promise<void>;
reload(canReplace?: boolean): Promise<void>;
createModel(modelConfig: ModelConfig): Promise<ModelInstance>;
getModelIndexes(model: GenericType): Promise<any[]>;
createModelCollections(modelConfig: ModelConfig, model: GenericType): Promise<any[]>;
createModelIndexes(modelConfig: ModelConfig): Promise<any[]>;
updateModel(modelName: string, modelConfig: Partial<ModelConfig>): Promise<ModelInstance>;
removeModel(modelName: string): Models;
factory(modelName: string, correlationId?: string, opts?: Partial<{
retryDuration: number;
forcePrimary: boolean;
}>): ModelInstance;
getGraph(options?: any): GraphI;
setGraph(graph: GraphI | null): void;
getEntitiesFromGraph(modelName: string, query: any, options?: {
graph?: GraphI;
models?: string[];
withCorrelationFieldOnly?: boolean;
handler?: (services: Services, Model: any, entity: any) => any;
}): Promise<Map<string, any>>;
getFromCache(cacheId: string): Promise<any>;
setToCache(cacheId: string, value: AnyObject, expiresBy?: string): Promise<void | ModelInstance> | null;
rotateEncryptionKeyOnCollection(Model: GenericType, collection: Collection, query: object, encryptedFields: string[]): Promise<number>;
rotateEncryptionKey(onlyModels?: string[] | null): Promise<void>;
log(level: number, modelName: string, correlationId: string, message: string, context: any): Promise<ModelInstance | void>;
}
export declare function init(config: ModelsConfig, services: Services): Models;