Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { Connection, ConnectionOptions, createConnection, QueryRunner } from 'typeorm'
- import faker from 'faker'
- import { Users } from '@models/model.users'
- const typeormConfog: ConnectionOptions = {
- type: 'postgres',
- host: process.env.PG_HOST,
- port: +process.env.PG_PORT,
- username: process.env.PG_USER,
- password: process.env.PG_PASSWORD,
- database: process.env.PG_NAME,
- entities: ['dist/models/*.js'],
- synchronize: false
- }
- // example transaction database
- (async () => {
- try {
- const connection = ['production', 'staging'].includes(process.env.NODE_ENV)
- ? await createConnection(typeormConfog)
- : await createConnection()
- // call custom transaction like this
- await builderTransaction(connection, async (queryRunner: QueryRunner): Promise<any> => {
- // update operation
- await queryRunner.manager.update(Users, { id: 1 }, { name: 'john doe' })
- // insert operation
- const users: Users = new Users()
- users.name = faker.name.firstName()
- users.email = faker.internet.email()
- users.password = '@Qwerty12'
- await connection.manager.save(users)
- // get operation
- const getUsers = await queryRunner.manager.findOne(Users, { id: 1 })
- console.log('getUsers: ', getUsers)
- })
- } catch (err: any) {
- return Promise.reject(err)
- }
- })()
- // custom transaction builder
- const builderTransaction = async (connection: Connection, operationTransaction: (query: QueryRunner) => Promise<any>): Promise<any> => {
- try {
- const query: QueryRunner = connection.createQueryRunner()
- await query.connect()
- await query.startTransaction()
- try {
- const responseTransaction: Record<string ,any> = await operationTransaction(query)
- await query.commitTransaction()
- return responseTransaction
- } catch (e: any) {
- if (query.isTransactionActive) await query.rollbackTransaction()
- return Promise.reject(err)
- } finally {
- if (query.isReleased) await query.release()
- }
- } catch (e: any) {
- return Promise.reject(e)
- }
- }
Add Comment
Please, Sign In to add comment