import { data, type ActionFunctionArgs } from "react-router"; import { getAuth } from "@clerk/react-router/server"; import { addToQueue, removeFromQueue, reorderQueueWithSeason, findTeamById, getTeamQueue, } from "~/models"; export async function action(args: ActionFunctionArgs) { const { userId } = await getAuth(args); if (!userId) { return data({ error: "Unauthorized" }, { status: 401 }); } const { request } = args; const formData = await request.formData(); const actionType = formData.get("action"); const teamId = formData.get("teamId"); if (!teamId || typeof teamId !== "string") { return data({ error: "Team ID is required" }, { status: 400 }); } // Verify user owns this team const team = await findTeamById(teamId); if (!team || team.ownerId !== userId) { return data({ error: "You do not own this team" }, { status: 403 }); } try { switch (actionType) { case "add-to-queue": { const participantId = formData.get("participantId"); const seasonId = formData.get("seasonId"); if (!participantId || typeof participantId !== "string") { return data({ error: "Participant ID is required" }, { status: 400 }); } if (!seasonId || typeof seasonId !== "string") { return data({ error: "Season ID is required" }, { status: 400 }); } // Get current queue to determine position const currentQueue = await getTeamQueue(teamId); const queuePosition = currentQueue.length + 1; await addToQueue({ seasonId, teamId, participantId, queuePosition, }); return data({ success: true }); } case "remove-from-queue": { const queueItemId = formData.get("queueItemId"); if (!queueItemId || typeof queueItemId !== "string") { return data({ error: "Queue item ID is required" }, { status: 400 }); } await removeFromQueue(queueItemId); return data({ success: true }); } case "reorder-queue": { const participantIds = formData.get("participantIds"); const seasonId = formData.get("seasonId"); if (!participantIds || typeof participantIds !== "string") { return data({ error: "Participant IDs are required" }, { status: 400 }); } if (!seasonId || typeof seasonId !== "string") { return data({ error: "Season ID is required" }, { status: 400 }); } const idsArray = JSON.parse(participantIds); await reorderQueueWithSeason(seasonId, teamId, idsArray); return data({ success: true }); } default: return data({ error: "Invalid action" }, { status: 400 }); } } catch (error) { console.error("Draft action error:", error); return data({ error: "Failed to perform action" }, { status: 500 }); } }