import { NextResponse } from "next/server"; import { PrismaClient } from "@prisma/client"; import { nanoid } from "nanoid"; const prisma = new PrismaClient(); export async function POST(request: Request) { try { const { creatorId, groupName, emails } = await request.json(); if (!creatorId || !groupName) { return NextResponse.json( { error: "Creator ID and group name are required" }, { status: 400 } ); } // Générer un code d'invitation unique const inviteCode = nanoid(10); // Créer le groupe const group = await prisma.group.create({ data: { name: groupName, inviteCode, creatorId: parseInt(creatorId), // Créer automatiquement le GameState gameState: { create: { status: "WAITING", }, }, // Ajouter le créateur comme membre members: { create: { userId: parseInt(creatorId), }, }, }, include: { members: true, gameState: true, }, }); // Si des emails sont fournis, créer des invitations if (emails && Array.isArray(emails)) { await prisma.invitation.createMany({ data: emails.map((email) => ({ groupId: group.id, email, expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000), // Expire dans 7 jours })), }); } // Construire l'URL d'invitation const inviteUrl = `${process.env.NEXT_PUBLIC_APP_URL}/invite/${inviteCode}`; return NextResponse.json({ success: true, group, inviteUrl, inviteCode, }); } catch (error) { console.error("Error creating invitation:", error); return NextResponse.json( { error: "Failed to create invitation" }, { status: 500 } ); } }