Interface ModelConstructorLike<TData, TVirtual, TInstance>

Revision system handlers for PostgreSQL DAL

Provides revision management functionality leveraging PostgreSQL features like partial indexes for performance.

interface ModelConstructorLike<
    TData extends JsonObject = JsonObject,
    TVirtual extends JsonObject = JsonObject,
    TInstance extends
        VersionedModelInstance<TData, TVirtual> = VersionedModelInstance<
        TData,
        TVirtual,
    >,
> {
    new ModelConstructorLike(data?: Partial<TData & TVirtual>): TInstance;
    dal: DataAccessLayer;
    ops: FilterWhereOperators<TData>;
    prototype: TInstance;
    schema: Record<string, ModelSchemaField<unknown>>;
    tableName: string;
    _createInstance(row: JsonObject): TInstance;
    _registerFieldMapping(camel: string, snake: string): void;
    addManyRelated(
        relationName: string,
        sourceId: string,
        targetIds: string[],
        options?: { onConflict?: "error" | "ignore" },
    ): Promise<void>;
    between(
        startDate: Date,
        endDate: Date,
        options?: JsonObject,
    ): ModelQueryBuilder<TData, TVirtual, TInstance, string>;
    contains(
        field: string,
        value: unknown,
    ): ModelQueryBuilder<TData, TVirtual, TInstance, string>;
    create(data: Partial<TData>, options?: JsonObject): Promise<TInstance>;
    createFirstRevision(
        user: RevisionActor,
        options?: RevisionMetadata,
    ): Promise<TInstance>;
    createFromRow(row: JsonObject): TInstance;
    define(name: string, handler: InstanceMethod<TInstance>): void;
    defineRelation(name: string, config: JsonObject): void;
    defineView<TView extends JsonObject = JsonObject>(
        name: string,
        definition: ModelViewDefinition<TInstance, TView>,
    ): void;
    delete(id: string): Promise<boolean>;
    fetchView<TView extends JsonObject = JsonObject>(
        name: string,
        options?: ModelViewFetchOptions<TData, TVirtual, TInstance, string>,
    ): Promise<TView[]>;
    filterWhere(
        criteria: Partial<
            {
                [K in string
                | number
                | symbol]:
                    | TData[K]
                    | OperatorResultForKey<FilterWhereOperators<TData>, K>
            },
        >,
    ): FilterWhereQueryBuilder<TData, TVirtual, TInstance, string>;
    get(id: string, options?: GetOptions): Promise<TInstance>;
    getAll(...ids: string[]): Promise<TInstance[]>;
    getJoin(
        joinSpec: Partial<Record<string, boolean | JsonObject>>,
    ): ModelQueryBuilder<TData, TVirtual, TInstance, string>;
    getMultipleNotStaleOrDeleted(
        ids: string[],
    ): ModelQueryBuilder<TData, TVirtual, TInstance, string>;
    getNotStaleOrDeleted(
        id: string,
        joinOptions?: JoinOptions,
    ): Promise<TInstance>;
    getView<TView extends JsonObject = JsonObject>(
        name: string,
    ): ModelViewDefinition<TInstance, TView>;
    limit(count: number): ModelQueryBuilder<TData, TVirtual, TInstance, string>;
    loadManyRelated(
        relationName: string,
        sourceIds: string[],
    ): Promise<Map<string, ModelInstance<JsonObject, JsonObject>[]>>;
    orderBy(
        field: string,
        direction?: "ASC" | "DESC",
    ): ModelQueryBuilder<TData, TVirtual, TInstance, string>;
    update(id: string, data: Partial<TData>): Promise<TInstance>;
    [key: string]: unknown;
}

Type Parameters

Hierarchy (View Summary)

Indexable

  • [key: string]: unknown

Constructors

Properties

prototype: TInstance
schema: Record<string, ModelSchemaField<unknown>>
tableName: string

Methods

  • Parameters

    • camel: string
    • snake: string

    Returns void

  • Parameters

    • relationName: string
    • sourceId: string
    • targetIds: string[]
    • Optionaloptions: { onConflict?: "error" | "ignore" }

    Returns Promise<void>