From b718dcc335529647c46ec7594d9bbc6a9311b0a9 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Thu, 18 Dec 2025 13:22:08 -0800 Subject: [PATCH] use username instead of membershipId in member page URL --- src/lib/api/adapters/gw.adapter.ts | 13 ++++++++++++- src/lib/api/queries/gw.queries.ts | 17 ++++++++++++++++- src/lib/components/crew/PlayerScoreRow.svelte | 4 +++- .../{[membershipId] => [username]}/+page.svelte | 4 ++-- 4 files changed, 33 insertions(+), 5 deletions(-) rename src/routes/(app)/crew/members/{[membershipId] => [username]}/+page.svelte (96%) diff --git a/src/lib/api/adapters/gw.adapter.ts b/src/lib/api/adapters/gw.adapter.ts index 6f223f1b..3a39ce88 100644 --- a/src/lib/api/adapters/gw.adapter.ts +++ b/src/lib/api/adapters/gw.adapter.ts @@ -341,7 +341,7 @@ export class GwAdapter extends BaseAdapter { // ==================== Member/Phantom Score History ==================== /** - * Get all GW scores for a specific crew member + * Get all GW scores for a specific crew member by membership ID */ async getMemberGwScores(membershipId: string, options?: RequestOptions): Promise { const response = await this.request( @@ -351,6 +351,17 @@ export class GwAdapter extends BaseAdapter { return response } + /** + * Get all GW scores for a crew member by username + */ + async getMemberGwScoresByUsername(username: string, options?: RequestOptions): Promise { + const response = await this.request( + `/crew/memberships/${username}/gw_scores`, + options + ) + return response + } + /** * Get all GW scores for a specific phantom player */ diff --git a/src/lib/api/queries/gw.queries.ts b/src/lib/api/queries/gw.queries.ts index d0ff5dca..f1803a92 100644 --- a/src/lib/api/queries/gw.queries.ts +++ b/src/lib/api/queries/gw.queries.ts @@ -83,7 +83,7 @@ export const gwQueries = { }), /** - * Member's GW scores history query options + * Member's GW scores history query options (by membership ID) * * @param membershipId - Crew membership ID */ @@ -96,6 +96,20 @@ export const gwQueries = { gcTime: 1000 * 60 * 30 // 30 minutes }), + /** + * Member's GW scores history query options (by username) + * + * @param username - User's username + */ + memberGwScoresByUsername: (username: string) => + queryOptions({ + queryKey: ['crew', 'member', 'username', username, 'gw_scores'] as const, + queryFn: () => gwAdapter.getMemberGwScoresByUsername(username), + enabled: !!username, + staleTime: 1000 * 60 * 5, // 5 minutes + gcTime: 1000 * 60 * 30 // 30 minutes + }), + /** * Phantom's GW scores history query options * @@ -135,5 +149,6 @@ export const gwKeys = { participationsAll: () => [...gwKeys.all, 'participations'] as const, participation: (participationId: string) => [...gwKeys.all, 'participations', participationId] as const, memberGwScores: (membershipId: string) => ['crew', 'member', membershipId, 'gw_scores'] as const, + memberGwScoresByUsername: (username: string) => ['crew', 'member', 'username', username, 'gw_scores'] as const, phantomGwScores: (phantomId: string) => ['crew', 'phantom', phantomId, 'gw_scores'] as const } diff --git a/src/lib/components/crew/PlayerScoreRow.svelte b/src/lib/components/crew/PlayerScoreRow.svelte index 6fa31893..35f69766 100644 --- a/src/lib/components/crew/PlayerScoreRow.svelte +++ b/src/lib/components/crew/PlayerScoreRow.svelte @@ -31,9 +31,11 @@ const isTopFive = $derived(rank <= 5) function handleRowClick() { + // For members, use username (stored in name) for cleaner URLs + // For phantoms, use phantom ID since they don't have usernames const path = player.type === 'member' - ? `/crew/members/${player.id}` + ? `/crew/members/${player.name}` : `/crew/phantoms/${player.id}` goto(path) } diff --git a/src/routes/(app)/crew/members/[membershipId]/+page.svelte b/src/routes/(app)/crew/members/[username]/+page.svelte similarity index 96% rename from src/routes/(app)/crew/members/[membershipId]/+page.svelte rename to src/routes/(app)/crew/members/[username]/+page.svelte index 4171d167..226fb9cb 100644 --- a/src/routes/(app)/crew/members/[membershipId]/+page.svelte +++ b/src/routes/(app)/crew/members/[username]/+page.svelte @@ -10,10 +10,10 @@ import GwEventScoreRow from '$lib/components/crew/GwEventScoreRow.svelte' import GwCrewHistoryChart from '$lib/components/charts/GwCrewHistoryChart.svelte' - const membershipId = $derived($page.params.membershipId ?? '') + const username = $derived($page.params.username ?? '') // Query for member's GW scores - const scoresQuery = createQuery(() => gwQueries.memberGwScores(membershipId)) + const scoresQuery = createQuery(() => gwQueries.memberGwScoresByUsername(username)) const memberName = $derived(scoresQuery.data?.member?.user?.username ?? 'Member')