UNPKG

@nicheeeer/prisma-transaction

Version:

## Introduction `prisma-transaction` is a library that provides a simple way to use transactions in Prisma within NestJS using decorators. \ It simplifies handling transactions and ensures consistency across services by utilizing `AsyncLocalStorage` to m

35 lines (28 loc) 1.11 kB
import { Prisma } from '@prisma/client'; import { TransactionOptions } from './transaction.decorator'; import { extractTransaction } from './utils'; import transactionStorage from './utils/transaction.storage'; export const createTransactionExtension = (options?: TransactionOptions) => Prisma.defineExtension((prisma) => { return prisma.$extends({ query: { $allOperations: async ({ args, model, operation, query, __internalParams }: any) => { const store = transactionStorage.getTx(); if (store === null || __internalParams?.transaction) { return query(args); } if (store.manualTx === null) { const manualTx = await extractTransaction(prisma, store.options || options); if (store.manualTx === null) { store.manualTx = manualTx; } } if (model) { const result = await store.manualTx.client[model][operation](args); return result; } return (store.manualTx as any).client[operation](args); }, }, }); });