import { IOrdersRepository, OrderRepository } from './../repositories/OrderRepository'; import * as Knex from 'knex'; import { IProductsRepository, ProductsRepository } from './../repositories/ProductsRepository'; import { IUserRepository, UserRepository } from './../repositories/UserRepository'; export interface IUnitOfWork { commit(): void; rollback(): void } // Requires a transaction scope injected on a per-request basis. export class UnitOfWork implements IUnitOfWork { private context: Knex.Transaction; public readonly usersRepository: IUserRepository; public readonly ordersRepository: IOrdersRepository; public readonly productsRepository: IProductsRepository; public constructor(transactionContext: Knex.Transaction) { this.context = transactionContext; this.usersRepository = new UserRepository(transactionContext); this.ordersRepository = new OrderRepository(transactionContext); this.productsRepository = new ProductsRepository(transactionContext); } public commit(): void { this.context.commit(); } public rollback(): void { this.context.rollback(); } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter