This commit is contained in:
Swapnil
2024-12-22 21:56:35 +05:30
parent 919989de52
commit 7bbabd3d0e
6 changed files with 40 additions and 16 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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
}

View File

@@ -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<Token>;

View File

@@ -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<ITokenRepository>(INTERFACE_TYPE.TokenRepository).to(TokenRepository);
container.bind<IIamPrincipalRepository>(INTERFACE_TYPE.IamPrincipalRepository).to(IamPrincipalRepository);
container.bind<ITokenInteractor>(INTERFACE_TYPE.TokenInteractor).to(TokenInteractor);
container.bind<IIamPrincipalInteractor>(INTERFACE_TYPE.IamPrincipalInteractor).to(IamPrincipalInteractor);
container.bind<LoginController>(INTERFACE_TYPE.LoginController).to(LoginController);
container.bind<RegistrationController>(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<LoginController>(INTERFACE_TYPE.LoginController);
const registrationController = container.get<RegistrationController>(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;