feat: refactor realtime event types and payload structure for consistency

This commit is contained in:
2026-01-17 02:18:01 +00:00
parent 56b1c40642
commit 0fed50b5a9
3 changed files with 19 additions and 23 deletions
-6
View File
@@ -31,13 +31,7 @@ describe('parseRealtimeEvent', () => {
const payload: RealtimeEvent = { const payload: RealtimeEvent = {
type: 'turnCompleted', type: 'turnCompleted',
at: '2026-01-01T00:00:00.000Z', at: '2026-01-01T00:00:00.000Z',
result: {
lastTurnTime: '2026-01-01T00:00:00.000Z', lastTurnTime: '2026-01-01T00:00:00.000Z',
processedGenerals: 2,
processedTurns: 1,
durationMs: 1200,
partial: false,
},
}; };
const parsed = parseRealtimeEvent(JSON.stringify(payload)); const parsed = parseRealtimeEvent(JSON.stringify(payload));
+1 -1
View File
@@ -237,7 +237,7 @@ export const createTurnDaemonRuntime = async (options: TurnDaemonRuntimeOptions)
await publishRealtimeEvent({ await publishRealtimeEvent({
type: 'turnCompleted', type: 'turnCompleted',
at: new Date().toISOString(), at: new Date().toISOString(),
result, lastTurnTime: result.lastTurnTime,
}); });
} catch { } catch {
// 실시간 이벤트 전송 실패는 턴 처리 결과에 영향을 주지 않는다. // 실시간 이벤트 전송 실패는 턴 처리 결과에 영향을 주지 않는다.
+10 -8
View File
@@ -1,18 +1,20 @@
import type { TurnRunResult } from '../turnDaemon/types.js';
export type MessageTypeKey = 'public' | 'private' | 'national' | 'diplomacy'; export type MessageTypeKey = 'public' | 'private' | 'national' | 'diplomacy';
export type RealtimeEvent = export interface TurnCompletedEvent {
| {
type: 'turnCompleted'; type: 'turnCompleted';
at: string; at: string;
result: TurnRunResult; lastTurnTime: string;
} }
| {
export interface MessageCreatedEvent {
type: 'messageCreated'; type: 'messageCreated';
at: string; at: string;
mailbox: number; mailbox: number;
msgType: MessageTypeKey; msgType: MessageTypeKey;
messageId: number; messageId: number;
senderId: number; senderId: number;
}; }
export type RealtimeEvent =
| TurnCompletedEvent
| MessageCreatedEvent;