diff --git a/packages/server/src/application/Application.ts b/packages/server/src/application/Application.ts index 9434467..28b1411 100644 --- a/packages/server/src/application/Application.ts +++ b/packages/server/src/application/Application.ts @@ -6,7 +6,6 @@ import * as user from '../user' import cookieParser from 'cookie-parser' import express from 'express' import {AsyncRouter, TransactionalRouter} from '../router' -import {DB} from '../database/DB' import {IApplication} from './IApplication' import {IConfig} from './IConfig' import {IDatabase} from '../database/IDatabase' @@ -19,7 +18,6 @@ import {ILoggerFactory} from '@rondo.dev/logger' import {json} from 'body-parser' export class Application implements IApplication { - readonly db: DB readonly transactionManager: ITransactionManager readonly server: express.Application @@ -30,7 +28,6 @@ export class Application implements IApplication { constructor(readonly config: IConfig, readonly database: IDatabase) { this.transactionManager = database.transactionManager - this.db = new DB(this.transactionManager) this.services = this.configureServices() @@ -41,9 +38,9 @@ export class Application implements IApplication { protected configureServices(): IServices { return { - userService: new services.UserService(this.db), - teamService: new team.TeamService(this.db), - userPermissions: new user.UserPermissions(this.db), + userService: new services.UserService(this.database), + teamService: new team.TeamService(this.database), + userPermissions: new user.UserPermissions(this.database), } } diff --git a/packages/server/src/database/DB.ts b/packages/server/src/database/DB.ts deleted file mode 100644 index c8b442d..0000000 --- a/packages/server/src/database/DB.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { - EntityManager, - EntitySchema, - ObjectType, - Repository, -} from 'typeorm' -import {ITransactionManager} from '../database/ITransactionManager' - -export class DB { - constructor(protected readonly transactionManager: ITransactionManager) {} - - getEntityManager(): EntityManager { - return this.transactionManager.getEntityManager() - } - - getRepository( - target: ObjectType | EntitySchema | string, - ): Repository { - return this.transactionManager.getRepository(target) - } -} diff --git a/packages/server/src/database/Database.ts b/packages/server/src/database/Database.ts index f747830..4ed6b3a 100644 --- a/packages/server/src/database/Database.ts +++ b/packages/server/src/database/Database.ts @@ -1,7 +1,15 @@ import {IDatabase} from './IDatabase' import {Namespace} from 'cls-hooked' import {TransactionManager} from './TransactionManager' -import {createConnection, Connection, ConnectionOptions, Logger} from 'typeorm' +import { + createConnection, + Connection, + ConnectionOptions, + Logger, + EntitySchema, + ObjectType, + Repository, +} from 'typeorm' export class Database implements IDatabase { protected connection?: Connection @@ -37,4 +45,14 @@ export class Database implements IDatabase { await this.getConnection().close() } + getEntityManager() { + return this.transactionManager.getEntityManager() + } + + getRepository( + target: ObjectType | EntitySchema | string, + ): Repository { + return this.transactionManager.getRepository(target) + } + } diff --git a/packages/server/src/database/IDatabase.ts b/packages/server/src/database/IDatabase.ts index 24c8a49..0491b57 100644 --- a/packages/server/src/database/IDatabase.ts +++ b/packages/server/src/database/IDatabase.ts @@ -1,4 +1,6 @@ -import {Connection} from 'typeorm' +import { + Connection, EntityManager, ObjectType, EntitySchema, Repository +} from 'typeorm' import {ITransactionManager} from './ITransactionManager' import {Namespace} from 'cls-hooked' @@ -7,5 +9,9 @@ export interface IDatabase { transactionManager: ITransactionManager connect(): Promise getConnection(): Connection + getEntityManager(): EntityManager + getRepository( + target: ObjectType | EntitySchema | string, + ): Repository close(): Promise } diff --git a/packages/server/src/database/index.ts b/packages/server/src/database/index.ts index b11ee84..59ba1d2 100644 --- a/packages/server/src/database/index.ts +++ b/packages/server/src/database/index.ts @@ -2,4 +2,3 @@ export * from './ITransactionManager' export * from './TransactionManager' export * from './IDatabase' export * from './Database' -export * from './DB' diff --git a/packages/server/src/services/TeamService2.ts b/packages/server/src/services/TeamService2.ts index 30cfb32..08b325e 100644 --- a/packages/server/src/services/TeamService2.ts +++ b/packages/server/src/services/TeamService2.ts @@ -1,4 +1,4 @@ -import {DB} from '../database/DB' +import {IDatabase} from '../database/IDatabase' import {Validator} from '../validator' import {Team} from '../entities/Team' import {UserTeam} from '../entities/UserTeam' @@ -14,7 +14,7 @@ type IContext = t.IContext export class TeamService2 implements Contextual { constructor( - protected readonly db: DB, + protected readonly db: IDatabase, protected readonly permissions: IUserPermissions, ) {} diff --git a/packages/server/src/services/UserService.test.ts b/packages/server/src/services/UserService.test.ts index 460c74c..b369ebf 100644 --- a/packages/server/src/services/UserService.test.ts +++ b/packages/server/src/services/UserService.test.ts @@ -8,7 +8,7 @@ describe('UserService', () => { const username = test.username const password = '1234567890' - const userService = new UserService(test.db) + const userService = new UserService(test.bootstrap.database) async function createUser(u = username, p = password) { return userService.createUser({ diff --git a/packages/server/src/services/UserService.ts b/packages/server/src/services/UserService.ts index 5bbdea4..b2d006d 100644 --- a/packages/server/src/services/UserService.ts +++ b/packages/server/src/services/UserService.ts @@ -1,6 +1,6 @@ import createError from 'http-errors' import {BaseService} from './BaseService' -import {DB} from '../database/DB' +import {IDatabase} from '../database/IDatabase' import {ICredentials, INewUser, IUser, trim} from '@rondo.dev/common' import {IUserService} from './IUserService' import {UserEmail} from '../entities/UserEmail' @@ -13,7 +13,7 @@ const SALT_ROUNDS = 10 const MIN_PASSWORD_LENGTH = 10 export class UserService implements IUserService { - constructor(protected readonly db: DB) {} + constructor(protected readonly db: IDatabase) {} async createUser(payload: INewUser): Promise { const newUser = { diff --git a/packages/server/src/team/TeamService.ts b/packages/server/src/team/TeamService.ts index a937a99..41c2b72 100644 --- a/packages/server/src/team/TeamService.ts +++ b/packages/server/src/team/TeamService.ts @@ -1,4 +1,4 @@ -import {DB} from '../database/DB' +import {IDatabase} from '../database/IDatabase' import {ITeamService} from './ITeamService' import {IUserInTeam, trim} from '@rondo.dev/common' import {IUserTeamParams} from './IUserTeamParams' @@ -8,7 +8,7 @@ import {Validator} from '../validator' export class TeamService implements ITeamService { - constructor(protected readonly db: DB) {} + constructor(protected readonly db: IDatabase) {} // TODO check team limit per user async create({name, userId}: {name: string, userId: number}) { diff --git a/packages/server/src/test-utils/TestUtils.ts b/packages/server/src/test-utils/TestUtils.ts index c0689e3..29b7899 100644 --- a/packages/server/src/test-utils/TestUtils.ts +++ b/packages/server/src/test-utils/TestUtils.ts @@ -1,7 +1,6 @@ import express from 'express' import supertest from 'supertest' import {Connection, QueryRunner} from 'typeorm' -import {DB} from '../database/DB' import { ENTITY_MANAGER, ITransactionManager, } from '../database/ITransactionManager' @@ -19,13 +18,11 @@ export class TestUtils { readonly app: express.Application readonly context: string readonly transactionManager: ITransactionManager - readonly db: DB constructor(readonly bootstrap: IBootstrap) { this.app = bootstrap.application.server this.context = this.bootstrap.getConfig().app.context this.transactionManager = this.bootstrap.database.transactionManager - this.db = new DB(this.transactionManager) } /** diff --git a/packages/server/src/user/UserPermissions.ts b/packages/server/src/user/UserPermissions.ts index c4e6e1f..89d9b0e 100644 --- a/packages/server/src/user/UserPermissions.ts +++ b/packages/server/src/user/UserPermissions.ts @@ -1,10 +1,10 @@ import createError from 'http-errors' -import {DB} from '../database/DB' +import {IDatabase} from '../database/IDatabase' import {UserTeam} from '../entities/UserTeam' import {IUserPermissions} from './IUserPermissions' export class UserPermissions implements IUserPermissions { - constructor(protected readonly db: DB) {} + constructor(protected readonly db: IDatabase) {} async belongsToTeam(params: {userId: number, teamId: number}) { const {userId, teamId} = params