UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

77 lines (74 loc) 4.96 kB
import { ApiFunctionContextStorage } from '../context-storage.class.js'; import { ApiFunctionTransactionRuntime } from './runtime.class.js'; import '../../../../enum/decorator/api/action.enum.js'; import '../../../../enum/decorator/api/authentication-type.enum.js'; import '../../../../enum/decorator/api/controller/get-list/query/filter/missing-behavior.enum.js'; import '../../../../enum/decorator/api/controller/get-list/query/unlisted-fields.enum.js'; import '../../../../enum/decorator/api/controller/relation-reference-shape.enum.js'; import '../../../../enum/decorator/api/controller/request/target.enum.js'; import '../../../../enum/decorator/api/controller/request/transformer-type.enum.js'; import '../../../../enum/decorator/api/controller/response-target.enum.js'; import '../../../../enum/decorator/api/dto-type.enum.js'; import '../../../../enum/decorator/api/function/context-storage-kind.enum.js'; import '../../../../enum/decorator/api/function/subscriber-transaction-expectation.enum.js'; import '../../../../enum/decorator/api/function/transaction/event-status.enum.js'; import '../../../../enum/decorator/api/function/transaction/failure-stage.enum.js'; import '../../../../enum/decorator/api/function/transaction/mode.enum.js'; import '../../../../enum/decorator/api/function/transaction/outcome.enum.js'; import { EApiFunctionTransactionOwnerKind } from '../../../../enum/decorator/api/function/transaction/owner-kind.enum.js'; import '../../../../enum/decorator/api/function/transaction/trace-type.enum.js'; import '../../../../enum/decorator/api/function/type.enum.js'; import '../../../../enum/decorator/api/on-type.enum.js'; import '../../../../enum/decorator/api/property/data-type.enum.js'; import '../../../../enum/decorator/api/property/date/identifier.enum.js'; import '../../../../enum/decorator/api/property/date/type.enum.js'; import '../../../../enum/decorator/api/property/desribe-type.enum.js'; import '../../../../enum/decorator/api/property/number-type.enum.js'; import '../../../../enum/decorator/api/property/string-type.enum.js'; import '../../../../enum/decorator/api/route/subscriber-authorization-expectation.enum.js'; import '../../../../enum/decorator/api/route/type.enum.js'; import { ErrorException } from '../../../../utility/error/exception.utility.js'; class ApiFunctionTransactionScope { static async runWithDataSource(dataSource, properties, callback) { const name = properties.name.trim(); if (name.length === 0) { throw ErrorException("ApiFunctionTransactionScope name must be a non-empty string"); } return await ApiFunctionTransactionRuntime.execute({ callback: async (entityManager) => await ApiFunctionTransactionScope.runWithEntityManager(entityManager, async () => await callback(entityManager)), dataSource, owner: { kind: EApiFunctionTransactionOwnerKind.SCOPE, name, }, }); } static async runWithEntityManager(entityManager, callback) { const registry = ApiFunctionContextStorage.getTransactionRegistryForEntityManager(entityManager); if (!registry || registry !== ApiFunctionContextStorage.getTransactionRegistry() || ApiFunctionContextStorage.getEventManager() !== entityManager || ApiFunctionContextStorage.getTransactionQueryRunner()?.manager !== entityManager) { throw ErrorException("ApiFunctionTransactionScope.runWithEntityManager requires an existing Automator transaction owner registry"); } const entity = Object; const context = { entity, eventManager: entityManager, getRepository: (repositoryEntity) => entityManager.getRepository(repositoryEntity), operations: { create: () => Promise.reject(ApiFunctionTransactionScope.createMissingServiceContextError()), delete: () => Promise.reject(ApiFunctionTransactionScope.createMissingServiceContextError()), get: () => Promise.reject(ApiFunctionTransactionScope.createMissingServiceContextError()), getList: () => Promise.reject(ApiFunctionTransactionScope.createMissingServiceContextError()), getMany: () => Promise.reject(ApiFunctionTransactionScope.createMissingServiceContextError()), getRepository: (repositoryEntity) => entityManager.getRepository(repositoryEntity), update: () => Promise.reject(ApiFunctionTransactionScope.createMissingServiceContextError()), }, repository: entityManager.getRepository(entity), }; return await ApiFunctionContextStorage.run(context, callback); } static createMissingServiceContextError() { return ErrorException("ApiFunctionTransactionScope operations require a decorated service context"); } } export { ApiFunctionTransactionScope }; //# sourceMappingURL=scope.class.js.map