diff --git a/src/lib/server/daily-character.ts b/src/lib/server/daily-character.ts index 9149b4b..55b93be 100644 --- a/src/lib/server/daily-character.ts +++ b/src/lib/server/daily-character.ts @@ -1,5 +1,5 @@ import { db } from '$lib/server/db'; -import { arc, character, characterHistory, characterOverride, devilFruit } from '$lib/server/db/schema'; +import { arc, character, characterHistory, characterOverride, devilFruit, type Character, type CharacterOverride } from '$lib/server/db/schema'; import { desc, eq, inArray, and } from 'drizzle-orm'; // Generate or get random seed for daily character selection @@ -29,14 +29,12 @@ const characterWithRelationsSelect = { arcName: arc.name }; -export type CharacterWithRelations = typeof character.$inferSelect & { +export type CharacterWithRelations = Character & { devilFruitName: string | null; devilFruitType: string | null; arcName: string | null; }; -type CharacterOverrideRow = typeof characterOverride.$inferSelect; - type RelationMaps = { arcNameById: Map; devilFruitById: Map; @@ -48,7 +46,7 @@ function isNotNullish(value: T | null | undefined): value is T { function mergeCharacterWithOverride( baseCharacter: CharacterWithRelations, - overrideRow?: CharacterOverrideRow, + overrideRow?: CharacterOverride, relationMaps?: RelationMaps ): CharacterWithRelations { if (!overrideRow) { @@ -104,7 +102,7 @@ async function applyCharacterOverrides( return characters; } - const overrideByCharacterId = new Map( + const overrideByCharacterId = new Map( overrideRows.map((overrideRow) => [overrideRow.characterId, overrideRow]) ); diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts index 10e8a32..13d0b03 100644 --- a/src/lib/server/db/schema.ts +++ b/src/lib/server/db/schema.ts @@ -1,5 +1,6 @@ import { integer, sqliteTable, text, real, unique } from 'drizzle-orm/sqlite-core'; import { user } from './auth.schema'; +import type { InferSelectModel } from 'drizzle-orm'; // Define devil fruit types export type DevilFruitType = 'Paramecia' | 'Zoan' | 'Logia' | 'Smile' | 'Unknown'; @@ -23,6 +24,8 @@ export const arc = sqliteTable('arc', { url: text('url') }); +export type Arc = InferSelectModel; + // Define the devil fruit table schema export const devilFruit = sqliteTable('devil_fruit', { id: text('id').primaryKey(), @@ -31,6 +34,8 @@ export const devilFruit = sqliteTable('devil_fruit', { url: text('url') }); +export type DevilFruit = InferSelectModel; + // Define the character table schema export const character = sqliteTable('character', { id: text('id').primaryKey(), @@ -58,6 +63,8 @@ export const character = sqliteTable('character', { isInDailyMode: integer('is_in_daily_mode', { mode: 'boolean' }).default(false) }); +export type Character = InferSelectModel; + // Define the character override table schema export const characterOverride = sqliteTable('character_override', { characterId: text('character_id').primaryKey().references(() => character.id, { onDelete: 'cascade' }), @@ -82,6 +89,8 @@ export const characterOverride = sqliteTable('character_override', { notes: text('notes') }); +export type CharacterOverride = InferSelectModel; + // Define the character scrape validation table schema export const characterScrapeValidation = sqliteTable('character_scrape_validation', { id: text('id').primaryKey(), @@ -108,6 +117,8 @@ export const characterScrapeValidation = sqliteTable('character_scrape_validatio frUrl: text('fr_url') }); +export type CharacterScrapeValidation = InferSelectModel; + // Define the character history table schema export const characterHistory = sqliteTable('character_history', { id: text('id') @@ -120,6 +131,8 @@ export const characterHistory = sqliteTable('character_history', { updatedAt: integer('updated_at').notNull().$default(() => Date.now()), }); +export type CharacterHistory = InferSelectModel; + // Define the user character history table schema export const userCharacterHistory = sqliteTable('user_character_history', { id: text('id') @@ -134,6 +147,8 @@ export const userCharacterHistory = sqliteTable('user_character_history', { unique().on(table.userId, table.characterHistoryId) ]); +export type UserCharacterHistory = InferSelectModel; + // Define the friendship table schema (friend requests + accepted friends) export const friendship = sqliteTable('friendship', { id: text('id') @@ -152,5 +167,6 @@ export const friendship = sqliteTable('friendship', { unique().on(table.requesterId, table.addresseeId) ]); +export type Friendship = InferSelectModel; export * from './auth.schema'; diff --git a/src/routes/(game)/daily/+page.svelte b/src/routes/(game)/daily/+page.svelte index 462dd32..cb2af84 100644 --- a/src/routes/(game)/daily/+page.svelte +++ b/src/routes/(game)/daily/+page.svelte @@ -1,23 +1,96 @@ @@ -198,7 +257,7 @@
-
+
@@ -257,7 +316,7 @@

Tes amis aujourd'hui

- {#each data.friendsTodayResults as friendResult} + {#each data.friendsTodayResults as friendResult (friendResult.userId)}
{#if friendResult.image} diff --git a/src/routes/(game)/profile/+page.server.ts b/src/routes/(game)/profile/+page.server.ts index f749f09..bde74df 100644 --- a/src/routes/(game)/profile/+page.server.ts +++ b/src/routes/(game)/profile/+page.server.ts @@ -190,6 +190,7 @@ export const actions: Actions = { // Delete the session from database await db.delete(session).where(eq(session.id, sessionId)); } catch (error) { + console.error('Error revoking session:', error); return fail(500, { message: 'Erreur lors de la révocation de la session' }); } diff --git a/src/routes/(game)/profile/+page.svelte b/src/routes/(game)/profile/+page.svelte index b24b1fe..758f269 100644 --- a/src/routes/(game)/profile/+page.svelte +++ b/src/routes/(game)/profile/+page.svelte @@ -1,6 +1,7 @@