From 08f5d620beb19cd67ad2ce76dfa1f3287117b263 Mon Sep 17 00:00:00 2001 From: whidix Date: Thu, 5 Mar 2026 22:08:36 +0100 Subject: [PATCH] feat: add daily history tab and fetch daily character history for user profile --- src/routes/(game)/profile/+page.server.ts | 24 ++++++- src/routes/(game)/profile/+page.svelte | 81 ++++++++++++++++++++++- 2 files changed, 100 insertions(+), 5 deletions(-) diff --git a/src/routes/(game)/profile/+page.server.ts b/src/routes/(game)/profile/+page.server.ts index 38d0c0e..83a0114 100644 --- a/src/routes/(game)/profile/+page.server.ts +++ b/src/routes/(game)/profile/+page.server.ts @@ -2,8 +2,8 @@ import { fail, redirect } from '@sveltejs/kit'; import type { Actions, PageServerLoad } from './$types'; import { auth } from '$lib/server/auth'; import { db } from '$lib/server/db'; -import { session } from '$lib/server/db/auth.schema'; -import { eq } from 'drizzle-orm'; +import { session, userCharacterHistory, characterHistory, character } from '$lib/server/db/schema'; +import { eq, desc } from 'drizzle-orm'; import { APIError } from 'better-auth/api'; export const load: PageServerLoad = async (event) => { @@ -17,9 +17,27 @@ export const load: PageServerLoad = async (event) => { .from(session) .where(eq(session.userId, event.locals.user.id)); + // Fetch daily history for this user + const dailyHistory = await db + .select({ + id: userCharacterHistory.id, + characterId: characterHistory.characterId, + date: characterHistory.date, + tryCount: userCharacterHistory.tryCount, + won: characterHistory.won, + characterName: character.name, + characterImage: character.pictureUrl + }) + .from(userCharacterHistory) + .innerJoin(characterHistory, eq(userCharacterHistory.characterHistoryId, characterHistory.id)) + .innerJoin(character, eq(characterHistory.characterId, character.id)) + .where(eq(userCharacterHistory.userId, event.locals.user.id)) + .orderBy(desc(characterHistory.date)); + return { user: event.locals.user, - sessions: userSessions + sessions: userSessions, + dailyHistory: dailyHistory }; }; diff --git a/src/routes/(game)/profile/+page.svelte b/src/routes/(game)/profile/+page.svelte index 3d41508..ee6d155 100644 --- a/src/routes/(game)/profile/+page.svelte +++ b/src/routes/(game)/profile/+page.svelte @@ -10,13 +10,14 @@ let { data, form }: Props = $props(); let isLoading = $state(false); - let activeTab = $state<'profile' | 'password' | 'sessions'>('profile'); + let activeTab = $state<'profile' | 'password' | 'sessions' | 'daily'>('profile'); let name = $state(''); let showSuccess = $state(false); let oldPassword = $state(''); let newPassword = $state(''); let confirmPassword = $state(''); let sessions = $state([]); + let dailyHistory = $state([]); let tabsElement: HTMLDivElement | undefined; $effect(() => { @@ -27,6 +28,10 @@ sessions = (data as any).sessions || []; }); + $effect(() => { + dailyHistory = (data as any).dailyHistory || []; + }); + $effect(() => { if (form && form.success === true) { showSuccess = true; @@ -36,7 +41,7 @@ } }); - const handleTabChange = (tab: 'profile' | 'password' | 'sessions') => { + const handleTabChange = (tab: 'profile' | 'password' | 'sessions' | 'daily') => { activeTab = tab; }; @@ -83,6 +88,14 @@ > Mot de passe +