File size: 4,311 Bytes
96ed566
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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 {}