UNPKG

@elsikora/nestjs-crud-automator

Version:

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

79 lines (75 loc) 5.2 kB
'use strict'; var contextStorage_class = require('../context-storage.class.js'); var runtime_class = require('./runtime.class.js'); require('../../../../enum/decorator/api/action.enum.js'); require('../../../../enum/decorator/api/authentication-type.enum.js'); require('../../../../enum/decorator/api/controller/get-list/query/filter/missing-behavior.enum.js'); require('../../../../enum/decorator/api/controller/get-list/query/unlisted-fields.enum.js'); require('../../../../enum/decorator/api/controller/relation-reference-shape.enum.js'); require('../../../../enum/decorator/api/controller/request/target.enum.js'); require('../../../../enum/decorator/api/controller/request/transformer-type.enum.js'); require('../../../../enum/decorator/api/controller/response-target.enum.js'); require('../../../../enum/decorator/api/dto-type.enum.js'); require('../../../../enum/decorator/api/function/context-storage-kind.enum.js'); require('../../../../enum/decorator/api/function/subscriber-transaction-expectation.enum.js'); require('../../../../enum/decorator/api/function/transaction/event-status.enum.js'); require('../../../../enum/decorator/api/function/transaction/failure-stage.enum.js'); require('../../../../enum/decorator/api/function/transaction/mode.enum.js'); require('../../../../enum/decorator/api/function/transaction/outcome.enum.js'); var ownerKind_enum = require('../../../../enum/decorator/api/function/transaction/owner-kind.enum.js'); require('../../../../enum/decorator/api/function/transaction/trace-type.enum.js'); require('../../../../enum/decorator/api/function/type.enum.js'); require('../../../../enum/decorator/api/on-type.enum.js'); require('../../../../enum/decorator/api/property/data-type.enum.js'); require('../../../../enum/decorator/api/property/date/identifier.enum.js'); require('../../../../enum/decorator/api/property/date/type.enum.js'); require('../../../../enum/decorator/api/property/desribe-type.enum.js'); require('../../../../enum/decorator/api/property/number-type.enum.js'); require('../../../../enum/decorator/api/property/string-type.enum.js'); require('../../../../enum/decorator/api/route/subscriber-authorization-expectation.enum.js'); require('../../../../enum/decorator/api/route/type.enum.js'); var exception_utility = require('../../../../utility/error/exception.utility.js'); class ApiFunctionTransactionScope { static async runWithDataSource(dataSource, properties, callback) { const name = properties.name.trim(); if (name.length === 0) { throw exception_utility.ErrorException("ApiFunctionTransactionScope name must be a non-empty string"); } return await runtime_class.ApiFunctionTransactionRuntime.execute({ callback: async (entityManager) => await ApiFunctionTransactionScope.runWithEntityManager(entityManager, async () => await callback(entityManager)), dataSource, owner: { kind: ownerKind_enum.EApiFunctionTransactionOwnerKind.SCOPE, name, }, }); } static async runWithEntityManager(entityManager, callback) { const registry = contextStorage_class.ApiFunctionContextStorage.getTransactionRegistryForEntityManager(entityManager); if (!registry || registry !== contextStorage_class.ApiFunctionContextStorage.getTransactionRegistry() || contextStorage_class.ApiFunctionContextStorage.getEventManager() !== entityManager || contextStorage_class.ApiFunctionContextStorage.getTransactionQueryRunner()?.manager !== entityManager) { throw exception_utility.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 contextStorage_class.ApiFunctionContextStorage.run(context, callback); } static createMissingServiceContextError() { return exception_utility.ErrorException("ApiFunctionTransactionScope operations require a decorated service context"); } } exports.ApiFunctionTransactionScope = ApiFunctionTransactionScope; //# sourceMappingURL=scope.class.js.map