Skip to main content

MongoDatabaseClient

MongoDB database client. Extends @perseid/server AbstractDatabaseClient class.


client

MongoDB client instance.

protected client: MongoClient;

databaseConnection

MongoDB database instance.

protected databaseConnection: Db;

generateResourceMetadata

Generates metadata for resource, including fields, indexes, and constraints, necessary to generate the database structure and handle resources deletion.

protected generateResourceMetadata<Resource extends keyof DataModel & string>(
resource: Resource,
): void;

Parameters

  • resource: Type of resource for which to generate metadata.

Usage

TODO

parseFields

Returns DBMS-specific formatted query metadata and projections from fields.

protected parseFields<Resource extends keyof DataModel & string>(
resource: Resource,
fields: Set<string>,
maximumDepth: number,
searchBody?: SearchBody | null,
sortBy?: Partial<Record<string, 1 | -1>>,
): { projections: unknown; formattedQuery: FormattedQuery; };

Parameters

  • resource: Type of resource for which to generate metadata.
  • resource: Type of resource to query.
  • fields: List of fields to fetch from database.
  • maximumDepth: Maximum allowed level of resources depth.
  • searchBody: Optional search body to apply to the request. Defaults to null.
  • sortBy: Optional sorting to apply to the request. Defaults to {}.

Returns

Formatted query, along with projections.

Throws

  • If field path does not exist in data model.
  • If field path is not a leaf in data model.
  • If any field path in search body is not indexed.
  • If any field path in sorting is not sortable.

Usage

TODO

generateQuery

Generates the final DBMS-specific query from formattedQuery.

protected generateQuery<Resource extends keyof DataModel & string>(
resource: Resource,
formattedQuery: FormattedQuery,
): unknown;

Parameters

  • sortBy: Optional sorting to apply to the request. Defaults to {}.
  • resource: Type of resource for which to generate database query.
  • formattedQuery: Formatted query to generate database query from.

Returns

Final DBMS-specific query.

Usage

TODO

structurePayload

Recursively formats payload into a structured format for database storage.

protected structurePayload<Resource extends keyof DataModel & string>(
resource: Resource,
_resourceId: Id,
payload: Payload<DataModel[Resource]>,
mode: 'CREATE' | 'UPDATE',
): StructuredPayload;

Parameters

  • formattedQuery: Formatted query to generate database query from.
  • resource: Type of resource to format.
  • resourceId: Id of the related resource.
  • payload: Payload to format.
  • mode: Whether to structure payload for creation, or just a partial update.

Returns

Structured format for database storage.

Usage

TODO

formatResources

Formats results into a database-agnostic structure, containing only requested fields.

protected formatResources<Resource extends keyof DataModel & string>(
resource: Resource,
results: unknown[],
fields: unknown,
): DataModel[Resource][];

Parameters

  • mode: Whether to structure payload for creation, or just a partial update.
  • resource: Type of resource to format.
  • results: List of database raw results to format.
  • fields: Fields tree used to format results.
  • mapping: Mapping between DBMS-specific field name and real field path.

Returns

Formatted results.

Usage

TODO

checkReferencesTo

Makes sure that no resource references resource with id id.

protected checkReferencesTo<Resource extends keyof DataModel & string>(
resource: Resource,
id: Id,
): Promise<void>;

Parameters

  • mapping: Mapping between DBMS-specific field name and real field path.
  • resource: Type of resource to check.
  • id: Id of the resource to check for references.

Throws

  • If maximum level of resources depth is exceeded.

Usage

TODO

handleError

Connects database client to the database server before performing any query, and handles common database server errors. You should always use this method to wrap your code.

protected handleError<T>(callback: () => Promise<T>): Promise<T>;

Parameters

  • id: Id of the resource to check for references.
  • callback: Callback to wrap in the error handler.

Throws

  • If any other resource still references resource.
  • If connection to the server failed.

Usage

TODO

constructor

Class constructor.

public constructor(
model: Model,
logger: Logger,
cache: CacheClient,
settings: DatabaseClientSettings,
);

Parameters

  • callback: Callback to wrap in the error handler.
  • model: Data model to use.
  • logger: Logging system to use.
  • cache: Cache client instance to use for results caching.
  • settings: Database client settings.

Usage

TODO

dropDatabase

Drops the entire database.

public dropDatabase(): Promise<void>;

Parameters

  • settings: Database client settings.

Usage

TODO

createDatabase

Creates the database.

public createDatabase(): Promise<void>;

Parameters

  • settings: Database client settings.

Usage

TODO

createMissingStructures

Creates missing database structures for current data model.

public createMissingStructures(): Promise<void>;

Parameters

  • settings: Database client settings.

Usage

TODO

reset

Resets the whole underlying database, re-creating structures, indexes, and such.

public reset(): Promise<void>;

Parameters

  • settings: Database client settings.

Usage

TODO

checkForeignIds

Makes sure that foreignIds reference existing resources that match specific conditions.

public checkForeignIds<Resource extends keyof DataModel & string>(
_resource: Resource,
foreignIds: Map<string, { resource: keyof DataModel & string; filters: SearchFilters; }>,

Parameters

  • settings: Database client settings.
  • foreignIds: Foreign ids to check in database.

Throws

  • Transformed database error if applicable, original error otherwise.

Usage

TODO

create

Creates a new resource in database.

public create<Resource extends keyof DataModel & string>(
resource: Resource,
payload: DataModel[Resource],
): Promise<void>;

Parameters

  • foreignIds: Foreign ids to check in database.
  • resource: Type of resource to create.
  • payload: New resource payload.

Usage

TODO

update

Updates resource with id id in database.

public update<Resource extends keyof DataModel & string>(
resource: Resource,
id: Id,
payload: Payload<DataModel[Resource]>,
): Promise<boolean>;

Parameters

  • payload: New resource payload.
  • resource: Type of resource to update.
  • id: Resource id.
  • payload: Updated resource payload.

Returns

true if resource has been successfully updated, false otherwise.

Usage

TODO

view

Fetches resource with id id from database.

public view<Resource extends keyof DataModel & string>(
resource: Resource,
id: Id,
options?: ViewCommandOptions,
): Promise<DataModel[Resource] | null>;

Parameters

  • payload: Updated resource payload.
  • resource: Type of resource to fetch.
  • id: Id of the resource to fetch.
  • options: Query options. Defaults to {}.

Returns

Resource if it exists, null otherwise.

Usage

TODO

Fetches a paginated list of resources from database, that match specific filters/query.

public search<Resource extends keyof DataModel & string>(
resource: Resource,
body: SearchBody,
options?: SearchCommandOptions,
): Promise<Results<DataModel[Resource]>>;

Parameters

  • options: Query options. Defaults to {}.
  • resource: Type of resources to fetch.
  • body: Search/filters body.
  • options: Query options. Defaults to {}.

Returns

Paginated list of resources.

Usage

TODO

list

Fetches a paginated list of resources from database.

public list<Resource extends keyof DataModel & string>(
resource: Resource,
options?: ListCommandOptions,
): Promise<Results<DataModel[Resource]>>;

Parameters

  • options: Query options. Defaults to {}.
  • resource: Type of resources to fetch.
  • options: Query options. Defaults to {}.

Returns

Paginated list of resources.

Usage

TODO

delete

Deletes resource with id id from database.

public delete<Resource extends keyof DataModel & string>(
resource: Resource,
id: Id,
): Promise<boolean>;

Parameters

  • options: Query options. Defaults to {}.
  • resource: Type of resource to delete.
  • id: Resource id.

Returns

true if resource has been successfully deleted, false otherwise.

Usage

TODO