From eb4064bfa968a6e14a222c49bcc373342eb6a23e Mon Sep 17 00:00:00 2001 From: mlogclub Date: Wed, 24 Jun 2026 23:02:52 +0800 Subject: [PATCH] refactor: remove seqNo from message and conversation models, update related logic --- docs | 2 +- web/lib/api/admin.ts | 3 --- web/lib/api/agent.ts | 3 --- web/lib/api/im.ts | 3 --- web/lib/im-message-merge.ts | 1 - web/lib/im-realtime-state.ts | 10 ++++------ web/lib/stores/agent-conversations.ts | 19 ++++++++----------- web/lib/stores/support-chat.ts | 19 ++++++++----------- 8 files changed, 21 insertions(+), 39 deletions(-) diff --git a/docs b/docs index c95d51e..32558c2 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit c95d51e0b92a8d42060d5d7832f2097a9428bc50 +Subproject commit 32558c28f4d21e88ba483694f388b41d17c2e893 diff --git a/web/lib/api/admin.ts b/web/lib/api/admin.ts index 1d71ec6..473ee0b 100644 --- a/web/lib/api/admin.ts +++ b/web/lib/api/admin.ts @@ -124,10 +124,8 @@ export type AdminConversation = { customerUnreadCount: number agentUnreadCount: number customerLastReadMessageId: number - customerLastReadSeqNo: number customerLastReadAt?: string agentLastReadMessageId: number - agentLastReadSeqNo: number agentLastReadAt?: string closedAt?: string closedBy: number @@ -152,7 +150,6 @@ export type AdminMessage = { messageType: string content: string payload?: string - seqNo: number sendStatus: number sentAt?: string deliveredAt?: string diff --git a/web/lib/api/agent.ts b/web/lib/api/agent.ts index fbd93ef..e2785dc 100644 --- a/web/lib/api/agent.ts +++ b/web/lib/api/agent.ts @@ -52,10 +52,8 @@ export type AgentConversation = { customerUnreadCount: number agentUnreadCount: number customerLastReadMessageId: number - customerLastReadSeqNo: number customerLastReadAt?: string agentLastReadMessageId: number - agentLastReadSeqNo: number agentLastReadAt?: string customerOnline: boolean closedAt?: string @@ -79,7 +77,6 @@ export type AgentMessage = { messageType: string content: string payload?: string - seqNo: number sendStatus: number sentAt?: string deliveredAt?: string diff --git a/web/lib/api/im.ts b/web/lib/api/im.ts index 08f214c..f431b8c 100644 --- a/web/lib/api/im.ts +++ b/web/lib/api/im.ts @@ -49,10 +49,8 @@ export type ImConversation = { customerUnreadCount: number agentUnreadCount: number customerLastReadMessageId: number - customerLastReadSeqNo: number customerLastReadAt?: string agentLastReadMessageId: number - agentLastReadSeqNo: number agentLastReadAt?: string closedAt?: string tags?: ImConversationTag[] @@ -73,7 +71,6 @@ export type ImMessage = { messageType: string content: string payload?: string - seqNo: number sendStatus: number sentAt?: string deliveredAt?: string diff --git a/web/lib/im-message-merge.ts b/web/lib/im-message-merge.ts index d5f4ff6..ca86a0d 100644 --- a/web/lib/im-message-merge.ts +++ b/web/lib/im-message-merge.ts @@ -11,7 +11,6 @@ export type MergeableImMessage = { messageType: string content: string payload?: string - seqNo: number sendStatus: number sentAt?: string deliveredAt?: string diff --git a/web/lib/im-realtime-state.ts b/web/lib/im-realtime-state.ts index 7f3c323..23807b5 100644 --- a/web/lib/im-realtime-state.ts +++ b/web/lib/im-realtime-state.ts @@ -17,7 +17,6 @@ export type RealtimeMessageCreatedPayload = { messageType?: string content?: string payload?: string - seqNo?: number sendStatus?: number sentAt?: string } @@ -50,7 +49,6 @@ export function normalizeRealtimeMessage( messageType: payload.messageType ?? "", content: payload.content ?? "", payload: payload.payload, - seqNo: payload.seqNo ?? 0, sendStatus: payload.sendStatus ?? 0, sentAt: payload.sentAt, customerRead: false, @@ -143,18 +141,18 @@ export function patchConversationListWithMessage< return changed ? next : conversations } -export function markMessagesReadToSeqNo( +export function markMessagesReadToMessageId( messages: TMessage[], - seqNo: number, + messageId: number, reader: "agent" | "customer", readAt?: string ): TMessage[] { - if (seqNo <= 0) { + if (messageId <= 0) { return messages } let changed = false const next = messages.map((message) => { - if (message.seqNo > seqNo) { + if (message.id > messageId) { return message } if (reader === "agent") { diff --git a/web/lib/stores/agent-conversations.ts b/web/lib/stores/agent-conversations.ts index ae7c6b5..df1c979 100644 --- a/web/lib/stores/agent-conversations.ts +++ b/web/lib/stores/agent-conversations.ts @@ -22,7 +22,7 @@ import { parseImMessageCursorId, } from "@/lib/im-message-merge" import { - markMessagesReadToSeqNo, + markMessagesReadToMessageId, patchConversationList, patchConversationListWithMessage, type RealtimeConversationPatch, @@ -377,7 +377,7 @@ export const useAgentConversationsStore = create((set, return { readingMessageId: 0, messages: current.messages.map((item) => { - if (item.seqNo > lastMessage.seqNo) { + if (item.id > lastMessage.id) { return item } return item.agentRead ? item : { ...item, agentRead: true } @@ -388,7 +388,6 @@ export const useAgentConversationsStore = create((set, ...item, agentUnreadCount: 0, agentLastReadMessageId: lastMessage.id, - agentLastReadSeqNo: lastMessage.seqNo, } : item ), @@ -424,18 +423,18 @@ export const useAgentConversationsStore = create((set, conversationId > 0 && state.selectedConversationId === conversationId ) { - if ((patch.agentLastReadSeqNo ?? 0) > 0) { - nextMessages = markMessagesReadToSeqNo( + if ((patch.agentLastReadMessageId ?? 0) > 0) { + nextMessages = markMessagesReadToMessageId( nextMessages, - patch.agentLastReadSeqNo ?? 0, + patch.agentLastReadMessageId ?? 0, "agent", patch.agentLastReadAt ) } - if ((patch.customerLastReadSeqNo ?? 0) > 0) { - nextMessages = markMessagesReadToSeqNo( + if ((patch.customerLastReadMessageId ?? 0) > 0) { + nextMessages = markMessagesReadToMessageId( nextMessages, - patch.customerLastReadSeqNo ?? 0, + patch.customerLastReadMessageId ?? 0, "customer", patch.customerLastReadAt ) @@ -501,7 +500,6 @@ export const useAgentConversationsStore = create((set, (current.conversations.find((item) => item.id === selectedConversationId) ?.customerUnreadCount ?? 0) + 1, agentLastReadMessageId: message.id, - agentLastReadSeqNo: message.seqNo, } ), })) @@ -558,7 +556,6 @@ export const useAgentConversationsStore = create((set, (current.conversations.find((item) => item.id === selectedConversationId) ?.customerUnreadCount ?? 0) + 1, agentLastReadMessageId: message.id, - agentLastReadSeqNo: message.seqNo, } ), })) diff --git a/web/lib/stores/support-chat.ts b/web/lib/stores/support-chat.ts index 7a3dd18..aab3e5d 100644 --- a/web/lib/stores/support-chat.ts +++ b/web/lib/stores/support-chat.ts @@ -29,7 +29,7 @@ import { parseImMessageCursorId, } from "@/lib/im-message-merge" import { - markMessagesReadToSeqNo, + markMessagesReadToMessageId, normalizeRealtimeMessage, patchConversation, patchConversationWithMessage, @@ -88,18 +88,18 @@ function markConversationReadMessages( payload: ImRealtimeEnvelope["data"] | ImRealtimeEnvelope["payload"] ) { let next = messages - if ((payload?.agentLastReadSeqNo ?? 0) > 0) { - next = markMessagesReadToSeqNo( + if ((payload?.agentLastReadMessageId ?? 0) > 0) { + next = markMessagesReadToMessageId( next, - payload?.agentLastReadSeqNo ?? 0, + payload?.agentLastReadMessageId ?? 0, "agent", payload?.agentLastReadAt ) } - if ((payload?.customerLastReadSeqNo ?? 0) > 0) { - next = markMessagesReadToSeqNo( + if ((payload?.customerLastReadMessageId ?? 0) > 0) { + next = markMessagesReadToMessageId( next, - payload?.customerLastReadSeqNo ?? 0, + payload?.customerLastReadMessageId ?? 0, "customer", payload?.customerLastReadAt ) @@ -464,7 +464,7 @@ export const useSupportChatStore = create((set, get) => { set((current) => ({ readingMessageId: 0, messages: current.messages.map((item) => { - if ((item.seqNo ?? 0) > (lastMessage.seqNo ?? 0)) { + if (item.id > lastMessage.id) { return item } return item.customerRead ? item : { ...item, customerRead: true } @@ -474,7 +474,6 @@ export const useSupportChatStore = create((set, get) => { ...current.conversation, customerUnreadCount: 0, customerLastReadMessageId: lastMessage.id, - customerLastReadSeqNo: lastMessage.seqNo, } : null, })) @@ -509,7 +508,6 @@ export const useSupportChatStore = create((set, get) => { ? { ...state.conversation, customerLastReadMessageId: nextMessage.id, - customerLastReadSeqNo: nextMessage.seqNo, customerUnreadCount: 0, lastMessageAt: nextMessage.sentAt, lastMessageSummary: summarizeIMMessage(nextMessage), @@ -575,7 +573,6 @@ export const useSupportChatStore = create((set, get) => { ? { ...state.conversation, customerLastReadMessageId: nextMessage.id, - customerLastReadSeqNo: nextMessage.seqNo, customerUnreadCount: 0, lastMessageAt: nextMessage.sentAt, lastMessageSummary: summarizeIMMessage(nextMessage),