From 9d4931b8d9fa86464de9e5c5ad3e918c99789001 Mon Sep 17 00:00:00 2001 From: Chris Parsons Date: Sun, 12 Apr 2026 14:21:58 -0700 Subject: [PATCH] feat: add create-participant intent for inline participant creation --- ...orts-seasons.$id.events.$eventId.server.ts | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/routes/admin.sports-seasons.$id.events.$eventId.server.ts b/app/routes/admin.sports-seasons.$id.events.$eventId.server.ts index ca55891..a09187a 100644 --- a/app/routes/admin.sports-seasons.$id.events.$eventId.server.ts +++ b/app/routes/admin.sports-seasons.$id.events.$eventId.server.ts @@ -1,7 +1,7 @@ import type { Route } from "./+types/admin.sports-seasons.$id.events.$eventId"; import { logger } from "~/lib/logger"; import { findSportsSeasonById } from "~/models/sports-season"; -import { findParticipantsBySportsSeasonId } from "~/models/participant"; +import { findParticipantsBySportsSeasonId, createParticipant } from "~/models/participant"; import { getScoringEventById, completeScoringEvent, @@ -366,5 +366,32 @@ export async function action({ request, params }: Route.ActionArgs) { } } + if (intent === "create-participant") { + const name = formData.get("name"); + const sportsSeasonId = formData.get("sportsSeasonId"); + + if (typeof name !== "string" || !name.trim()) { + return { error: "Participant name is required" }; + } + + if (typeof sportsSeasonId !== "string" || !sportsSeasonId) { + return { error: "Sports season ID is required" }; + } + + try { + const participant = await createParticipant({ + name: name.trim(), + sportsSeasonId, + }); + return { + success: `Participant "${participant.name}" created.`, + newParticipant: { id: participant.id, name: participant.name }, + }; + } catch (error) { + logger.error("Error creating participant:", error); + return { error: "Failed to create participant" }; + } + } + return { error: "Invalid action" }; }