import { getAuth } from "@clerk/react-router/server"; import { database } from "~/database/context"; import * as schema from "~/database/schema"; import { eq } from "drizzle-orm"; import { addToQueue, getTeamQueue, isParticipantInQueue } from "~/models/draft-queue"; export async function action(args: any) { const { request } = args; const auth = await getAuth(args); const userId = (auth as any).userId as string | null; if (!userId) { return Response.json({ error: "Unauthorized" }, { status: 401 }); } const formData = await request.formData(); const seasonId = formData.get("seasonId"); const teamId = formData.get("teamId"); const participantId = formData.get("participantId"); if (!seasonId || !teamId || !participantId) { return Response.json({ error: "Missing required fields" }, { status: 400 }); } const db = database(); // Verify user owns this team const team = await db.query.teams.findFirst({ where: eq(schema.teams.id, teamId as string), }); if (!team || team.ownerId !== userId) { return Response.json({ error: "Unauthorized" }, { status: 403 }); } // Check if participant is already in queue const alreadyInQueue = await isParticipantInQueue(teamId as string, participantId as string); if (alreadyInQueue) { return Response.json({ error: "Participant already in queue" }, { status: 400 }); } // Get current queue to determine position const currentQueue = await getTeamQueue(teamId as string); const queuePosition = currentQueue.length + 1; // Add to queue const queueItem = await addToQueue({ seasonId: seasonId as string, teamId: teamId as string, participantId: participantId as string, queuePosition, }); // TODO: Emit socket event for real-time update // const io = getSocketIO(); // io.to(`draft-${seasonId}`).emit("queue-updated", { teamId, queue: [...currentQueue, queueItem] }); return Response.json({ success: true, queueItem }); }