diff --git a/app/models/league.ts b/app/models/league.ts index 8d4e9e5..50537e0 100644 --- a/app/models/league.ts +++ b/app/models/league.ts @@ -1,4 +1,4 @@ -import { eq, desc, and, union } from "drizzle-orm"; +import { eq, desc, and } from "drizzle-orm"; import { database } from "~/database/context"; import * as schema from "~/database/schema"; @@ -82,22 +82,26 @@ export async function findLeaguesWithActiveSeasonsByUserId( }; // Leagues where user has a team in the current season - const leaguesWithTeam = db + const leaguesWithTeam = await db .select(leagueFields) .from(schema.leagues) .innerJoin(schema.teams, eq(schema.teams.seasonId, schema.leagues.currentSeasonId)) .where(eq(schema.teams.ownerId, userId)); // Leagues where user is a commissioner (with or without a team) - const leaguesAsCommissioner = db + const leaguesAsCommissioner = await db .select(leagueFields) .from(schema.leagues) .innerJoin(schema.commissioners, eq(schema.commissioners.leagueId, schema.leagues.id)) .where(eq(schema.commissioners.userId, userId)); - // Union deduplicates results in case user is both a commissioner and has a team - return await union(leaguesWithTeam, leaguesAsCommissioner).orderBy( - desc(schema.leagues.createdAt) + // Deduplicate by id in case user is both a commissioner and has a team, then sort + const leagueMap = new Map(); + for (const league of [...leaguesWithTeam, ...leaguesAsCommissioner]) { + leagueMap.set(league.id, league); + } + return [...leagueMap.values()].sort( + (a, b) => b.createdAt.getTime() - a.createdAt.getTime() ); }