TypeScript-Knex-Unit-of-Work-Pattern/UnitOfWork.ts at master · JamieCorkhill/TypeScript-Knex-Unit-of-Work-Pattern

PHOTO EMBED

Mon Oct 19 2020 05:05:48 GMT+0000 (Coordinated Universal Time)

Saved by @rajatg #typescript

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();
    }
}
content_copyCOPY

unitOfWork

https://github.com/JamieCorkhill/TypeScript-Knex-Unit-of-Work-Pattern/blob/master/examples/simple-unit-of-work/src/unit-of-work/UnitOfWork.ts