Skip to content

Commit

Permalink
feat(be): add response timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
harisato committed Jul 17, 2023
1 parent 4433263 commit 3fcf9bd
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 4 deletions.
2 changes: 1 addition & 1 deletion hasura/metadata/rest_endpoints.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@
collection_name: allowed-queries
query_name: Public - Get manga list by list id
methods:
- GET
- POST
name: Public - Get manga list by list id
url: public/list_manga
- comment: ""
Expand Down
4 changes: 3 additions & 1 deletion src/chapter/chapter.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { ApiBearerAuth, ApiConsumes } from '@nestjs/swagger';
import { CreateChapterRequestDto } from './dto/create-chapter-request.dto';
import { ChapterService } from './chapter.service';
import { AuthGuard } from '../auth/auth.guard';
import { AuthUserInterceptor } from '../interceptors/auth-user-interceptor.service';
import { AuthUserInterceptor } from '../interceptors/auth-user.interceptor';
import {
UpdateChapterParamDto,
UpdateChapterRequestDto,
Expand All @@ -23,6 +23,7 @@ import { IncreaseChapterViewParamDto } from './dto/increase-chapter-view-request
import { Role } from '../auth/role.enum';
import { Roles } from '../auth/roles.decorator';
import { RolesGuard } from '../auth/role.guard';
import { SetRequestTimeout } from '../decorators/set-timeout.decorator';

@Controller('chapter')
export class ChapterController {
Expand All @@ -33,6 +34,7 @@ export class ChapterController {
@Post()
@ApiConsumes('multipart/form-data')
@UseInterceptors(AuthUserInterceptor, AnyFilesInterceptor())
@SetRequestTimeout()
@Roles(Role.Admin)
create(
@Body() data: CreateChapterRequestDto,
Expand Down
11 changes: 11 additions & 0 deletions src/decorators/set-timeout.decorator.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { applyDecorators, SetMetadata, UseInterceptors } from '@nestjs/common';
import { TimeoutInterceptor } from '../interceptors/timeout.interceptor';

const SetTimeout = (timeout: number) => SetMetadata('request-timeout', timeout);

export function SetRequestTimeout(timeout = 600000) {
return applyDecorators(
SetTimeout(timeout),
UseInterceptors(TimeoutInterceptor),
);
}
File renamed without changes.
23 changes: 23 additions & 0 deletions src/interceptors/timeout.interceptor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import {
Injectable,
NestInterceptor,
ExecutionContext,
CallHandler,
} from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { Observable } from 'rxjs';

@Injectable()
export class TimeoutInterceptor implements NestInterceptor {
constructor(private readonly reflector: Reflector) {}

intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const response = context.switchToHttp().getResponse();
const timeout =
this.reflector.get<number>('request-timeout', context.getHandler()) ||
60000;
response.setTimeout(timeout);

return next.handle();
}
}
2 changes: 1 addition & 1 deletion src/manga/manga.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
import { MangaService } from './manga.service';
import { AuthGuard } from '../auth/auth.guard';
import { ApiBearerAuth, ApiConsumes } from '@nestjs/swagger';
import { AuthUserInterceptor } from '../interceptors/auth-user-interceptor.service';
import { AuthUserInterceptor } from '../interceptors/auth-user.interceptor';
import { AnyFilesInterceptor } from '@nestjs/platform-express';
import { CreateMangaRequestDto } from './dto/create-manga-request.dto';
import {
Expand Down
2 changes: 1 addition & 1 deletion src/user/user.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
import { ApiBearerAuth, ApiConsumes } from '@nestjs/swagger';
import { UserService } from './user.service';
import { AuthGuard } from '../auth/auth.guard';
import { AuthUserInterceptor } from '../interceptors/auth-user-interceptor.service';
import { AuthUserInterceptor } from '../interceptors/auth-user.interceptor';
import { DeleteUserRequest } from './dto/delete-user-request.dto';
import { Roles } from '../auth/roles.decorator';
import { Role } from '../auth/role.enum';
Expand Down

0 comments on commit 3fcf9bd

Please sign in to comment.