@dolittle/sdk.projections
Version:
Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.
62 lines • 6 kB
JavaScript
;
// Copyright (c) Dolittle. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProjectionsModelBuilder = void 0;
const mongodb_1 = require("mongodb");
require("@dolittle/sdk.resources");
const ProjectionProcessor_1 = require("../Internal/ProjectionProcessor");
const ProjectionReadModelTypes_1 = require("../Store/ProjectionReadModelTypes");
const ProjectionBuilder_1 = require("./ProjectionBuilder");
const ProjectionClassBuilder_1 = require("./ProjectionClassBuilder");
const ProjectionModelId_1 = require("../ProjectionModelId");
const IProjectionStore_1 = require("../Store/IProjectionStore");
const IProjectionOf_1 = require("../Store/IProjectionOf");
/**
* Represents a builder that can build {@link ProjectionProcessor} from an {@link IModel}.
*/
class ProjectionsModelBuilder {
/**
* Initialises a new instance of the {@link ProjectionsModelBuilder} class.
* @param {IModel} _model - The built application model.
* @param {IClientBuildResults} _buildResults - For keeping track of build results.
* @param {IEventTypes} _eventTypes - For event types resolution.
* @param {IServiceProviderBuilder} _bindings - For registering the bindings for {@link IProjectionOf} types.
*/
constructor(_model, _buildResults, _eventTypes, _bindings) {
this._model = _model;
this._buildResults = _buildResults;
this._eventTypes = _eventTypes;
this._bindings = _bindings;
}
/**
* Builds all projections created with the builder.
* @returns {[ProjectionProcessor[], IProjectionReadModelTypes]} The built projection processors and read model types.
*/
build() {
const builders = this._model.getProcessorBuilderBindings(ProjectionBuilder_1.ProjectionBuilder, ProjectionClassBuilder_1.ProjectionClassBuilder);
const processors = [];
for (const { processorBuilder } of builders) {
const projection = processorBuilder.build(this._eventTypes, this._buildResults);
if (projection !== undefined) {
processors.push(new ProjectionProcessor_1.ProjectionProcessor(projection, this._eventTypes));
if (projection.copies.mongoDB.shouldCopyToMongoDB && projection.readModelType !== undefined) {
this._bindings.addTenantServices(binder => {
binder.bind(mongodb_1.Collection.forReadModel(projection.readModelType)).toFactory(services => services.get(mongodb_1.Db).collection(projection.copies.mongoDB.collectionName.value));
});
}
}
}
const identifiers = this._model.getTypeBindings(ProjectionModelId_1.isProjectionModelId);
const readModelTypes = new ProjectionReadModelTypes_1.ProjectionReadModelTypes();
for (const { identifier, type } of identifiers) {
readModelTypes.associate(type, identifier.id, identifier.scope);
this._bindings.addTenantServices(binder => {
binder.bind(IProjectionOf_1.IProjectionOf.for(type)).toFactory(services => services.get(IProjectionStore_1.IProjectionStore).of(type, identifier.id, identifier.scope));
});
}
return [processors, readModelTypes];
}
}
exports.ProjectionsModelBuilder = ProjectionsModelBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvamVjdGlvbnNNb2RlbEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlcyI6WyJCdWlsZGVycy9Qcm9qZWN0aW9uc01vZGVsQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHFHQUFxRzs7O0FBRXJHLHFDQUF5QztBQUt6QyxtQ0FBaUM7QUFFakMseUVBQXNFO0FBRXRFLGdGQUE2RTtBQUM3RSwyREFBd0Q7QUFDeEQscUVBQWtFO0FBQ2xFLDREQUEyRDtBQUMzRCxnRUFBNkQ7QUFDN0QsMERBQXVEO0FBRXZEOztHQUVHO0FBQ0gsTUFBYSx1QkFBdUI7SUFDaEM7Ozs7OztPQU1HO0lBQ0gsWUFDcUIsTUFBYyxFQUNkLGFBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hCLFNBQWtDO1FBSGxDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDbEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBeUI7SUFDcEQsQ0FBQztJQUVKOzs7T0FHRztJQUNILEtBQUs7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLHFDQUFpQixFQUFFLCtDQUFzQixDQUFDLENBQUM7UUFDcEcsTUFBTSxVQUFVLEdBQStCLEVBQUUsQ0FBQztRQUVsRCxLQUFLLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLFFBQVEsRUFBRTtZQUN6QyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEYsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUMxQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUkseUNBQW1CLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUV2RSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixJQUFJLFVBQVUsQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO29CQUN6RixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUN2SyxDQUFDLENBQUMsQ0FBQztpQkFDTjthQUNKO1NBQ0o7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyx1Q0FBbUIsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sY0FBYyxHQUFHLElBQUksbURBQXdCLEVBQUUsQ0FBQztRQUN0RCxLQUFLLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksV0FBVyxFQUFFO1lBQzVDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG1DQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pJLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDSjtBQTlDRCwwREE4Q0MifQ==