export interface UserSummary { id: number name: string color: string | null cardEffect: string | null cardEffectColor: string | null cardVignette: boolean cardBorderEffect: string | null cardBorderEffectColor: string | null avatarUrl: string | null createdAt: string stats: { uploads: number comments: number } } const inflight = new Map>() // Cache für User-Hover-Cards: gleiche Nutzer werden nicht doppelt geladen export function useUserSummaries() { const summaries = useState>('user-summaries', () => ({})) function ensureSummary(id: number) { if (summaries.value[id] || inflight.has(id)) return inflight.set(id, (async () => { try { summaries.value[id] = await $fetch(`/api/users/${id}/summary`) } catch { // Fehler stillschweigend ignorieren — die Card zeigt dann nur die Basisdaten } finally { inflight.delete(id) } })()) } // Cache-Eintrag verwerfen, damit geänderte Effekte/Farben ohne Reload sichtbar werden function invalidate(id: number) { delete summaries.value[id] } return { summaries, ensureSummary, invalidate } }