From 9799711faeecfde2f3c665c82ff64795ea5a81a3 Mon Sep 17 00:00:00 2001 From: Sam Artuso Date: Fri, 5 Apr 2024 20:59:06 +0100 Subject: [PATCH] feat: add default tx options --- .../01-transactional/04-pg-promise-adapter.md | 5 +++++ .../src/lib/transactional-adapter-pg-promise.ts | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/docs/06_plugins/01_available-plugins/01-transactional/04-pg-promise-adapter.md b/docs/docs/06_plugins/01_available-plugins/01-transactional/04-pg-promise-adapter.md index c84f4025..56a8818f 100644 --- a/docs/docs/06_plugins/01_available-plugins/01-transactional/04-pg-promise-adapter.md +++ b/docs/docs/06_plugins/01_available-plugins/01-transactional/04-pg-promise-adapter.md @@ -32,6 +32,8 @@ pnpm add @nestjs-cls/transactional-adapter-pg-promise ## Registration ```ts +import { txMode } from 'pg-promise' + ClsModule.forRoot({ plugins: [ new ClsPluginTransactional({ @@ -42,6 +44,9 @@ ClsModule.forRoot({ adapter: new TransactionalAdapterPgPromise({ // the injection token of the database instance dbInstanceToken: DB, + + // default transaction options (optional) + defaultTxOptions: { mode: new txMode.TransactionMode({ tiLevel: txMode.isolationLevel.serializable }) } }), }), ], diff --git a/packages/transactional-adapters/transactional-adapter-pg-promise/src/lib/transactional-adapter-pg-promise.ts b/packages/transactional-adapters/transactional-adapter-pg-promise/src/lib/transactional-adapter-pg-promise.ts index 781f702a..0cb1f35b 100644 --- a/packages/transactional-adapters/transactional-adapter-pg-promise/src/lib/transactional-adapter-pg-promise.ts +++ b/packages/transactional-adapters/transactional-adapter-pg-promise/src/lib/transactional-adapter-pg-promise.ts @@ -10,6 +10,8 @@ export interface PgPromiseTransactionalAdapterOptions { * The injection token for the pg-promise instance. */ dbInstanceToken: any; + + defaultTxOptions?: TxOptions; } export class TransactionalAdapterPgPromise @@ -17,8 +19,11 @@ export class TransactionalAdapterPgPromise { connectionToken: any; + defaultTxOptions?: TxOptions; + constructor(options: PgPromiseTransactionalAdapterOptions) { this.connectionToken = options.dbInstanceToken; + this.defaultTxOptions = options.defaultTxOptions; } optionsFactory = (pgPromiseDbInstance: Database) => ({ @@ -27,10 +32,13 @@ export class TransactionalAdapterPgPromise fn: (...args: any[]) => Promise, setClient: (client?: Database) => void, ) => { - return pgPromiseDbInstance.tx(options ?? {}, (tx) => { - setClient(tx as unknown as Database); - return fn(); - }); + return pgPromiseDbInstance.tx( + options ?? this.defaultTxOptions ?? {}, + (tx) => { + setClient(tx as unknown as Database); + return fn(); + }, + ); }, getFallbackInstance: () => pgPromiseDbInstance, });