diff --git a/app/components/DraftGrid.tsx b/app/components/DraftGrid.tsx index d0acfd8..11b3c26 100644 --- a/app/components/DraftGrid.tsx +++ b/app/components/DraftGrid.tsx @@ -47,7 +47,8 @@ export function DraftGrid({ return ( {title &&

{title}

} -
+
+
{/* Team Headers */}
{draftSlots.map((slot) => { @@ -175,6 +176,7 @@ export function DraftGrid({ ); })}
+
); diff --git a/app/components/draft/DraftGridSection.tsx b/app/components/draft/DraftGridSection.tsx index 8e2afd7..321ee54 100644 --- a/app/components/draft/DraftGridSection.tsx +++ b/app/components/draft/DraftGridSection.tsx @@ -81,10 +81,10 @@ export function DraftGridSection({ ); return ( -
-

Draft Grid

-
-
+
+

Draft Grid

+
+
{/* Team Headers */}
{/* Spacer for round column — sticky so it covers the corner when scrolling both axes */} diff --git a/app/routes/leagues/$leagueId.settings.tsx b/app/routes/leagues/$leagueId.settings.tsx index c73a62c..cdb64c0 100644 --- a/app/routes/leagues/$leagueId.settings.tsx +++ b/app/routes/leagues/$leagueId.settings.tsx @@ -12,11 +12,13 @@ import { removeCommissionerByLeagueAndUser, } from "~/models/commissioner"; import { findCurrentSeasonWithSports, updateSeason } from "~/models/season"; -import { findTeamsBySeasonId, createManyTeams, deleteTeam, removeTeamOwner, assignTeamOwner } from "~/models/team"; +import { findTeamsBySeasonId, deleteTeam, removeTeamOwner, assignTeamOwner } from "~/models/team"; import { findAllUsers, findUserByClerkId, isUserAdminByClerkId } from "~/models/user"; import { unlinkSportFromSeason, linkMultipleSportsToSeason } from "~/models/season-sport"; import { findAllSportsSeasons } from "~/models/sports-season"; import { findDraftSlotsBySeasonId, setDraftOrder, randomizeDraftOrder } from "~/models/draft-slot"; +import { database } from "~/database/context"; +import * as schema from "~/database/schema"; import { deleteAllDraftPicks } from "~/models/draft-pick"; import { clearAllQueuesForSeason } from "~/models/draft-queue"; import { deleteSeasonTimers } from "~/models/draft-timer"; @@ -482,16 +484,34 @@ export async function action(args: Route.ActionArgs) { // Add or remove teams as needed if (newTeamCount > currentTeamCount) { - // Add new teams const teamsToAdd = Array.from( { length: newTeamCount - currentTeamCount }, (_, i) => ({ seasonId: season.id, name: `Team ${currentTeamCount + i + 1}`, - ownerId: null, + ownerId: null as null, }) ); - await createManyTeams(teamsToAdd); + + // Fetch existing slots before the transaction to determine append position + const existingSlots = await findDraftSlotsBySeasonId(season.id); + const maxOrder = existingSlots.reduce((max, s) => Math.max(max, s.draftOrder), 0); + + // Create teams and their draft slots atomically + const db = database(); + await db.transaction(async (tx) => { + const newTeams = await tx + .insert(schema.teams) + .values(teamsToAdd) + .returning(); + await tx.insert(schema.draftSlots).values( + newTeams.map((team, i) => ({ + seasonId: season.id, + teamId: team.id, + draftOrder: maxOrder + i + 1, + })) + ); + }); } else if (newTeamCount < currentTeamCount) { // Remove teams without owners (from the end) const teamsToRemove = teams