Refactor queries

This commit is contained in:
Kalle 2026-03-08 21:20:10 +02:00
parent 3bfc0a6bfb
commit 031bdd01be
3 changed files with 28 additions and 30 deletions

View File

@ -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);

View File

@ -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<number>();
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);

View File

@ -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<ShowcaseCalendarEvent[]> {
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")