From 7bbabd3d0efcf41e48511491c2926e94440de58f Mon Sep 17 00:00:00 2001 From: Swapnil Date: Sun, 22 Dec 2024 21:56:35 +0530 Subject: [PATCH] [update] --- src/controllers/auth/login.controller.ts | 8 ++++++- .../auth/registration.controller.ts | 8 +++++-- src/interactors/IAM/iamPrincipalInteractor.ts | 7 +++++- src/interactors/token/token.interactor.ts | 7 ++++-- src/repositories/token/token.repository.ts | 2 ++ src/routes/auth/user.routes.ts | 24 +++++++++++-------- 6 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/controllers/auth/login.controller.ts b/src/controllers/auth/login.controller.ts index bc8ef6d..592aa7a 100644 --- a/src/controllers/auth/login.controller.ts +++ b/src/controllers/auth/login.controller.ts @@ -1,3 +1,5 @@ +import { INTERFACE_TYPE } from './../../utils/constant/appConstant'; +import { inject, injectable } from 'inversify'; import { Request, Response } from 'express'; import { AsyncHandler } from "../../utils"; import { IIamPrincipalInteractor, ITokenInteractor } from "../../interfaces/interactor"; @@ -5,11 +7,15 @@ import ApiError from '../../utils/helper/ApiError'; import { compareSync } from 'bcrypt'; import ApiResponse from '../../utils/helper/ApiResponse'; +@injectable() export class LoginController { private tokenInteractor: ITokenInteractor; private iamPrincipalInteractor: IIamPrincipalInteractor; - constructor(tokenInteractor: ITokenInteractor, iamPrincipalInteractor: IIamPrincipalInteractor) { + constructor( + @inject(INTERFACE_TYPE.TokenInteractor) tokenInteractor: ITokenInteractor, + @inject(INTERFACE_TYPE.IamPrincipalInteractor) iamPrincipalInteractor: IIamPrincipalInteractor + ) { this.tokenInteractor = tokenInteractor; this.iamPrincipalInteractor = iamPrincipalInteractor; } diff --git a/src/controllers/auth/registration.controller.ts b/src/controllers/auth/registration.controller.ts index 665c75f..31fe38b 100644 --- a/src/controllers/auth/registration.controller.ts +++ b/src/controllers/auth/registration.controller.ts @@ -1,13 +1,17 @@ +import { inject, injectable } from 'inversify'; import { genSaltSync, hashSync } from 'bcrypt'; import { Request, Response } from 'express'; -import { AsyncHandler } from "../../utils"; +import { AsyncHandler, INTERFACE_TYPE } from "../../utils"; import { IIamPrincipalInteractor } from "../../interfaces/interactor"; import ApiResponse from '../../utils/helper/ApiResponse'; +@injectable() export class RegistrationController { private readonly interactor: IIamPrincipalInteractor; - constructor(interactor: IIamPrincipalInteractor) { + constructor( + @inject(INTERFACE_TYPE.IamPrincipalInteractor) interactor: IIamPrincipalInteractor + ) { this.interactor = interactor; } diff --git a/src/interactors/IAM/iamPrincipalInteractor.ts b/src/interactors/IAM/iamPrincipalInteractor.ts index d91f00a..2814362 100644 --- a/src/interactors/IAM/iamPrincipalInteractor.ts +++ b/src/interactors/IAM/iamPrincipalInteractor.ts @@ -1,11 +1,16 @@ +import { INTERFACE_TYPE } from './../../utils/constant/appConstant'; +import { inject, injectable } from 'inversify'; import { IamPrincipal } from "../../entities"; import { IIamPrincipalInteractor } from "../../interfaces/interactor"; import { IIamPrincipalRepository } from '../../interfaces/repository'; +@injectable() export class IamPrincipalInteractor implements IIamPrincipalInteractor { private repository: IIamPrincipalRepository; - constructor(repository: IIamPrincipalRepository) { + constructor( + @inject(INTERFACE_TYPE.IamPrincipalRepository) repository: IIamPrincipalRepository + ) { this.repository = repository; } diff --git a/src/interactors/token/token.interactor.ts b/src/interactors/token/token.interactor.ts index 494a54d..67d5332 100644 --- a/src/interactors/token/token.interactor.ts +++ b/src/interactors/token/token.interactor.ts @@ -1,4 +1,5 @@ -import { injectable } from 'inversify'; +import { INTERFACE_TYPE } from './../../utils/constant/appConstant'; +import { inject, injectable } from 'inversify'; import { ITokenRepository } from "../../interfaces/repository"; import { ITokenInteractor } from "../../interfaces/interactor"; import { sign } from "jsonwebtoken"; @@ -10,7 +11,9 @@ export class TokenInteractor implements ITokenInteractor { private repository: ITokenRepository - constructor(repository: ITokenRepository) { + constructor( + @inject(INTERFACE_TYPE.TokenRepository) repository: ITokenRepository + ) { this.repository = repository } diff --git a/src/repositories/token/token.repository.ts b/src/repositories/token/token.repository.ts index 49b5377..5f95dfa 100644 --- a/src/repositories/token/token.repository.ts +++ b/src/repositories/token/token.repository.ts @@ -1,8 +1,10 @@ +import { injectable } from 'inversify'; import { AppDataSource } from "../../config/data-source"; import { Token } from "../../entities"; import { ITokenRepository } from "../../interfaces/repository"; import { Repository } from "typeorm"; +@injectable() export class TokenRepository implements ITokenRepository { private readonly tokenRepository: Repository; diff --git a/src/routes/auth/user.routes.ts b/src/routes/auth/user.routes.ts index 44020e7..5d6c420 100644 --- a/src/routes/auth/user.routes.ts +++ b/src/routes/auth/user.routes.ts @@ -1,3 +1,4 @@ +import { Container } from 'inversify'; import { IamPrincipalInteractor, TokenInteractor } from '../../interactors'; import { IIamPrincipalInteractor, ITokenInteractor } from '../../interfaces/interactor'; @@ -5,20 +6,23 @@ import { Router } from 'express'; import { IIamPrincipalRepository, ITokenRepository } from '../../interfaces/repository'; import { IamPrincipalRepository, TokenRepository } from '../../repositories'; import { LoginController, RegistrationController } from '../../controllers'; +import { INTERFACE_TYPE } from '../../utils'; + +const container = new Container(); + +container.bind(INTERFACE_TYPE.TokenRepository).to(TokenRepository); +container.bind(INTERFACE_TYPE.IamPrincipalRepository).to(IamPrincipalRepository); +container.bind(INTERFACE_TYPE.TokenInteractor).to(TokenInteractor); +container.bind(INTERFACE_TYPE.IamPrincipalInteractor).to(IamPrincipalInteractor); +container.bind(INTERFACE_TYPE.LoginController).to(LoginController); +container.bind(INTERFACE_TYPE.RegistrationController).to(RegistrationController); const userRoutes = Router(); -const tokenRepository: ITokenRepository = new TokenRepository(); -const principalRepository: IIamPrincipalRepository = new IamPrincipalRepository(); -const tokenInteractor: ITokenInteractor = new TokenInteractor(tokenRepository); +const loginController = container.get(INTERFACE_TYPE.LoginController); +const registrationController = container.get(INTERFACE_TYPE.RegistrationController); -const iamPrincipalInteractor: IIamPrincipalInteractor = new IamPrincipalInteractor(principalRepository); - - -const controller = new LoginController(tokenInteractor, iamPrincipalInteractor); -const registrationController = new RegistrationController(iamPrincipalInteractor); - -userRoutes.route('/login-email').post(controller.login.bind(controller)); +userRoutes.route('/login-email').post(loginController.login.bind(loginController)); userRoutes.route('/register').post(registrationController.registerEmail.bind(registrationController)); export default userRoutes; \ No newline at end of file