|
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 } |
|
); |
|
} |
|
|
|
|
|
const inviteCode = nanoid(10); |
|
|
|
|
|
const group = await prisma.group.create({ |
|
data: { |
|
name: groupName, |
|
inviteCode, |
|
creatorId: parseInt(creatorId), |
|
|
|
gameState: { |
|
create: { |
|
status: "WAITING", |
|
}, |
|
}, |
|
|
|
members: { |
|
create: { |
|
userId: parseInt(creatorId), |
|
}, |
|
}, |
|
}, |
|
include: { |
|
members: true, |
|
gameState: true, |
|
}, |
|
}); |
|
|
|
|
|
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), |
|
})), |
|
}); |
|
} |
|
|
|
|
|
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 } |
|
); |
|
} |
|
} |
|
|