diff --git a/main-project/src/chats/chats-controller.service.ts b/main-project/src/chats/chats-controller.service.ts index fab1c676..5dccc7dc 100644 --- a/main-project/src/chats/chats-controller.service.ts +++ b/main-project/src/chats/chats-controller.service.ts @@ -1,6 +1,11 @@ import { BadRequestException, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { ChatRoomList } from './interface/chat.interface'; +import { + ChatRoomList, + ChatUserInfo, + PreviousChatLog, +} from './interface/chat.interface'; +import { ChatLogRepository } from './repository/chat-log.repository'; import { ChatUsersRepository } from './repository/chat-users.repository'; @Injectable() @@ -8,6 +13,9 @@ export class ChatsControllerService { constructor( @InjectRepository(ChatUsersRepository) private readonly chatUsersRepository: ChatUsersRepository, + + @InjectRepository(ChatLogRepository) + private readonly chatLogRepository: ChatLogRepository, ) {} async getChatRoomListByUserNo(userNo): Promise { @@ -23,4 +31,32 @@ export class ChatsControllerService { throw err; } } + + async getChatLog({ userNo, chatRoomNo, currentChatLogNo }: PreviousChatLog) { + try { + // await this.checkRoom({userNo, chatRoomNo}) + await this.checkUserInChatRoom({ userNo, chatRoomNo }); + + const chatLog = await this.chatLogRepository.getPreviousChatLog( + chatRoomNo, + currentChatLogNo, + ); + console.log(chatLog); + } catch (err) { + throw err; + } + } + + private async checkUserInChatRoom(chatUserInfo: ChatUserInfo) { + try { + const result = await this.chatUsersRepository.checkUserInChatRoom( + chatUserInfo, + ); + if (!result) { + throw new BadRequestException(`채팅방에 없는 사용자 입니다.`); + } + } catch (err) { + throw err; + } + } } diff --git a/main-project/src/chats/chats.controller.ts b/main-project/src/chats/chats.controller.ts index b21e5524..e9d99fe7 100644 --- a/main-project/src/chats/chats.controller.ts +++ b/main-project/src/chats/chats.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, Param } from '@nestjs/common'; +import { Body, Controller, Get, Param, ParseIntPipe } from '@nestjs/common'; import { ApiOperation, ApiTags } from '@nestjs/swagger'; import { ChatsControllerService } from './chats-controller.service'; @@ -24,4 +24,21 @@ export class ChatsController { throw err; } } + + @Get('/chatRoom/:chatRoomNo/log') + async getChatLog( + @Param('chatRoomNo', ParseIntPipe) chatRoomNo: number, + @Body('userNo', ParseIntPipe) userNo: number, + @Body('currentChatLogNo', ParseIntPipe) currentChatLogNo: number, + ): Promise { + try { + await this.chatControllerService.getChatLog({ + userNo, + chatRoomNo, + currentChatLogNo, + }); + } catch (err) { + throw err; + } + } } diff --git a/main-project/src/chats/interface/chat.interface.ts b/main-project/src/chats/interface/chat.interface.ts index 57c4f64b..b9439a69 100644 --- a/main-project/src/chats/interface/chat.interface.ts +++ b/main-project/src/chats/interface/chat.interface.ts @@ -36,3 +36,16 @@ export interface ChatRoomList { roomName: string; chatRoomNo: number; } + +export interface PreviousChatLog { + userNo: number; + currentChatLogNo?: number; + chatRoomNo: number; + message?: string; + timeStamp?: Date; +} + +export interface ChatUserInfo { + userNo: number; + chatRoomNo: number; +} diff --git a/main-project/src/chats/repository/chat-list.repository.ts b/main-project/src/chats/repository/chat-list.repository.ts index 5b81d2ae..69069b93 100644 --- a/main-project/src/chats/repository/chat-list.repository.ts +++ b/main-project/src/chats/repository/chat-list.repository.ts @@ -50,6 +50,7 @@ export class ChatListRepository extends Repository { .where(`chat_list.no = :chatRoomNo`, { chatRoomNo }) .andWhere('chatUserNo.user_no = :userNo', { userNo }) .getRawOne(); + return result; } catch (err) { throw new InternalServerErrorException( diff --git a/main-project/src/chats/repository/chat-log.repository.ts b/main-project/src/chats/repository/chat-log.repository.ts index 7e548850..f483035b 100644 --- a/main-project/src/chats/repository/chat-log.repository.ts +++ b/main-project/src/chats/repository/chat-log.repository.ts @@ -20,4 +20,22 @@ export class ChatLogRepository extends Repository { ); } } + + async getPreviousChatLog(chatRoomNo, currentChatLogNo): Promise { + try { + const previousChatLog = await this.createQueryBuilder('chat_log') + .select(['chat_log.*']) + .where('chat_log.chat_room_no = :chatRoomNo', { chatRoomNo }) + .andWhere(`chat_log.no < :currentChatLogNo`, { currentChatLogNo }) + .orderBy('no', 'DESC') + .limit(30) + .getRawMany(); + + return previousChatLog; + } catch (err) { + throw new InternalServerErrorException( + `${err}: 채팅로그 불러오기(getPreviousChatLog): 알 수 없는 서버 에러입니다.`, + ); + } + } } diff --git a/main-project/src/chats/repository/chat-users.repository.ts b/main-project/src/chats/repository/chat-users.repository.ts index 779d09ad..b204a6d1 100644 --- a/main-project/src/chats/repository/chat-users.repository.ts +++ b/main-project/src/chats/repository/chat-users.repository.ts @@ -1,7 +1,7 @@ import { InternalServerErrorException } from '@nestjs/common'; import { EntityRepository, InsertResult, Repository } from 'typeorm'; import { ChatUsers } from '../entity/chat-users.entity'; -import { ChatRoomList } from '../interface/chat.interface'; +import { ChatRoomList, ChatUserInfo } from '../interface/chat.interface'; @EntityRepository(ChatUsers) export class ChatUsersRepository extends Repository { @@ -38,4 +38,22 @@ export class ChatUsersRepository extends Repository { ); } } + + async checkUserInChatRoom(chatUserInfo: ChatUserInfo): Promise { + try { + const user = await this.createQueryBuilder('chat_users') + .select([ + 'chat_users.user_no AS userNo', + 'chat_users.chat_room_no AS chatRoomNo', + ]) + .where('user_no = :userNo AND chat_room_no = :chatRoomNo', chatUserInfo) + .getRawOne(); + + return user; + } catch (err) { + throw new InternalServerErrorException( + `${err}: 유저 정보 조회(checkUserInChatRoom): 알 수 없는 서버 에러입니다`, + ); + } + } }