diff --git a/app/routes/api/draft.force-manual-pick.ts b/app/routes/api/draft.force-manual-pick.ts index 6350d8d..c0d672b 100644 --- a/app/routes/api/draft.force-manual-pick.ts +++ b/app/routes/api/draft.force-manual-pick.ts @@ -12,6 +12,8 @@ import { logCommissionerAction } from "~/models/audit-log"; import { getSocketIO, scheduleDraftRoomClosure } from "../../../server/socket"; import { logger } from "~/lib/logger"; import { runBracktHarvilleForFantasySeason } from "~/services/brackt.server"; +import { enqueuePickNotification } from "~/services/discord"; +import { notifyPickMadeOnDiscord } from "~/services/draft-discord.server"; import type { ActionFunctionArgs } from "react-router"; export async function action(args: ActionFunctionArgs) { @@ -113,7 +115,7 @@ export async function action(args: ActionFunctionArgs) { }); const totalTeams = draftSlots.length; - const { round: currentRound, pickInRound } = calculatePickInfo(pickNumber, totalTeams); + const { round: currentRound, pickInRound, rawPickInRound } = calculatePickInfo(pickNumber, totalTeams); // Validate that the submitted teamId is actually the team whose turn it is at pickNumber const expectedDraftSlot = draftSlots.find((slot) => slot.draftOrder === pickInRound); @@ -264,6 +266,27 @@ export async function action(args: ActionFunctionArgs) { const pickedTeam = draftSlots.find((slot) => slot.team.id === teamId)?.team; + // Announce on Discord before triggering the chain so pick-number order is preserved + if (pickedTeam) { + enqueuePickNotification(season.leagueId, () => + notifyPickMadeOnDiscord({ + seasonId, + leagueId: season.leagueId, + pickedTeamName: pickedTeam.name, + participantName: participant.name, + sportName: participant.sportsSeason.sport.name, + pickNumber, + nextPickNumber, + round: currentRound, + rawPickInRound, + isDraftComplete, + totalTeams, + draftSlots: draftSlots.map((s) => ({ teamId: s.teamId, draftOrder: s.draftOrder })), + db, + }).catch((err) => logger.error("Discord pick announcement failed:", err)) + ); + } + await logCommissionerAction({ seasonId, leagueId: season.leagueId,