export interface Game { id?: number; pgn?: string; white?: User; black?: User; winner?: "white" | "black" | "draw"; endReason?: "draw" | "checkmate" | "stalemate" | "repetition" | "insufficient" | "abandoned"; host?: User; code?: string; unlisted?: boolean; timeout?: number; observers?: User[]; startedAt?: number; endedAt?: number; vsAi?: boolean; aiLevel?: number; } export interface User { id?: number | string; // string for guest IDs name?: string | null; email?: string; wins?: number; losses?: number; draws?: number; role?: "user" | "admin"; // mainly for players, not spectators connected?: boolean; disconnectedOn?: number; } export interface FriendRequest { id?: number; fromId?: number; toId?: number; fromName?: string; toName?: string; status?: "pending" | "accepted" | "rejected"; createdAt?: string; } export interface Friendship { id?: number; userId?: number; friendId?: number; friendName?: string; wins?: number; losses?: number; draws?: number; createdAt?: string; }