File size: 1,854 Bytes
811126d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 }
    );
  }
}