feat: enhance session management with sharing capabilities, real-time event synchronization, and UI updates for session display

This commit is contained in:
Julien Froidefond
2025-11-27 13:34:03 +01:00
parent 9ce2b62bc6
commit 10ff15392f
15 changed files with 1127 additions and 84 deletions

View File

@@ -20,6 +20,14 @@ export async function createSwotItem(
try {
const item = await sessionsService.createSwotItem(sessionId, data);
// Emit event for real-time sync
await sessionsService.createSessionEvent(sessionId, session.user.id, 'ITEM_CREATED', {
itemId: item.id,
content: item.content,
category: item.category,
});
revalidatePath(`/sessions/${sessionId}`);
return { success: true, data: item };
} catch (error) {
@@ -40,6 +48,13 @@ export async function updateSwotItem(
try {
const item = await sessionsService.updateSwotItem(itemId, data);
// Emit event for real-time sync
await sessionsService.createSessionEvent(sessionId, session.user.id, 'ITEM_UPDATED', {
itemId: item.id,
...data,
});
revalidatePath(`/sessions/${sessionId}`);
return { success: true, data: item };
} catch (error) {
@@ -56,6 +71,12 @@ export async function deleteSwotItem(itemId: string, sessionId: string) {
try {
await sessionsService.deleteSwotItem(itemId);
// Emit event for real-time sync
await sessionsService.createSessionEvent(sessionId, session.user.id, 'ITEM_DELETED', {
itemId,
});
revalidatePath(`/sessions/${sessionId}`);
return { success: true };
} catch (error) {
@@ -72,6 +93,15 @@ export async function duplicateSwotItem(itemId: string, sessionId: string) {
try {
const item = await sessionsService.duplicateSwotItem(itemId);
// Emit event for real-time sync
await sessionsService.createSessionEvent(sessionId, session.user.id, 'ITEM_CREATED', {
itemId: item.id,
content: item.content,
category: item.category,
duplicatedFrom: itemId,
});
revalidatePath(`/sessions/${sessionId}`);
return { success: true, data: item };
} catch (error) {
@@ -93,6 +123,14 @@ export async function moveSwotItem(
try {
const item = await sessionsService.moveSwotItem(itemId, newCategory, newOrder);
// Emit event for real-time sync
await sessionsService.createSessionEvent(sessionId, session.user.id, 'ITEM_MOVED', {
itemId: item.id,
newCategory,
newOrder,
});
revalidatePath(`/sessions/${sessionId}`);
return { success: true, data: item };
} catch (error) {
@@ -121,6 +159,14 @@ export async function createAction(
try {
const action = await sessionsService.createAction(sessionId, data);
// Emit event for real-time sync
await sessionsService.createSessionEvent(sessionId, session.user.id, 'ACTION_CREATED', {
actionId: action.id,
title: action.title,
linkedItemIds: data.linkedItemIds,
});
revalidatePath(`/sessions/${sessionId}`);
return { success: true, data: action };
} catch (error) {
@@ -146,6 +192,13 @@ export async function updateAction(
try {
const action = await sessionsService.updateAction(actionId, data);
// Emit event for real-time sync
await sessionsService.createSessionEvent(sessionId, session.user.id, 'ACTION_UPDATED', {
actionId: action.id,
...data,
});
revalidatePath(`/sessions/${sessionId}`);
return { success: true, data: action };
} catch (error) {
@@ -162,6 +215,12 @@ export async function deleteAction(actionId: string, sessionId: string) {
try {
await sessionsService.deleteAction(actionId);
// Emit event for real-time sync
await sessionsService.createSessionEvent(sessionId, session.user.id, 'ACTION_DELETED', {
actionId,
});
revalidatePath(`/sessions/${sessionId}`);
return { success: true };
} catch (error) {