From fe972a54a141d1e0e4a5250c914d210a7552c2aa Mon Sep 17 00:00:00 2001 From: minij02 Date: Fri, 20 Mar 2026 14:48:01 +0900 Subject: [PATCH 1/3] Fix: resolve unknown argument error by updating created_at to sent_at in chat repository --- src/chat/repositories/chat.repository.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chat/repositories/chat.repository.ts b/src/chat/repositories/chat.repository.ts index 20a009d..50e1efc 100644 --- a/src/chat/repositories/chat.repository.ts +++ b/src/chat/repositories/chat.repository.ts @@ -76,7 +76,7 @@ export class ChatRepository { // 채팅방을 나갔으면 그 이후의 메세지만 조회 if (leftAt) { - whereConditions.created_at = { gt: leftAt }; + whereConditions.sent_at = { gt: leftAt }; } const [messages, totalCount] = await Promise.all([ From 05260a77b6e52aa85b8ba24e6f4a10de66922663 Mon Sep 17 00:00:00 2001 From: minij02 Date: Fri, 20 Mar 2026 15:05:39 +0900 Subject: [PATCH 2/3] Fix: resolve always-false has_more bug in chat room detail pagination --- src/chat/repositories/chat.repository.ts | 1 + src/chat/services/chat.service.ts | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/chat/repositories/chat.repository.ts b/src/chat/repositories/chat.repository.ts index 50e1efc..90816c9 100644 --- a/src/chat/repositories/chat.repository.ts +++ b/src/chat/repositories/chat.repository.ts @@ -105,6 +105,7 @@ export class ChatRepository { return { messages: actualMessages, totalCount, + hasMore: hasNextPage, }; } diff --git a/src/chat/services/chat.service.ts b/src/chat/services/chat.service.ts index 9e313a1..8b4e99d 100644 --- a/src/chat/services/chat.service.ts +++ b/src/chat/services/chat.service.ts @@ -63,10 +63,9 @@ export class ChatService { this.chatRepo.findMessagesByRoomId(roomId, cursor, limit, myId), updateReadStatus ]); - - // 페이지네이션 - const hasMore = messageInfo.messages.length > limit; - const messages = hasMore ? messageInfo.messages.slice(0, limit) : messageInfo.messages; + + const hasMore = messageInfo.hasMore; + const messages = messageInfo.messages; return ChatRoomDetailResponseDto.from({ roomDetail, From 50a3c05c547ad4e28b6dad62fddd5ecf94109f59 Mon Sep 17 00:00:00 2001 From: minij02 Date: Fri, 20 Mar 2026 15:13:54 +0900 Subject: [PATCH 3/3] Fix: update last_message_id in chat room upon new message creation --- src/chat/repositories/chat.repository.ts | 30 +++++++++++++++--------- src/chat/services/chat.service.ts | 1 - 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/chat/repositories/chat.repository.ts b/src/chat/repositories/chat.repository.ts index 90816c9..e5cdb74 100644 --- a/src/chat/repositories/chat.repository.ts +++ b/src/chat/repositories/chat.repository.ts @@ -259,14 +259,16 @@ export class ChatRepository { } // == 메세지 저장 - async saveMessage( - roomId: number, - senderId: number, - content: string, - files: { url: string; contentType: AttachmentType; name: string; size: number }[] - ) { - - return prisma.chatMessage.create({ +async saveMessage( + roomId: number, + senderId: number, + content: string, + files: { url: string; contentType: AttachmentType; name: string; size: number }[] +) { + // 트랜잭션으로 메세지 생성과 채팅방 업데이트를 묶어서 처리 + return prisma.$transaction(async (tx) => { + // 1. 메세지 생성 + const savedMessage = await tx.chatMessage.create({ data: { room_id: roomId, sender_id: senderId, @@ -291,8 +293,14 @@ export class ChatRepository { attachments: true, }, }); - } - -} + // 2. 채팅방의 마지막 메세지 ID 업데이트 + await tx.chatRoom.update({ + where: { room_id: roomId }, + data: { last_message_id: savedMessage.message_id }, + }); + return savedMessage; + }); +} +} diff --git a/src/chat/services/chat.service.ts b/src/chat/services/chat.service.ts index 8b4e99d..87d5302 100644 --- a/src/chat/services/chat.service.ts +++ b/src/chat/services/chat.service.ts @@ -87,7 +87,6 @@ export class ChatService { filter, search }); - // 페이지네이션 const hasMore = roomList.rooms.length > limit;