diff --git a/app/models/draft-pick.ts b/app/models/draft-pick.ts index 1a9eb27..4f62266 100644 --- a/app/models/draft-pick.ts +++ b/app/models/draft-pick.ts @@ -75,8 +75,8 @@ export async function deleteAllDraftPicks(seasonId: string) { * Get all draft picks for a season with participant and sport information * Used for draft eligibility calculations */ -export async function getDraftPicksWithSports(seasonId: string) { - const db = database(); +export async function getDraftPicksWithSports(seasonId: string, providedDb?: ReturnType) { + const db = providedDb || database(); const results = await db .select({ id: schema.draftPicks.id, @@ -119,8 +119,8 @@ export async function getDraftPicksWithSports(seasonId: string) { /** * Get team's draft picks with participant and sport information */ -export async function getTeamDraftPicksWithSports(teamId: string, seasonId: string) { - const db = database(); +export async function getTeamDraftPicksWithSports(teamId: string, seasonId: string, providedDb?: ReturnType) { + const db = providedDb || database(); const results = await db .select({ id: schema.draftPicks.id, diff --git a/app/models/draft-queue.ts b/app/models/draft-queue.ts index 1055c54..6d947c7 100644 --- a/app/models/draft-queue.ts +++ b/app/models/draft-queue.ts @@ -18,8 +18,8 @@ export async function removeFromQueue(queueId: string) { await db.delete(schema.draftQueue).where(eq(schema.draftQueue.id, queueId)); } -export async function getTeamQueue(teamId: string) { - const db = database(); +export async function getTeamQueue(teamId: string, providedDb?: ReturnType) { + const db = providedDb || database(); return await db .select() .from(schema.draftQueue) diff --git a/app/models/draft-utils.ts b/app/models/draft-utils.ts index fa48671..402b461 100644 --- a/app/models/draft-utils.ts +++ b/app/models/draft-utils.ts @@ -76,15 +76,16 @@ export async function autoPickForTeam( seasonId: string, teamId: string, draftRounds: number, - allTeamIds: string[] + allTeamIds: string[], + providedDb?: ReturnType ) { - const db = database(); + const db = providedDb || database(); // Calculate eligibility for this team - const allPicks = await getDraftPicksWithSports(seasonId); - const teamPicks = await getTeamDraftPicksWithSports(teamId, seasonId); - const allParticipants = await getParticipantsForSeasonWithSports(seasonId); - const seasonSports = await getSeasonSportsSimple(seasonId); + const allPicks = await getDraftPicksWithSports(seasonId, db); + const teamPicks = await getTeamDraftPicksWithSports(teamId, seasonId, db); + const allParticipants = await getParticipantsForSeasonWithSports(seasonId, db); + const seasonSports = await getSeasonSportsSimple(seasonId, db); const allTeams = allTeamIds.map((id) => ({ id })); const eligibility = calculateDraftEligibility( @@ -103,7 +104,7 @@ export async function autoPickForTeam( ); // Check queue first - filter by eligible sports - const queue = await getTeamQueue(teamId); + const queue = await getTeamQueue(teamId, db); if (queue.length > 0) { console.log(`[AutoPick] Team ${teamId} has ${queue.length} items in queue`); @@ -182,7 +183,7 @@ export async function autoPickForTeam( // Queue is empty or all queued players drafted/ineligible // Pick highest EV available from eligible sports console.log(`[AutoPick] No valid queue items, selecting highest EV from eligible sports`); - return await getTopAvailableParticipant(seasonId, eligibility.eligibleSportIds); + return await getTopAvailableParticipant(seasonId, eligibility.eligibleSportIds, db); } /** @@ -191,9 +192,10 @@ export async function autoPickForTeam( */ export async function getTopAvailableParticipant( seasonId: string, - eligibleSportIds?: Set + eligibleSportIds?: Set, + providedDb?: ReturnType ) { - const db = database(); + const db = providedDb || database(); // Get all drafted participant IDs const draftedPicks = await db @@ -443,7 +445,8 @@ export async function executeAutoPick(params: { seasonId, teamId, season.draftRounds, - allTeamIds + allTeamIds, + db ); if (!participantId) { diff --git a/app/models/participant.ts b/app/models/participant.ts index e64e91a..b1a41c9 100644 --- a/app/models/participant.ts +++ b/app/models/participant.ts @@ -105,8 +105,8 @@ export async function copyParticipantsFromSeason( * Get all participants for a season with sport information * Used for draft eligibility calculations */ -export async function getParticipantsForSeasonWithSports(seasonId: string) { - const db = database(); +export async function getParticipantsForSeasonWithSports(seasonId: string, providedDb?: ReturnType) { + const db = providedDb || database(); // First get all sports seasons for this season const seasonSports = await db.query.seasonSports.findMany({ diff --git a/app/models/season-sport.ts b/app/models/season-sport.ts index b9f3f25..77dd1bf 100644 --- a/app/models/season-sport.ts +++ b/app/models/season-sport.ts @@ -110,8 +110,8 @@ export async function applySportsFromTemplate( /** * Get sports for a season in a simple format for eligibility calculations */ -export async function getSeasonSportsSimple(seasonId: string) { - const db = database(); +export async function getSeasonSportsSimple(seasonId: string, providedDb?: ReturnType) { + const db = providedDb || database(); const seasonSports = await db.query.seasonSports.findMany({ where: eq(schema.seasonSports.seasonId, seasonId), diff --git a/server/timer.ts b/server/timer.ts index 95e2739..1f91b3f 100644 --- a/server/timer.ts +++ b/server/timer.ts @@ -118,9 +118,9 @@ async function updateDraftTimers(): Promise { // If timer is at 0 or below, check autodraft settings and trigger auto-pick if (timer.timeRemaining <= 0) { console.log( - `[Timer] Timer at 0 for team ${currentTeamId} in season ${season.id}, checking autodraft settings` + `[Timer] ⚠️ Timer at ${timer.timeRemaining} for team ${currentTeamId} in season ${season.id} (pick ${currentPickNumber})` ); - + // Check if team has autodraft enabled const autodraftSettings = await db.query.autodraftSettings.findFirst({ where: and( @@ -130,15 +130,12 @@ async function updateDraftTimers(): Promise { }); const shouldAutodraft = autodraftSettings?.isEnabled ?? false; - - if (shouldAutodraft) { - console.log(`[Timer] Autodraft enabled for team ${currentTeamId}, triggering auto-pick`); - await triggerAutoPick(season.id, currentTeamId, currentPickNumber, autodraftSettings); - } else { - console.log(`[Timer] Autodraft disabled for team ${currentTeamId}, triggering regular auto-pick`); - await triggerAutoPick(season.id, currentTeamId, currentPickNumber, null); - } - + console.log( + `[Timer] Team ${currentTeamId} autodraft: ${shouldAutodraft ? 'ENABLED' : 'DISABLED'}, triggering forced auto-pick` + ); + + await triggerAutoPick(season.id, currentTeamId, currentPickNumber, shouldAutodraft ? autodraftSettings : null); + continue; // Skip to next draft after triggering pick } @@ -171,7 +168,7 @@ async function updateDraftTimers(): Promise { console.log( `[Timer] Timer expired for team ${currentTeamId} in season ${season.id}, checking autodraft settings` ); - + // Check if team has autodraft enabled const autodraftSettings = await db.query.autodraftSettings.findFirst({ where: and( @@ -180,6 +177,11 @@ async function updateDraftTimers(): Promise { ), }); + const shouldAutodraft = autodraftSettings?.isEnabled ?? false; + console.log( + `[Timer] Autodraft ${shouldAutodraft ? 'enabled' : 'disabled'} for team ${currentTeamId}, triggering auto-pick` + ); + await triggerAutoPick(season.id, currentTeamId, currentPickNumber, autodraftSettings || null); } }