import { AuthorizationModule, EventsModule, UserModule } from "@cv/core"; import { AuthModule } from "@cv/auth"; import { FileStorageModule } from "@cv/file-storage"; import { BaseModule, DatabaseModule, ResendModule, TemplateModule, } from "@cv/core"; import { ApolloDriver, type ApolloDriverConfig } from "@nestjs/apollo"; import { Module } from "@nestjs/common"; import { ConfigModule, ConfigService } from "@nestjs/config"; import { GraphQLModule } from "@nestjs/graphql"; import { JwtModule } from "@nestjs/jwt"; import type { Request, Response } from "express"; import { AppConfigModule } from "@/config/config.module"; import { validate } from "@/config/env.validation"; import { FileStorageConfig } from "@/config/file-storage.config"; import { AdminModule } from "./admin/admin.module"; import { AiCallLogModule } from "./admin/ai-call-log.module"; import { AppModule as AppModuleComponent } from "./app/app.module"; import { ApplicationStatusModule } from "./application/application-status/application-status.module"; import { ApplicationModule } from "./application/application.module"; import { AuthenticationModule } from "./authentication/authentication.module"; import { CurrentUserModule } from "./current-user/current-user.module"; import { CVParserModule } from "./cv-parser/cv-parser.module"; import { CVTemplateModule } from "./cv-template/cv-template.module"; import { DataImportModule } from "./data-import/data-import.module"; import { SeedModule } from "./database/seed/seed.module"; import { EducationModule } from "./education/education.module"; import { CompanyModule } from "./job-experience/company/company.module"; import { EmploymentModule } from "./job-experience/employment/employment.module"; import { LevelModule } from "./job-experience/level/level.module"; import { RoleModule } from "./job-experience/role/role.module"; import { SkillModule } from "./job-experience/skill/skill.module"; import { OnboardingModule } from "./onboarding/onboarding.module"; import { OrganizationModule } from "./organization/organization.module"; import { ProfileModule } from "./profile/profile.module"; import { UserAiSettingsModule } from "./user-settings/user-ai-settings.module"; import { ProjectQMessengerModule } from "./messenger/messenger.module"; import { JobTypeModule } from "./vacancies/job-type/job-type.module"; import { VacancyModule } from "./vacancies/vacancy.module"; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, validate, }), JwtModule.registerAsync({ global: true, imports: [ConfigModule], useFactory: async (configService: ConfigService) => { const secret = configService.getOrThrow("JWT_SECRET"); return { secret, signOptions: { expiresIn: "24h" }, }; }, inject: [ConfigService], }), GraphQLModule.forRoot({ driver: ApolloDriver, autoSchemaFile: true, sortSchema: true, context: ({ req, res }: { req: Request; res: Response }) => ({ req, res, }), }), FileStorageModule.forRootAsync({ useClass: FileStorageConfig, }), EventsModule, AiCallLogModule, AppConfigModule, BaseModule, DatabaseModule, ResendModule, TemplateModule, AuthModule, AuthorizationModule, AuthenticationModule, CurrentUserModule, UserModule, AppModuleComponent, SkillModule, CompanyModule, RoleModule, LevelModule, EmploymentModule, OrganizationModule, JobTypeModule, VacancyModule, ApplicationStatusModule, ApplicationModule, CVParserModule, CVTemplateModule, DataImportModule, ProjectQMessengerModule, EducationModule, SeedModule, UserAiSettingsModule, OnboardingModule, ProfileModule, AdminModule, ], providers: [], }) export class AppModule {}