Added Chat Page

This commit is contained in:
2026-01-21 18:13:35 +01:00
parent 0ca8ce8b52
commit 3eed79ca93
37 changed files with 3966 additions and 64 deletions

View File

@@ -0,0 +1,94 @@
import { NextRequest, NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import { getCurrentUser } from '@/lib/auth';
// POST - Marquer les messages comme lus
export async function POST(
request: NextRequest,
{ params }: { params: { id: string } }
) {
try {
const user = await getCurrentUser();
if (!user) {
return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });
}
const conversation = await prisma.conversation.findUnique({
where: { id: params.id },
include: {
participants: true,
},
});
if (!conversation) {
return NextResponse.json({ error: 'Conversation non trouvée' }, { status: 404 });
}
// Vérifier que l'utilisateur est participant
const isParticipant = conversation.participants.some((p) => p.userId === user.id);
if (!isParticipant) {
return NextResponse.json({ error: 'Accès non autorisé' }, { status: 403 });
}
// Mettre à jour lastReadAt pour l'utilisateur
await prisma.conversationParticipant.updateMany({
where: {
conversationId: params.id,
userId: user.id,
},
data: {
lastReadAt: new Date(),
},
});
return NextResponse.json({ success: true });
} catch (error) {
console.error('Erreur lors de la mise à jour de la lecture:', error);
return NextResponse.json({ error: 'Erreur serveur' }, { status: 500 });
}
}
// GET - Récupérer les informations de lecture pour une conversation
export async function GET(
request: NextRequest,
{ params }: { params: { id: string } }
) {
try {
const user = await getCurrentUser();
if (!user) {
return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });
}
const conversation = await prisma.conversation.findUnique({
where: { id: params.id },
include: {
participants: {
select: {
userId: true,
lastReadAt: true,
},
},
},
});
if (!conversation) {
return NextResponse.json({ error: 'Conversation non trouvée' }, { status: 404 });
}
// Vérifier que l'utilisateur est participant
const isParticipant = conversation.participants.some((p) => p.userId === user.id);
if (!isParticipant) {
return NextResponse.json({ error: 'Accès non autorisé' }, { status: 403 });
}
return NextResponse.json({
participants: conversation.participants.map((p) => ({
userId: p.userId,
lastReadAt: p.lastReadAt,
})),
});
} catch (error) {
console.error('Erreur lors de la récupération des lectures:', error);
return NextResponse.json({ error: 'Erreur serveur' }, { status: 500 });
}
}