import { MiddlewareConsumer, Module } from "@nestjs/common"; import { ServeStaticModule } from "@nestjs/serve-static"; import { ConfigModule, ConfigService } from "@nestjs/config"; import { TypeOrmModule } from "@nestjs/typeorm"; import { join } from "path"; import { LoggerMiddleware } from "./common/loggerMiddleware"; import { AdB2cModule } from "./gateways/adb2c/adb2c.module"; import { BlobstorageModule } from "./gateways/blobstorage/blobstorage.module"; import { RegisterController } from "./features/register/register.controller"; import { RegisterService } from "./features/register/register.service"; import { RegisterModule } from "./features/register/register.module"; import { AccountsRepositoryModule } from "./repositories/accounts/accounts.repository.module"; import { UsersRepositoryModule } from "./repositories/users/users.repository.module"; import { SortCriteriaRepositoryModule } from "./repositories/sort_criteria/sort_criteria.repository.module"; import { LicensesRepositoryModule } from "./repositories/licenses/licenses.repository.module"; import { WorktypesRepositoryModule } from "./repositories/worktypes/worktypes.repository.module"; import { AccountsController } from "./features/accounts/accounts.controller"; import { AccountsService } from "./features/accounts/accounts.service"; import { AccountsModule } from "./features/accounts/accounts.module"; import { UsersController } from "./features/users/users.controller"; import { UsersService } from "./features/users/users.service"; import { UsersModule } from "./features/users/users.module"; import { DeleteModule } from "./features/delete/delete.module"; import { DeleteRepositoryModule } from "./repositories/delete/delete.repository.module"; import { DeleteController } from "./features/delete/delete.controller"; import { DeleteService } from "./features/delete/delete.service"; import { TransferModule } from "./features/transfer/transfer.module"; import { TransferController } from "./features/transfer/transfer.controller"; import { TransferService } from "./features/transfer/transfer.service"; import { VerificationController } from "./features/verification/verification.controller"; import { VerificationService } from "./features/verification/verification.service"; import { VerificationModule } from "./features/verification/verification.module"; @Module({ imports: [ ServeStaticModule.forRoot({ rootPath: join(__dirname, ".", "build"), }), ConfigModule.forRoot({ envFilePath: [".env.local", ".env"], isGlobal: true, }), AdB2cModule, AccountsModule, UsersModule, TransferModule, RegisterModule, VerificationModule, AccountsRepositoryModule, UsersRepositoryModule, SortCriteriaRepositoryModule, LicensesRepositoryModule, WorktypesRepositoryModule, BlobstorageModule, DeleteModule, DeleteRepositoryModule, TypeOrmModule.forRootAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ type: "mysql", host: configService.get("DB_HOST"), port: configService.get("DB_PORT"), username: configService.get("DB_USERNAME"), password: configService.get("DB_PASSWORD"), database: configService.get("DB_NAME"), autoLoadEntities: true, // forFeature()で登録されたEntityを自動的にロード synchronize: false, // trueにすると自動的にmigrationが行われるため注意 }), inject: [ConfigService], }), ], controllers: [ RegisterController, AccountsController, UsersController, DeleteController, TransferController, VerificationController, ], providers: [ RegisterService, AccountsService, UsersService, DeleteService, TransferService, VerificationService, ], }) export class AppModule { configure(consumer: MiddlewareConsumer) { consumer.apply(LoggerMiddleware).forRoutes(""); } }