From d5775a821e3650178aa31cec173884ecb32ca8c7 Mon Sep 17 00:00:00 2001 From: Mathis HERRIOT <197931332+0x485254@users.noreply.github.com> Date: Thu, 8 Jan 2026 15:27:36 +0100 Subject: [PATCH] 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. --- backend/src/app.module.ts | 55 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 97c1e92..9d14fa4 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,23 +1,74 @@ 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 { 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 { DatabaseModule } from "./database/database.module"; +import { FavoritesModule } from "./favorites/favorites.module"; +import { HealthController } from "./health.controller"; 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 { SessionsModule } from "./sessions/sessions.module"; +import { TagsModule } from "./tags/tags.module"; +import { UsersModule } from "./users/users.module"; @Module({ imports: [ DatabaseModule, CryptoModule, + CommonModule, S3Module, 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({ 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], }) export class AppModule {}