검증게시판 기능 추가
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import type { VerificationIssueStage } from './verificationBoardStages';
|
||||
|
||||
export const VERIFICATION_ISSUE_EVENT_TOPIC = '/sub/verification-issues/events';
|
||||
|
||||
export type VerificationIssueEventType = 'CREATED' | 'STAGE_CHANGED';
|
||||
|
||||
export interface VerificationIssueEventDto {
|
||||
eventType: VerificationIssueEventType;
|
||||
issueId: number;
|
||||
title: string;
|
||||
stage: VerificationIssueStage;
|
||||
previousStage?: VerificationIssueStage | null;
|
||||
updatedAt?: string;
|
||||
sourceDeviceId?: string | null;
|
||||
}
|
||||
|
||||
export interface VerificationIssueToastItem {
|
||||
id: string;
|
||||
issueId: number;
|
||||
title: string;
|
||||
stage: VerificationIssueStage;
|
||||
previousStage?: VerificationIssueStage | null;
|
||||
eventType: VerificationIssueEventType;
|
||||
}
|
||||
|
||||
export function getVerificationDeviceId(): string {
|
||||
let id = localStorage.getItem('gc_device_id');
|
||||
if (!id) {
|
||||
id = crypto.randomUUID();
|
||||
localStorage.setItem('gc_device_id', id);
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
export function parseVerificationIssueEvent(raw: string): VerificationIssueEventDto | null {
|
||||
try {
|
||||
const data = JSON.parse(raw) as VerificationIssueEventDto;
|
||||
if (data.issueId == null || !data.eventType || !data.title) return null;
|
||||
if (data.eventType !== 'CREATED' && data.eventType !== 'STAGE_CHANGED') return null;
|
||||
return data;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function shouldShowVerificationIssueEvent(event: VerificationIssueEventDto): boolean {
|
||||
const localDevice = getVerificationDeviceId();
|
||||
if (event.sourceDeviceId && event.sourceDeviceId === localDevice) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export function eventToToast(event: VerificationIssueEventDto): VerificationIssueToastItem {
|
||||
return {
|
||||
id: `${event.eventType}-${event.issueId}-${event.updatedAt ?? Date.now()}`,
|
||||
issueId: event.issueId,
|
||||
title: event.title,
|
||||
stage: event.stage,
|
||||
previousStage: event.previousStage,
|
||||
eventType: event.eventType,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user