feat: integrate multiple modules, caching, throttling, and scheduling into AppModule

Enhanced AppModule by adding support for caching (Redis), scheduling, throttling, and multiple feature modules including AuthModule, CategoriesModule, ContentsModule, FavoritesModule, ReportsModule, TagsModule, and more. Improved environment validation and health check controller setup.
This commit is contained in:
Mathis HERRIOT
2026-01-08 15:27:36 +01:00
parent add7cab7df
commit d5775a821e

View File

@@ -1,23 +1,74 @@
import { Module } from "@nestjs/common"; import { Module } from "@nestjs/common";
import { ConfigModule } from "@nestjs/config"; import { CacheModule } from "@nestjs/cache-manager";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { redisStore } from "cache-manager-redis-yet";
import { ScheduleModule } from "@nestjs/schedule";
import { ThrottlerModule } from "@nestjs/throttler";
import { ApiKeysModule } from "./api-keys/api-keys.module";
import { AppController } from "./app.controller"; import { AppController } from "./app.controller";
import { AppService } from "./app.service"; import { AppService } from "./app.service";
import { AuthModule } from "./auth/auth.module";
import { CategoriesModule } from "./categories/categories.module";
import { CommonModule } from "./common/common.module";
import { validateEnv } from "./config/env.schema";
import { ContentsModule } from "./contents/contents.module";
import { CryptoModule } from "./crypto/crypto.module"; import { CryptoModule } from "./crypto/crypto.module";
import { DatabaseModule } from "./database/database.module"; import { DatabaseModule } from "./database/database.module";
import { FavoritesModule } from "./favorites/favorites.module";
import { HealthController } from "./health.controller";
import { MailModule } from "./mail/mail.module"; import { MailModule } from "./mail/mail.module";
import { MediaModule } from "./media/media.module";
import { ReportsModule } from "./reports/reports.module";
import { S3Module } from "./s3/s3.module"; import { S3Module } from "./s3/s3.module";
import { SessionsModule } from "./sessions/sessions.module";
import { TagsModule } from "./tags/tags.module";
import { UsersModule } from "./users/users.module";
@Module({ @Module({
imports: [ imports: [
DatabaseModule, DatabaseModule,
CryptoModule, CryptoModule,
CommonModule,
S3Module, S3Module,
MailModule, MailModule,
UsersModule,
AuthModule,
CategoriesModule,
ContentsModule,
FavoritesModule,
TagsModule,
MediaModule,
SessionsModule,
ReportsModule,
ApiKeysModule,
ScheduleModule.forRoot(),
ThrottlerModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (config: ConfigService) => [
{
ttl: 60000,
limit: config.get("NODE_ENV") === "production" ? 100 : 1000,
},
],
}),
ConfigModule.forRoot({ ConfigModule.forRoot({
isGlobal: true, isGlobal: true,
validate: validateEnv,
}),
CacheModule.registerAsync({
isGlobal: true,
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (config: ConfigService) => ({
store: await redisStore({
url: `redis://${config.get("REDIS_HOST")}:${config.get("REDIS_PORT")}`,
}),
ttl: 600, // 10 minutes
}),
}), }),
], ],
controllers: [AppController], controllers: [AppController, HealthController],
providers: [AppService], providers: [AppService],
}) })
export class AppModule {} export class AppModule {}