because I got bored of customising my CV for every job
1import { AuthModule, AuthorizationModule, UserModule } from "@cv/auth";
2import {
3 BaseModule,
4 DatabaseModule,
5 ResendModule,
6 TemplateModule,
7} from "@cv/system";
8import { ApolloDriver, type ApolloDriverConfig } from "@nestjs/apollo";
9import { Module } from "@nestjs/common";
10import { ConfigModule, ConfigService } from "@nestjs/config";
11import { GraphQLModule } from "@nestjs/graphql";
12import { JwtModule } from "@nestjs/jwt";
13import type { Request, Response } from "express";
14import { AppConfigModule } from "@/config/config.module";
15import { envValidationSchema } from "@/config/env.validation";
16import { AppModule as AppModuleComponent } from "./app/app.module";
17import { ApplicationModule } from "./application/application.module";
18import { AuthenticationModule } from "./authentication/authentication.module";
19import { CurrentUserModule } from "./current-user/current-user.module";
20import { CVTemplateModule } from "./cv-template/cv-template.module";
21import { SeedModule } from "./database/seed/seed.module";
22import { EducationModule } from "./education/education.module";
23import { CompanyModule } from "./job-experience/company/company.module";
24import { EmploymentModule } from "./job-experience/employment/employment.module";
25import { LevelModule } from "./job-experience/level/level.module";
26import { RoleModule } from "./job-experience/role/role.module";
27import { SkillModule } from "./job-experience/skill/skill.module";
28import { OrganizationModule } from "./organization/organization.module";
29import { VacancyModule } from "./vacancies/vacancy.module";
30
31@Module({
32 imports: [
33 ConfigModule.forRoot({
34 isGlobal: true,
35 validationSchema: envValidationSchema,
36 validationOptions: {
37 abortEarly: false, // Show all validation errors at once
38 allowUnknown: true, // Allow unknown environment variables
39 },
40 }),
41 JwtModule.registerAsync({
42 global: true,
43 imports: [ConfigModule],
44 useFactory: async (configService: ConfigService) => {
45 const secret = configService.getOrThrow<string>("JWT_SECRET");
46 return {
47 secret,
48 signOptions: { expiresIn: "24h" },
49 };
50 },
51 inject: [ConfigService],
52 }),
53 GraphQLModule.forRoot<ApolloDriverConfig>({
54 driver: ApolloDriver,
55 autoSchemaFile: true,
56 sortSchema: true,
57 context: ({ req, res }: { req: Request; res: Response }) => ({
58 req,
59 res,
60 }),
61 }),
62 AppConfigModule,
63 BaseModule,
64 DatabaseModule,
65 ResendModule,
66 TemplateModule,
67 AuthModule,
68 AuthorizationModule,
69 AuthenticationModule,
70 CurrentUserModule,
71 UserModule,
72 AppModuleComponent,
73 SkillModule,
74 CompanyModule,
75 RoleModule,
76 LevelModule,
77 EmploymentModule,
78 OrganizationModule,
79 VacancyModule,
80 ApplicationModule,
81 CVTemplateModule,
82 EducationModule,
83 SeedModule,
84 ],
85 providers: [],
86})
87export class AppModule {}