@nodeboot/starter-persistence
Version:
Nodeboot starter package for persistence. Supports data access layer auto-configuration providing features like database initialization, consistency check, entity mapping, repository pattern, transactions, paging, migrations, persistence listeners, persis
46 lines • 2.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultRepositoriesAdapter = void 0;
const context_1 = require("@nodeboot/context");
const typeorm_1 = require("typeorm");
const winston_1 = require("winston");
const PersistenceContext_1 = require("../PersistenceContext");
/**
* Default implementation of the {@link RepositoriesAdapter} interface.
*
* Responsible for binding all repositories from the {@link PersistenceContext}
* to the provided IoC container, initializing them with the TypeORM EntityManager,
* and caching them inside the EntityManager and the IoC container.
*/
class DefaultRepositoriesAdapter {
/**
* Binds repositories to the given IoC container.
*
* Retrieves the TypeORM EntityManager and a Winston Logger instance from the container,
* then iterates over all repositories defined in the {@link PersistenceContext}.
* For each repository, it creates an instance, logs the registration,
* stores the instance in the EntityManager's repository cache, and
* registers the instance with the IoC container.
*
* @param {IocContainer} iocContainer - The IoC container to bind repositories to.
*/
bind(iocContainer) {
const entityManager = iocContainer.get(typeorm_1.EntityManager);
const logger = iocContainer.get(winston_1.Logger);
for (const repository of PersistenceContext_1.PersistenceContext.get().repositories) {
const { target, entity, type } = repository;
// Check if the current active profiles allow this repository
// This is useful for conditional repository registration based on environment profiles
if ((0, context_1.allowedProfiles)(target)) {
const entityRepositoryInstance = new target(entity, entityManager, entityManager.queryRunner);
logger.info(`Registering a '${type.toString()}' repository '${target.name}' for entity '${entity.name}'`);
// Set repository to entity manager cache
entityManager.repositories.set(target, entityRepositoryInstance);
// set it to the DI container
iocContainer.set(target, entityRepositoryInstance);
}
}
}
}
exports.DefaultRepositoriesAdapter = DefaultRepositoriesAdapter;
//# sourceMappingURL=DefaultRepositoriesAdapter.js.map