0.1.0 • Published 9 months ago
@nicheeeer/prisma-transaction v0.1.0
@nicheeeer/prisma-transaction
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 manage transactions within Prisma extensions.
Installation
npm install @nicheeeer/prisma-transactionor
yarn add @nicheeeer/prisma-transactionUsage
1️⃣ Extend prisma client
This library extends Prisma using its extension feature
import { createTransactionExtension } from '@nicheeeer/prisma-transaction';
const prisma = new PrismaClient().$extends(createTransactionExtension());2️⃣ Use the @Transaction Decorator
Apply the @Transaction decorator to a method where you want to execute a transaction:
import { Injectable } from '@nestjs/common';
import { Transaction } from '@nicheeeer/prisma-transaction';
@Injectable()
export class UserService {
constructor(private readonly prisma: PrismaService) {}
@Transaction()
async createUser(userData: { name: string; email: string }) {
return this.prisma.user.create({
data: userData,
});
}
}Transaction Options
The @Transaction decorator supports the following options:
export interface TransactionOptions {
/**
* The maximum amount of time Prisma Client will wait to acquire a transaction from the database. The default value is 2 seconds.
*/
maxWait?: number;
/**
* The maximum amount of time the interactive transaction can run before being canceled and rolled back. The default value is 5 seconds.
*/
timeout?: number;
/**
* By default this is set to the value currently configured in your database.
*/
isolationLevel?: Prisma.TransactionIsolationLevel;
}You can specify transaction options when using the @Transaction decorator:
@Transaction({ isolationLevel: Prisma.TransactionIsolationLevel.ReadCommitted, maxWait: 3000, timeout: 10000 })
async updateUser(email: string) {
return prisma.user.findFirst({
where: { email }
});
}The createTransactionExtension function also supports transaction options
import { PrismaClient } from '@prisma/client';
import { createTransactionExtension } from '@nicheeeer/prisma-transaction';
const prisma = new PrismaClient().$extends(createTransactionExtension({ isolationLevel: Prisma.TransactionIsolationLevel.ReadCommitted, maxWait: 3000, timeout: 10000 }));License
MIT License
0.1.0
9 months ago