refactor(core): introduce EventBus and refactor store infrastructure
All checks were successful
Frontend CI / build-and-push-web (push) Successful in 2m46s
Frontend CI / ota-android (push) Successful in 10m34s
Frontend CI / build-android-apk (push) Successful in 1h15m8s

- Add EventBus for decoupled event-driven communication between services
- Add EventSubscriber component for centralized event handling
- Add requestDedupe utility for shared request deduplication
- Refactor api/wsService to use eventBus instead of direct router navigation
- Extract MessageMapper.toCachedMessages for consistent message mapping
- Remove deprecated BaseManager and CacheBus classes
- Improve @mention rendering with memberMap support in segment rendering
- Update hooks to use useRef instead of useState for fetch tracking
This commit is contained in:
lafay
2026-04-12 18:14:29 +08:00
parent 4b5ce1ba21
commit 6610d2f173
28 changed files with 378 additions and 512 deletions

View File

@@ -6,6 +6,7 @@
import { messageRepository, userCacheRepository, CachedMessage } from '@/database';
import { wsClient, WSEventType } from '../../data/datasources/WSClient';
import { MessageMapper } from '@/data/mappers';
import {
Message,
Conversation,
@@ -50,7 +51,7 @@ interface ReadStateRecord {
timestamp: number;
version: number;
lastReadSeq: number;
clearTimer?: NodeJS.Timeout;
clearTimer?: ReturnType<typeof setTimeout>;
}
class ProcessMessageUseCase {
@@ -596,16 +597,9 @@ class ProcessMessageUseCase {
);
// 保存到本地
await messageRepository.saveMessagesBatch(serverMessages.map((m: any) => ({
id: m.id,
conversationId: m.conversation_id || conversationId,
senderId: m.sender_id,
seq: m.seq,
segments: m.segments || [],
createdAt: m.created_at,
status: m.status || 'normal',
isRead: false,
})));
await messageRepository.saveMessagesBatch(
MessageMapper.toCachedMessages(serverMessages, conversationId)
);
return serverMessages;
}
@@ -639,17 +633,9 @@ class ProcessMessageUseCase {
})
);
// 保存到本地
await messageRepository.saveMessagesBatch(messages.map((m: any) => ({
id: m.id,
conversationId: m.conversation_id || conversationId,
senderId: m.sender_id,
seq: m.seq,
segments: m.segments || [],
createdAt: m.created_at,
status: m.status || 'normal',
isRead: false,
})));
await messageRepository.saveMessagesBatch(
MessageMapper.toCachedMessages(response.messages, conversationId)
);
return messages;
}