UNPKG

typeorm-transactional-decorator

Version:
151 lines (108 loc) 4.4 kB
# typeorm-transactional-decorator A package to simplify transaction management in TypeORM. ## Why one more package? I tried to find an package allowing to manage transactions with decorators and I didn't find any. This package is based on [typeorm-transactional](https://www.npmjs.com/package/typeorm-transactional) with some improvements and changes. Main change is that transaction is propagated to nested methods. ## Features - Easily manage database transactions with decorators - Support for nested transactions - Automatic transaction rollback on errors - Ability to ignore transactions for specific methods - Transaction result management for commit and rollback events ## Installation Install the package using npm: ```bash npm install typeorm-transactional-decorator ``` ## Usage 1. **Install Dependencies**: Ensure you have TypeORM installed in your project. 2. **Import and Configure**: Import the package and configure it in your application. ```typescript import { addTransactionalDataSource } from "typeorm-transactional-decorator"; import { DataSource } from "typeorm"; // Initialize your DataSource const dataSource = new DataSource({ // Your DataSource configuration }); await dataSource.initialize(); // Add transactional capabilities to your DataSource addTransactionalDataSource(dataSource); ``` **NestJS Configuration**: If you're using NestJS, you can configure the package in your TypeORM module: ```typescript import { Module } from "@nestjs/common"; import { TypeOrmModule } from "@nestjs/typeorm"; import { DataSource, DataSourceOptions } from "typeorm"; import { addTransactionalDataSource } from "typeorm-transactional-decorator"; @Module({ imports: [ TypeOrmModule.forRootAsync({ useFactory: () => ({ // Your regular TypeORM configuration goes here type: "postgres", host: "localhost", // ... other TypeORM options }), // The important part for typeorm-transactional-decorator: dataSourceFactory: (options: DataSourceOptions) => { const dataSource = new DataSource(options); return addTransactionalDataSource(dataSource); }, }), ], }) export class AppModule {} ``` 3. **Use Decorators**: Decorate your methods with `@Transactional` to manage transactions. ```typescript @Transactional() public async exampleMethod() { // Your code here, all nested database operations will be wrapped in a transaction } ``` 4. **Ignore Transactions**: Use `@IgnoreTransaction` to ignore transactions for specific methods. ```typescript @IgnoreTransaction() public async ignoreTransactionMethod() { // Your code here, this nested method will ignore the transaction } ``` 5. **Transaction Result Manager**: Use `TransactionResultManager` to manage transaction outcomes. ```typescript import { Transactional, getTransactionResultManager, } from "typeorm-transactional-decorator"; class FileService { @Transactional() async uploadFileToS3(fileContent: Buffer, fileName: string) { const transactionResultManager = getTransactionResultManager(); // Upload file to S3 // ... transactionResultManager.onRollback(async () => { // Delete the file from S3 if transaction is rolled back // ... }); // Proceed with other database operations // ... } } ``` ### License This project is licensed under the MIT License. See the [LICENSE](https://github.com/gwythyr/typeorm-transactional-decorator/blob/master/LICENCE.txt) file for details. ### Contributing Contributions are welcome! Please feel free to submit a Pull Request. 1. Fork the project 2. Create your feature branch (`git checkout -b feature/AmazingFeature`) 3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) 4. Push to the branch (`git push origin feature/AmazingFeature`) 5. Open a Pull Request ### Support If you encounter any problems or have any questions, please open an issue on the [GitHub repository](https://github.com/gwythyr/typeorm-transactional-decorator/issues). ### Acknowledgements - [typerom-transactional](https://www.npmjs.com/package/typeorm-transactional) - The package that inspired this project