diff --git a/src/routes/(game)/daily/+page.server.ts b/src/routes/(game)/daily/+page.server.ts index a31862d..26d52b6 100644 --- a/src/routes/(game)/daily/+page.server.ts +++ b/src/routes/(game)/daily/+page.server.ts @@ -1,10 +1,10 @@ import { error } from '@sveltejs/kit'; import { db } from '$lib/server/db'; -import { config } from '$lib/server/db/schema'; -import { getDailyModeCharacters, getOrCreateTodayCharacter, getYesterdayCharacter, getTodayCharacterWinsCount } from '$lib/server/daily-character'; -import { like } from 'drizzle-orm'; +import { characterHistory, config, friendship, user, userCharacterHistory } from '$lib/server/db/schema'; +import { getDailyModeCharacters, getOrCreateTodayCharacter, getYesterdayCharacter, getTodayCharacterWinsCount, getDateKey } from '$lib/server/daily-character'; +import { and, eq, inArray, like, or } from 'drizzle-orm'; -export async function load() { +export async function load(event) { const characters = await getDailyModeCharacters(); const dailyCharacter = await getOrCreateTodayCharacter(characters); @@ -17,6 +17,60 @@ export async function load() { // Load the win count for today const winCount = await getTodayCharacterWinsCount(dailyCharacter.id); + let friendsTodayResults: Array<{ userId: string; name: string; image: string | null; tryCount: number }> = []; + + if (event.locals.user) { + const currentUserId = event.locals.user.id; + + const acceptedFriendships = await db + .select({ + requesterId: friendship.requesterId, + addresseeId: friendship.addresseeId + }) + .from(friendship) + .where( + and( + eq(friendship.status, 'accepted'), + or(eq(friendship.requesterId, currentUserId), eq(friendship.addresseeId, currentUserId)) + ) + ); + + const friendIds = acceptedFriendships.map((relation) => + relation.requesterId === currentUserId ? relation.addresseeId : relation.requesterId + ); + + if (friendIds.length > 0) { + const todayDate = getDateKey(new Date()); + + const [todayHistoryEntry] = await db + .select({ id: characterHistory.id }) + .from(characterHistory) + .where(eq(characterHistory.date, todayDate)) + .limit(1); + + const todayCharacterHistoryId = todayHistoryEntry?.id; + + if (todayCharacterHistoryId) { + friendsTodayResults = await db + .select({ + userId: user.id, + name: user.name, + image: user.image, + tryCount: userCharacterHistory.tryCount + }) + .from(userCharacterHistory) + .innerJoin(user, eq(userCharacterHistory.userId, user.id)) + .where( + and( + eq(userCharacterHistory.characterHistoryId, todayCharacterHistoryId), + inArray(userCharacterHistory.userId, friendIds) + ) + ) + .orderBy(userCharacterHistory.tryCount); + } + } + } + // Load column visibility config const columnConfig = await db .select() @@ -37,6 +91,7 @@ export async function load() { dailyCharacter, yesterdayCharacter, columnVisibility, - winCount + winCount, + friendsTodayResults }; } diff --git a/src/routes/(game)/daily/+page.svelte b/src/routes/(game)/daily/+page.svelte index f188fbb..0451d12 100644 --- a/src/routes/(game)/daily/+page.svelte +++ b/src/routes/(game)/daily/+page.svelte @@ -258,6 +258,35 @@ {columnVisibility} /> + {#if data.friendsTodayResults && data.friendsTodayResults.length > 0} + + Tes amis aujourd'hui + + {#each data.friendsTodayResults as friendResult} + + + {#if friendResult.image} + + {:else} + + {friendResult.name?.charAt(0).toUpperCase() || 'U'} + + {/if} + {friendResult.name} + + + {friendResult.tryCount} {friendResult.tryCount > 1 ? 'coups' : 'coup'} + + + {/each} + + + {/if} +
Tes amis aujourd'hui
{friendResult.name}
+ {friendResult.tryCount} {friendResult.tryCount > 1 ? 'coups' : 'coup'} +