import { Module } from '@nestjs/common'; import { UsersController } from './presentation/controllers/users.controller'; import { PrismaService } from '../../shared/prisma.service'; import { PrismaUserRepository } from './infrastructure/repositories/prisma-user.repository'; import { IUser } from './domain/repositories/user.interface'; import { EventDispatcher } from '../../core/events/event-dispatcher'; import { JwtAuthGuard } from '../../core/auth/guards/jwt-auth.guard'; import { JwtModule } from '@nestjs/jwt'; import { CreateUserHandler } from './application/handlers/user/create-user.handler'; import { GetUserHandler as FindUserHandler } from './application/handlers/user/get-user.handler'; import { DeleteUserHandler } from './application/handlers/user/delete-user.handler'; import { GetUsersHandler as FindUsersHandler } from './application/handlers/user/get-users.handler'; import { UpdateUserHandler } from './application/handlers/user/update-user.handler'; import { PermissionGuard } from '../authorization/presentation/guards/permission.guard'; import { Reflector } from '@nestjs/core'; import { LoginHandler } from './application/handlers/login.handler'; import { AuthController } from './presentation/controllers/auth.controller'; import { TokenHandler } from './application/handlers/token.handler'; import { PrismaServiceAccountRepository } from './infrastructure/repositories/prisma-service-account.repository'; import { ServiceAccountRepository } from './domain/repositories/service-account.repository.interface'; @Module({ imports: [ JwtModule.register({ secret: process.env.JWT_SECRET, signOptions: { expiresIn: '1d', }, }), ], controllers: [UsersController, AuthController], providers: [ //#region User CreateUserHandler, FindUserHandler, FindUsersHandler, UpdateUserHandler, DeleteUserHandler, LoginHandler, TokenHandler, //#endregion JwtAuthGuard, PermissionGuard, Reflector, PrismaService, PrismaUserRepository, PrismaServiceAccountRepository, { provide: IUser, useClass: PrismaUserRepository, }, { provide: ServiceAccountRepository, useClass: PrismaServiceAccountRepository, }, { provide: 'EVENT_DISPATCHER', useValue: new EventDispatcher(), }, ], }) export class IdentityModule {}