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:
@@ -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 {}
|
||||||
|
|||||||
Reference in New Issue
Block a user