@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
79 lines (75 loc) • 5.2 kB
JavaScript
;
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