Merge pull request 'feat(#16): Implement WebSocket real-time updates' (#106) from feature/16-websocket into develop
Reviewed-on: #106
This commit was merged in pull request #106.
This commit is contained in:
@@ -135,6 +135,15 @@ export class WebSocketGateway implements OnGatewayConnection, OnGatewayDisconnec
|
|||||||
this.logger.debug(`Emitted event:deleted to ${room}`);
|
this.logger.debug(`Emitted event:deleted to ${room}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emit project:created event to workspace room
|
||||||
|
*/
|
||||||
|
emitProjectCreated(workspaceId: string, project: Project): void {
|
||||||
|
const room = this.getWorkspaceRoom(workspaceId);
|
||||||
|
this.server.to(room).emit('project:created', project);
|
||||||
|
this.logger.debug(`Emitted project:created to ${room}`);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emit project:updated event to workspace room
|
* Emit project:updated event to workspace room
|
||||||
*/
|
*/
|
||||||
@@ -144,6 +153,15 @@ export class WebSocketGateway implements OnGatewayConnection, OnGatewayDisconnec
|
|||||||
this.logger.debug(`Emitted project:updated to ${room}`);
|
this.logger.debug(`Emitted project:updated to ${room}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emit project:deleted event to workspace room
|
||||||
|
*/
|
||||||
|
emitProjectDeleted(workspaceId: string, projectId: string): void {
|
||||||
|
const room = this.getWorkspaceRoom(workspaceId);
|
||||||
|
this.server.to(room).emit('project:deleted', { id: projectId });
|
||||||
|
this.logger.debug(`Emitted project:deleted to ${room}`);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get workspace room name
|
* Get workspace room name
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -131,3 +131,6 @@ export * from "./auth.types";
|
|||||||
|
|
||||||
// Export widget types
|
// Export widget types
|
||||||
export * from "./widget.types";
|
export * from "./widget.types";
|
||||||
|
|
||||||
|
// Export WebSocket types
|
||||||
|
export * from "./websocket.types";
|
||||||
|
|||||||
87
packages/shared/src/types/websocket.types.ts
Normal file
87
packages/shared/src/types/websocket.types.ts
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/**
|
||||||
|
* WebSocket event types for real-time updates
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All supported WebSocket event names
|
||||||
|
*/
|
||||||
|
export enum WebSocketEvent {
|
||||||
|
// Task events
|
||||||
|
TASK_CREATED = 'task:created',
|
||||||
|
TASK_UPDATED = 'task:updated',
|
||||||
|
TASK_DELETED = 'task:deleted',
|
||||||
|
|
||||||
|
// Event events
|
||||||
|
EVENT_CREATED = 'event:created',
|
||||||
|
EVENT_UPDATED = 'event:updated',
|
||||||
|
EVENT_DELETED = 'event:deleted',
|
||||||
|
|
||||||
|
// Project events
|
||||||
|
PROJECT_CREATED = 'project:created',
|
||||||
|
PROJECT_UPDATED = 'project:updated',
|
||||||
|
PROJECT_DELETED = 'project:deleted',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base payload interface for all WebSocket events
|
||||||
|
*/
|
||||||
|
export interface BaseEventPayload {
|
||||||
|
id: string;
|
||||||
|
workspaceId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Task payload for WebSocket events
|
||||||
|
*/
|
||||||
|
export interface TaskEventPayload extends BaseEventPayload {
|
||||||
|
title?: string;
|
||||||
|
status?: string;
|
||||||
|
priority?: string;
|
||||||
|
assigneeId?: string | null;
|
||||||
|
projectId?: string | null;
|
||||||
|
dueDate?: string | null;
|
||||||
|
[key: string]: unknown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event (calendar) payload for WebSocket events
|
||||||
|
*/
|
||||||
|
export interface CalendarEventPayload extends BaseEventPayload {
|
||||||
|
title?: string;
|
||||||
|
startTime?: string;
|
||||||
|
endTime?: string;
|
||||||
|
allDay?: boolean;
|
||||||
|
[key: string]: unknown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project payload for WebSocket events
|
||||||
|
*/
|
||||||
|
export interface ProjectEventPayload extends BaseEventPayload {
|
||||||
|
name?: string;
|
||||||
|
status?: string;
|
||||||
|
color?: string;
|
||||||
|
[key: string]: unknown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete payload - only includes the entity ID
|
||||||
|
*/
|
||||||
|
export interface DeleteEventPayload {
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WebSocket event handler callbacks
|
||||||
|
*/
|
||||||
|
export interface WebSocketCallbacks {
|
||||||
|
onTaskCreated?: (task: TaskEventPayload) => void;
|
||||||
|
onTaskUpdated?: (task: TaskEventPayload) => void;
|
||||||
|
onTaskDeleted?: (payload: DeleteEventPayload) => void;
|
||||||
|
onEventCreated?: (event: CalendarEventPayload) => void;
|
||||||
|
onEventUpdated?: (event: CalendarEventPayload) => void;
|
||||||
|
onEventDeleted?: (payload: DeleteEventPayload) => void;
|
||||||
|
onProjectCreated?: (project: ProjectEventPayload) => void;
|
||||||
|
onProjectUpdated?: (project: ProjectEventPayload) => void;
|
||||||
|
onProjectDeleted?: (payload: DeleteEventPayload) => void;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user