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 {}