m
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.DBTransaction = exports.DataSourceContext = void 0;
|
||||
const async_hooks_1 = require("async_hooks");
|
||||
const storage = new async_hooks_1.AsyncLocalStorage();
|
||||
class DataSourceContext {
|
||||
static put(source, callback) {
|
||||
storage.run(source, callback);
|
||||
}
|
||||
static current() {
|
||||
return storage.getStore();
|
||||
}
|
||||
static async startTransaction(callback) {
|
||||
const queryRunner = DataSourceContext.current().createQueryRunner();
|
||||
return this.startTransactionToQueryRunner(queryRunner, callback);
|
||||
}
|
||||
static async startTransactionToQueryRunner(queryRunner, callback) {
|
||||
await queryRunner.connect();
|
||||
await queryRunner.startTransaction();
|
||||
const transaction = new DBTransaction(queryRunner, queryRunner.manager);
|
||||
try {
|
||||
const result = await callback(transaction);
|
||||
await transaction.commit();
|
||||
return result;
|
||||
}
|
||||
catch (error) {
|
||||
await transaction.rollback();
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.DataSourceContext = DataSourceContext;
|
||||
class DBTransaction {
|
||||
queryRunner;
|
||||
manager;
|
||||
constructor(queryRunner, manager) {
|
||||
this.queryRunner = queryRunner;
|
||||
this.manager = manager;
|
||||
}
|
||||
async rollback() {
|
||||
if (!this.queryRunner.isTransactionActive) {
|
||||
return;
|
||||
}
|
||||
await this.queryRunner.rollbackTransaction();
|
||||
await this.queryRunner.release();
|
||||
}
|
||||
async commit() {
|
||||
if (!this.queryRunner.isTransactionActive) {
|
||||
return;
|
||||
}
|
||||
await this.queryRunner.commitTransaction();
|
||||
await this.queryRunner.release();
|
||||
}
|
||||
getRepository(target) {
|
||||
return this.manager.getRepository(target);
|
||||
}
|
||||
}
|
||||
exports.DBTransaction = DBTransaction;
|
||||
//# sourceMappingURL=data_source.context.js.map
|
||||
Reference in New Issue
Block a user