64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
'use server';
|
|
|
|
import { revalidatePath } from 'next/cache';
|
|
import { auth } from '@/lib/auth';
|
|
import { shareSession, removeShare, getSessionShares } from '@/services/sessions';
|
|
import type { ShareRole } from '@prisma/client';
|
|
|
|
export async function shareSessionAction(
|
|
sessionId: string,
|
|
email: string,
|
|
role: ShareRole = 'EDITOR'
|
|
) {
|
|
const session = await auth();
|
|
if (!session?.user?.id) {
|
|
return { success: false, error: 'Non authentifié' };
|
|
}
|
|
|
|
try {
|
|
const share = await shareSession(sessionId, session.user.id, email, role);
|
|
revalidatePath(`/sessions/${sessionId}`);
|
|
return { success: true, data: share };
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : 'Erreur inconnue';
|
|
if (message === 'User not found') {
|
|
return { success: false, error: 'Aucun utilisateur trouvé avec cet email' };
|
|
}
|
|
if (message === 'Cannot share session with yourself') {
|
|
return { success: false, error: 'Vous ne pouvez pas partager avec vous-même' };
|
|
}
|
|
return { success: false, error: message };
|
|
}
|
|
}
|
|
|
|
export async function removeShareAction(sessionId: string, shareUserId: string) {
|
|
const session = await auth();
|
|
if (!session?.user?.id) {
|
|
return { success: false, error: 'Non authentifié' };
|
|
}
|
|
|
|
try {
|
|
await removeShare(sessionId, session.user.id, shareUserId);
|
|
revalidatePath(`/sessions/${sessionId}`);
|
|
return { success: true };
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : 'Erreur inconnue';
|
|
return { success: false, error: message };
|
|
}
|
|
}
|
|
|
|
export async function getSharesAction(sessionId: string) {
|
|
const session = await auth();
|
|
if (!session?.user?.id) {
|
|
return { success: false, error: 'Non authentifié', data: [] };
|
|
}
|
|
|
|
try {
|
|
const shares = await getSessionShares(sessionId, session.user.id);
|
|
return { success: true, data: shares };
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : 'Erreur inconnue';
|
|
return { success: false, error: message, data: [] };
|
|
}
|
|
}
|