import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler'; import { APP_INTERCEPTOR, APP_GUARD } from '@nestjs/core'; import { Module } from '@nestjs/common'; import { TagService } from '@/infra/http/services/tag.service'; import { ExternalService } from '@/infra/http/services/external.service'; import { RequestInterceptor } from '@/infra/http/interceptors/request.interceptor'; import { UploadController } from '@/infra/http/controllers/upload/upload.controller'; import { GetStatusController } from '@/infra/http/controllers/get-status/get-status.controller'; import { GetRandomImageController } from '@/infra/http/controllers/get-random-image/get-random-image.controller'; import { GetImageController } from '@/infra/http/controllers/get-image/get-image.controller'; import { FetchTagController } from '@/infra/http/controllers/fetch-tag/fetch-tag.controller'; import { FetchImagesController } from '@/infra/http/controllers/fetch-images/fetch-images.controller'; import { FetchImagesRandomController } from '@/infra/http/controllers/fetch-images-random/fetch-images-random.controller'; import { FavoriteImageController } from '@/infra/http/controllers/favorite-image/favorite-image.controller'; import { DeleteImageController } from '@/infra/http/controllers/delete-image/delete-image.controller'; import { AuthController } from '@/infra/http/controllers/auth/auth.controller'; import { EnvService } from '@/infra/env/env.service'; import { DatabaseModule } from '@/infra/database/database.module'; import { CloudinaryService } from '@/infra/cloudinary/services/cloudinary.service'; import { CloudinaryModule } from '@/infra/cloudinary/cloudinary.module'; import { AuthModule } from '@/infra/auth/auth.module'; import { RegisterRequestUseCase } from '@/domain/alcremie/application/use-cases/cases/register-request/register-request'; import { GetStatisticsUseCase } from '@/domain/alcremie/application/use-cases/cases/get-statistics/get-statistics'; import { GetRandomImageUseCase } from '@/domain/alcremie/application/use-cases/cases/get-random-image/get-random-image'; import { GetImageByIdUseCase } from '@/domain/alcremie/application/use-cases/cases/get-image-by-id/get-image-by-id'; import { FetchTagsUseCase } from '@/domain/alcremie/application/use-cases/cases/fetch-tags/fetch-tags'; import { FetchImagesUseCase } from '@/domain/alcremie/application/use-cases/cases/fetch-images/fetch-images'; import { FetchImagesRandomUseCase } from '@/domain/alcremie/application/use-cases/cases/fetch-images-random/fetch-images-random'; import { FetchImagesByTagUseCase } from '@/domain/alcremie/application/use-cases/cases/fetch-images-by-tag/fetch-images-by-tag'; import { FavoriteImageUseCase } from '@/domain/alcremie/application/use-cases/cases/favorite-image/favorite-image'; import { DeleteImageUseCase } from '@/domain/alcremie/application/use-cases/cases/delete-image/delete-image'; import { CreateTagUseCase } from '@/domain/alcremie/application/use-cases/cases/create-tag/create-tag'; import { CreateImageUseCase } from '@/domain/alcremie/application/use-cases/cases/create-image/create-image'; @Module({ imports: [ DatabaseModule, AuthModule, CloudinaryModule, ThrottlerModule.forRoot([ { ttl: 60000, limit: 60, }, { ttl: 1000, limit: 10, }, ]), ], controllers: [ AuthController, UploadController, GetImageController, FetchTagController, GetStatusController, DeleteImageController, FetchImagesController, FavoriteImageController, GetRandomImageController, FetchImagesRandomController, ], providers: [ // Services EnvService, TagService, ExternalService, CloudinaryService, // Use Cases FetchTagsUseCase, CreateTagUseCase, CreateImageUseCase, DeleteImageUseCase, FetchImagesUseCase, GetImageByIdUseCase, FavoriteImageUseCase, GetStatisticsUseCase, GetRandomImageUseCase, RegisterRequestUseCase, FetchImagesByTagUseCase, FetchImagesRandomUseCase, //interceptors RequestInterceptor, { provide: APP_INTERCEPTOR, useClass: RequestInterceptor, }, //guard { provide: APP_GUARD, useClass: ThrottlerGuard, }, ], }) export class HttpModule {}