Skip to content

Commit

Permalink
Merge pull request #141 from modern-agile-team/feature/socket
Browse files Browse the repository at this point in the history
Modify(hobiJeong/socket): Response의 형식을 통일시키기 위해서 interceptor를 추가 했습니다.
  • Loading branch information
hobiJeong authored Nov 21, 2023
2 parents ca59a15 + 0b32ab3 commit 843e49d
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/chat/controllers/chat.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,11 @@ import { JwtAccessTokenGuard } from 'src/config/guards/jwt-access-token.guard';
import { GetNotificationsResponseDto } from '../dto/get-notifications-response.dto';
import { ApiGetChatNotifications } from '../swagger-decorators/get-chat-notifications.decorator';
import { ApiCreateChatImage } from '../swagger-decorators/create-chat-image.decorators';
import { SuccessResponseInterceptor } from 'src/common/interceptors/success-response.interceptor';

@ApiTags('CHAT')
@UsePipes(ValidationPipe)
@UseInterceptors(SuccessResponseInterceptor)
@Controller('chat-room')
export class ChatController {
constructor(
Expand Down
7 changes: 4 additions & 3 deletions src/chat/events/events.gateway.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import {
import { LoginChatRoomDto } from '../dto/login-chat-room.dto';
import { WebSocketExceptionFilter } from '../exceptions/websocket-exception.filter';
import mongoose from 'mongoose';

@WebSocketGateway({ namespace: /\/ch-.+/, cors: true })
@UsePipes(ValidationPipe)
@UseFilters(WebSocketExceptionFilter)
Expand Down Expand Up @@ -85,10 +84,12 @@ export class EventsGateway
) {
if (postChatDto.hasOwnProperty('content')) {
const returnedChat = await this.chatService.createChat(postChatDto);
socket.to(postChatDto.roomId.toString()).emit('message', returnedChat);
const data = returnedChat;
socket.to(postChatDto.roomId.toString()).emit('message', { data });
} else {
const returnedChat = await this.chatService.findChatImage(postChatDto);
socket.to(postChatDto.roomId.toString()).emit('message', returnedChat);
const data = returnedChat;
socket.to(postChatDto.roomId.toString()).emit('message', { data });
}
}

Expand Down
21 changes: 21 additions & 0 deletions src/common/interceptors/success-response.interceptor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import {
Injectable,
NestInterceptor,
ExecutionContext,
CallHandler,
} from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable()
export class SuccessResponseInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const statusCode = context.getArgByIndex(1).statusCode;
return next.handle().pipe(
map((data) => ({
statusCode,
data,
})),
);
}
}
1 change: 1 addition & 0 deletions src/common/s3/s3.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export class S3Service {

return { url: fileUrl, key: filename };
} catch (error) {
console.error(error);
throw new Error('S3 업로드 오류');
}
}
Expand Down
35 changes: 35 additions & 0 deletions src/config/guards/web-socket-jwt-access-token.guard.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// import { ExecutionContext, Injectable } from '@nestjs/common';
// import { TokenService } from 'src/auth/services/token.service';

// @Injectable()
// export class WebSocketJwtAccessTokenGuard {
// constructor(private tokenService: TokenService) {}

// async canActivate(context: ExecutionContext) {
// const request = context.switchToWs().getClient().handshake;
// const accessToken = request.headers['access_token'];

// if (!accessToken) {
// return false;
// }

// const userId = await this.tokenService.decodeToken(accessToken);
// request.user = { userId };
// console.log(request.user);

// return true;
// }
// }

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Observable } from 'rxjs';

@Injectable()
export class AuthGuard implements CanActivate {
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest();
return true;
}
}

0 comments on commit 843e49d

Please sign in to comment.