Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/hodfords-solutions/nestjs-transaction

nestjs-transaction makes managing database transactions in NestJS easy and straightforward
https://github.com/hodfords-solutions/nestjs-transaction

nestjs transaction typeorm

Last synced: 3 days ago
JSON representation

nestjs-transaction makes managing database transactions in NestJS easy and straightforward

Awesome Lists containing this project

README

        


Hodfords Logo

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:

```ts
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

```typescript
@Injectable()
export class YourService extends TransactionService {
public constructor(
@InjectRepository(YourRepository) private repository: Repository,
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

```typescript
import { DataSource } from 'typeorm';

@Controller()
export class SomeController {
constructor(
private readonly yourService: YourService,
private dataSource: DataSource
) {}

async method(payload: SomePayload): Promise {
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`

```typescript
export const transactionConfig = TransactionModule.forRoot([MailService, I18nService, StorageService, DataSource]);
```

## License 📝

This project is licensed under the MIT License