import { AuthModule, AuthorizationModule, UserModule } from "@cv/auth"; import { BaseModule, DatabaseModule, ResendModule, TemplateModule, } from "@cv/system"; 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 { envValidationSchema } from "@/config/env.validation"; import { AppModule as AppModuleComponent } from "./app/app.module"; import { ApplicationModule } from "./application/application.module"; import { AuthenticationModule } from "./authentication/authentication.module"; import { CurrentUserModule } from "./current-user/current-user.module"; import { CVTemplateModule } from "./cv-template/cv-template.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 { OrganizationModule } from "./organization/organization.module"; import { VacancyModule } from "./vacancies/vacancy.module"; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, validationSchema: envValidationSchema, validationOptions: { abortEarly: false, // Show all validation errors at once allowUnknown: true, // Allow unknown environment variables }, }), 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, }), }), AppConfigModule, BaseModule, DatabaseModule, ResendModule, TemplateModule, AuthModule, AuthorizationModule, AuthenticationModule, CurrentUserModule, UserModule, AppModuleComponent, SkillModule, CompanyModule, RoleModule, LevelModule, EmploymentModule, OrganizationModule, VacancyModule, ApplicationModule, CVTemplateModule, EducationModule, SeedModule, ], providers: [], }) export class AppModule {}