feat(system): implement graceful shutdown and expand websocket events

Improve system reliability and real-time capabilities by implementing a robust lifecycle management system and adding new broadcast events for attachments and voice recordings.

- Implement asynchronous graceful shutdown in backend to close HTTP, WebSocket, Redis, and database connections.
- Add new WebSocket broadcast events: `attachment_created`, `voice_recording_started`, `voice_recording_stopped`, `voice_recording_uploaded`, and `analysis_queue_status`.
- Refactor media status handling to use boolean `playing` state instead of string-based status.
- Centralize `PageResult` and `VoiceRecording` types to improve consistency between frontend and backend.
- Update frontend API client to include `listRecordings` and handle new WebSocket event types.
- Fix type mismatches in voice command handling and media status reporting.
This commit is contained in:
MythEclipse
2026-06-09 16:56:44 +07:00
parent 3a7b005d95
commit 7108f6bb47
14 changed files with 161 additions and 90 deletions
+2 -2
View File
@@ -260,7 +260,7 @@ export async function writeRedisStatus(
// Lifecycle
// ---------------------------------------------------------------------------
export async function startRedisBridge(): Promise<void> {
export async function startCommandBridge(): Promise<void> {
if (!ensureRedisConfig()) {
logger.info("Redis not configured, skipping command channel bridge");
return;
@@ -272,7 +272,7 @@ export async function startRedisBridge(): Promise<void> {
logger.info("Redis command channel initialized");
}
export async function stopRedisBridge(): Promise<void> {
export async function stopCommandBridge(): Promise<void> {
if (publisherClient) {
await publisherClient.quit();
publisherClient = null;