@dolittle/sdk.projections
Version:
Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.
49 lines (40 loc) • 1.85 kB
text/typescript
// Copyright (c) Dolittle. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
import { Logger } from 'winston';
import { Guid } from '@dolittle/rudiments';
import { ExecutionContext, TenantIdLike } from '@dolittle/sdk.execution';
import { ProjectionsClient } from '@dolittle/contracts/Runtime/Projections/Store_grpc_pb';
import { IProjectionReadModelTypes } from '../IProjectionReadModelTypes';
import { IProjectionStore } from '../IProjectionStore';
import { ProjectionStore } from '../ProjectionStore';
import { IProjectionStoreBuilder } from './IProjectionStoreBuilder';
/**
* Represents an implementation of {@link IProjectionsStoreBuilder}.
*/
export class ProjectionStoreBuilder extends IProjectionStoreBuilder {
/**
* Initializes a new instance of {@link ProjectionStoreBuilder}.
* @param {ProjectionsClient} _projectionsClient - The client for the projections.
* @param {ExecutionContext} _executionContext - The execution context.
* @param {IProjectionReadModelTypes} _readModelTypes - The projection associations.
* @param {Logger} _logger - The logger.
*/
constructor(
private readonly _projectionsClient: ProjectionsClient,
private readonly _executionContext: ExecutionContext,
private readonly _readModelTypes: IProjectionReadModelTypes,
private readonly _logger: Logger) {
super();
}
/** @inheritdoc */
forTenant(tenantId: TenantIdLike): IProjectionStore {
const executionContext = this._executionContext
.forTenant(tenantId)
.forCorrelation(Guid.create());
return new ProjectionStore(
this._projectionsClient,
executionContext,
this._readModelTypes,
this._logger);
}
}