@hodfords/nestjs-transaction
nestjs-transaction makes managing database transactions in NestJS easy and straightforward. It provides simple tools to start, commit, and roll back transactions, helping you ensure that multiple database operations are completed successfully or not at all. With nestjs-transaction
, you can handle complex transaction scenarios with ease, making your data handling more reliable and error-free.
Installation 🤖
Install the nestjs-transaction
package with:
npm install @hodfords/nestjs-transaction --save
Usage 🚀
First, extend the TransactionService
imported from the library in your service, and then use the withTransaction
method within the transaction callback to call your service.
How to use
your-service.service.ts
@Injectable()
export class YourService extends TransactionService {
public constructor(
@InjectRepository(YourRepository) private repository: Repository<Entity>,
private yourCustomRepository: CustomRepository,
private yourService: Service,
// Let's say you don't want to rebuild this service in the transaction
private yourCacheService: CacheService,
@Inject(forwardRef(() => ForwardService)) private yourForwardService: ForwardService
) {
super();
}
async theMethodWillUseTransaction(payload: SomePayload) {
// logic code here
}
}
your-controller.controller.ts
import { DataSource } from 'typeorm';
@Controller()
export class SomeController {
constructor(
private readonly yourService: YourService,
private dataSource: DataSource
) {}
async method(payload: SomePayload): Promise<SomeResponse> {
return this.dataSource.transaction(async (entityManager) => {
return await this.yourService
.withTransaction(entityManager, { excluded: [CacheService] })
.theMethodWillUseTransaction(payload);
});
}
}
Exclude services from transaction
You can configure services to be excluded from transactions by specifying them in transactionConfig
and importing it
into AppModule
export const transactionConfig = TransactionModule.forRoot([MailService, I18nService, StorageService, DataSource]);
License 📝
This project is licensed under the MIT License