diff --git a/app/features/calendar/loaders/events.server.ts b/app/features/calendar/loaders/events.server.ts index 549828508..8da255ef3 100644 --- a/app/features/calendar/loaders/events.server.ts +++ b/app/features/calendar/loaders/events.server.ts @@ -12,14 +12,11 @@ export type EventsLoaderData = typeof loader; export const loader = async () => { const user = requireUser(); - // xxx: should probably only load SavedTournamentRepository.upcoming (it can call to ShowcaseTournaments.upcomingTournaments as implementation detail) - const [tournamentsData, scrimsData, savedTournamentIds, upcomingTournaments] = - await Promise.all([ - ShowcaseTournaments.categorizedTournamentsByUserId(user.id), - ScrimPostRepository.findUserScrims(user.id), - SavedTournamentRepository.findTournamentIdsByUserId(user.id), - ShowcaseTournaments.upcomingTournaments(), - ]); + const [tournamentsData, scrimsData, savedTournaments] = await Promise.all([ + ShowcaseTournaments.categorizedTournamentsByUserId(user.id), + ScrimPostRepository.findUserScrims(user.id), + SavedTournamentRepository.upcoming(user.id), + ]); const registered = tournamentsData.participatingFor .map(tournamentToSidebarEvent) @@ -33,9 +30,7 @@ export const loader = async () => { .map(scrimToSidebarEvent) .sort((a, b) => a.startTime - b.startTime); - const savedTournamentIdSet = new Set(savedTournamentIds); - const saved = upcomingTournaments - .filter((t) => savedTournamentIdSet.has(t.id)) + const saved = savedTournaments .map(tournamentToSidebarEvent) .sort((a, b) => a.startTime - b.startTime); diff --git a/app/features/sidebar/core/sidebar.server.ts b/app/features/sidebar/core/sidebar.server.ts index f9cae3670..3b3f10397 100644 --- a/app/features/sidebar/core/sidebar.server.ts +++ b/app/features/sidebar/core/sidebar.server.ts @@ -67,20 +67,13 @@ export async function resolveSidebarData(userId: number | null) { }; } - // xxx: combine queries - const [ - tournamentsData, - scrimsData, - friendsWithActivity, - savedTournamentIds, - upcomingTournaments, - ] = await Promise.all([ - ShowcaseTournaments.categorizedTournamentsByUserId(userId), - ScrimPostRepository.findUserScrims(userId), - FriendRepository.findByUserIdWithActivity(userId), - SavedTournamentRepository.findTournamentIdsByUserId(userId), - ShowcaseTournaments.upcomingTournaments(), - ]); + const [tournamentsData, scrimsData, friendsWithActivity, savedTournaments] = + await Promise.all([ + ShowcaseTournaments.categorizedTournamentsByUserId(userId), + ScrimPostRepository.findUserScrims(userId), + FriendRepository.findByUserIdWithActivity(userId), + SavedTournamentRepository.upcoming(userId), + ]); const seenTournamentIds = new Set(); const tournamentEvents: SidebarEvent[] = [ @@ -94,11 +87,8 @@ export async function resolveSidebarData(userId: number | null) { }) .map(tournamentToSidebarEvent); - const savedTournamentIdSet = new Set(savedTournamentIds); - const savedEvents: SidebarEvent[] = upcomingTournaments - .filter( - (t) => savedTournamentIdSet.has(t.id) && !seenTournamentIds.has(t.id), - ) + const savedEvents: SidebarEvent[] = savedTournaments + .filter((t) => !seenTournamentIds.has(t.id)) .map((t) => { seenTournamentIds.add(t.id); return tournamentToSidebarEvent(t); diff --git a/app/features/tournament/SavedTournamentRepository.server.ts b/app/features/tournament/SavedTournamentRepository.server.ts index 72760cb52..3bbea0fb1 100644 --- a/app/features/tournament/SavedTournamentRepository.server.ts +++ b/app/features/tournament/SavedTournamentRepository.server.ts @@ -1,4 +1,6 @@ import { db } from "~/db/sql"; +import type { ShowcaseCalendarEvent } from "~/features/calendar/calendar-types"; +import * as ShowcaseTournaments from "~/features/front-page/core/ShowcaseTournaments.server"; export function save({ userId, @@ -57,6 +59,17 @@ export async function findTournamentIdsByUserId( return rows.map((r) => r.tournamentId); } +export async function upcoming( + userId: number, +): Promise { + const [savedIds, tournaments] = await Promise.all([ + findTournamentIdsByUserId(userId), + ShowcaseTournaments.upcomingTournaments(), + ]); + + return tournaments.filter((t) => savedIds.includes(t.id)); +} + export function deleteByTournamentId(tournamentId: number) { return db .deleteFrom("SavedTournament")