import { Context, AttributeScope } from '@malagu/core/lib/node'; import { EntityManager, ObjectType, EntitySchema, Repository, TreeRepository, MongoRepository, ObjectLiteral } from 'typeorm'; import { DEFAULT_CONNECTION_NAME } from '../../common'; export const CURRENT_ORM_CONTEXT_REQUEST_KEY = 'CurrentOrmContextRequest'; export namespace OrmContext { export function getEntityManager(name = DEFAULT_CONNECTION_NAME): EntityManager { const entityManagerMap = Context.getAttr>(CURRENT_ORM_CONTEXT_REQUEST_KEY, AttributeScope.Request); if (entityManagerMap) { const entityManagers = entityManagerMap.get(name); if (entityManagers && entityManagers.length > 0) { return entityManagers[entityManagers.length - 1]; } } return undefined; } export function getRepository(target: ObjectType|EntitySchema|string, name?: string): Repository { return getEntityManager(name).getRepository(target); } export function getTreeRepository(target: ObjectType|EntitySchema|string, name?: string): TreeRepository { return getEntityManager(name).getTreeRepository(target); } export function getMongoRepository(target: ObjectType|EntitySchema|string, name?: string): MongoRepository { return getEntityManager(name).getMongoRepository(target); } export function pushEntityManager(name: string, entityManager: EntityManager): void { let entityManagerMap = Context.getAttr>(CURRENT_ORM_CONTEXT_REQUEST_KEY, AttributeScope.Request); if (!entityManagerMap) { entityManagerMap = new Map(); Context.setAttr(CURRENT_ORM_CONTEXT_REQUEST_KEY, entityManagerMap); } if (!entityManagerMap.get(name)) { entityManagerMap.set(name, []); } entityManagerMap.get(name)!.push(entityManager); } export function popEntityManager(name: string): EntityManager | undefined { const entityManagerMap = Context.getAttr>(CURRENT_ORM_CONTEXT_REQUEST_KEY, AttributeScope.Request); if (entityManagerMap) { const entityManagers = entityManagerMap.get(name); if (entityManagers && entityManagers.length > 0) { return entityManagers.pop(); } } } }