MIF_E31221222/sigap-website/di/modules/users.module.ts

209 lines
7.9 KiB
TypeScript

import { createModule } from '@evyweb/ioctopus';
import { DI_SYMBOLS } from '@/di/types';
import { UsersRepository } from '@/src/infrastructure/repositories/users.repository';
import { getUsersController } from '@/src/interface-adapters/controllers/users/get-users.controller';
import { banUserController } from '@/src/interface-adapters/controllers/users/ban-user.controller';
import { banUserUseCase } from '@/src/application/use-cases/users/ban-user.use-case';
import { unbanUserUseCase } from '@/src/application/use-cases/users/unban-user.use-case';
import { getCurrentUserUseCase } from '@/src/application/use-cases/users/get-current-user.use-case';
import { getUserByIdUseCase } from '@/src/application/use-cases/users/get-user-by-id.use-case';
import { inviteUserUseCase } from '@/src/application/use-cases/users/invite-user.use-case';
import { createUserUseCase } from '@/src/application/use-cases/users/create-user.use-case';
import { unbanUserController } from '@/src/interface-adapters/controllers/users/unban-user.controller';
import { getCurrentUserController } from '@/src/interface-adapters/controllers/users/get-current-user.controller';
import { getUserByIdController } from '@/src/interface-adapters/controllers/users/get-user-by-id.controller';
import { getUserByEmailController } from '@/src/interface-adapters/controllers/users/get-user-by-email.controller';
import { getUserByUsernameController } from '@/src/interface-adapters/controllers/users/get-user-by-username.controller';
import { inviteUserController } from '@/src/interface-adapters/controllers/users/invite-user.controller';
import { createUserController } from '@/src/interface-adapters/controllers/users/create-user.controller';
import { updateUserController } from '@/src/interface-adapters/controllers/users/update-user-controller';
import { deleteUserController } from '@/src/interface-adapters/controllers/users/delete-user.controller';
import { deleteUserUseCase } from '@/src/application/use-cases/users/delete-user.use-case';
import { getUserByUsernameUseCase } from '@/src/application/use-cases/users/get-user-by-username.use-case';
import { getUserByEmailUseCase } from '@/src/application/use-cases/users/get-user-by-email.use-case';
import { updateUserUseCase } from '@/src/application/use-cases/users/update-user.use-case';
import { getUsersUseCase } from '@/src/application/use-cases/users/get-users.use-case';
export function createUsersModule() {
const usersModule = createModule();
if (process.env.NODE_ENV === 'test') {
// usersModule.bind(DI_SYMBOLS.IUsersRepository).toClass(MockUsersRepository);
usersModule
.bind(DI_SYMBOLS.IUsersRepository)
.toClass(UsersRepository, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.ICrashReporterService,
]);
} else {
usersModule
.bind(DI_SYMBOLS.IUsersRepository)
.toClass(UsersRepository, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.ICrashReporterService
]);
}
// Use cases
usersModule
.bind(DI_SYMBOLS.IBanUserUseCase)
.toHigherOrderFunction(banUserUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.IUnbanUserUseCase)
.toHigherOrderFunction(unbanUserUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.IGetCurrentUserUseCase)
.toHigherOrderFunction(getCurrentUserUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.IGetUsersUseCase)
.toHigherOrderFunction(getUsersUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.IGetUserByIdUseCase)
.toHigherOrderFunction(getUserByIdUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.IGetUserByEmailUseCase)
.toHigherOrderFunction(getUserByEmailUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.IGetUserByUserNameUseCase)
.toHigherOrderFunction(getUserByUsernameUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.IInviteUserUseCase)
.toHigherOrderFunction(inviteUserUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.ICreateUserUseCase)
.toHigherOrderFunction(createUserUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.IUpdateUserUseCase)
.toHigherOrderFunction(updateUserUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
usersModule
.bind(DI_SYMBOLS.IDeleteUserUseCase)
.toHigherOrderFunction(deleteUserUseCase, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUsersRepository
]);
// Controllers
usersModule
.bind(DI_SYMBOLS.IBanUserController)
.toHigherOrderFunction(banUserController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IBanUserUseCase
]);
usersModule
.bind(DI_SYMBOLS.IUnbanUserController)
.toHigherOrderFunction(unbanUserController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUnbanUserUseCase
]);
usersModule
.bind(DI_SYMBOLS.IGetCurrentUserController)
.toHigherOrderFunction(getCurrentUserController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IGetCurrentUserUseCase
]);
usersModule
.bind(DI_SYMBOLS.IGetUsersController)
.toHigherOrderFunction(getUsersController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IGetUsersUseCase
]);
usersModule
.bind(DI_SYMBOLS.IGetUserByIdController)
.toHigherOrderFunction(getUserByIdController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IGetUserByIdUseCase
]);
usersModule
.bind(DI_SYMBOLS.IGetUserByEmailController)
.toHigherOrderFunction(getUserByEmailController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IGetUserByEmailUseCase
]);
usersModule
.bind(DI_SYMBOLS.IGetUserByUsernameController)
.toHigherOrderFunction(getUserByUsernameController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IGetUserByUserNameUseCase
]);
usersModule
.bind(DI_SYMBOLS.IInviteUserController)
.toHigherOrderFunction(inviteUserController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IInviteUserUseCase,
DI_SYMBOLS.IGetCurrentUserUseCase
]);
usersModule
.bind(DI_SYMBOLS.ICreateUserController)
.toHigherOrderFunction(createUserController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.ICreateUserUseCase,
DI_SYMBOLS.IGetCurrentUserUseCase
]);
usersModule
.bind(DI_SYMBOLS.IUpdateUserController)
.toHigherOrderFunction(updateUserController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IUpdateUserUseCase
]);
usersModule
.bind(DI_SYMBOLS.IDeleteUserController)
.toHigherOrderFunction(deleteUserController, [
DI_SYMBOLS.IInstrumentationService,
DI_SYMBOLS.IDeleteUserUseCase
]);
return usersModule;
}