export const qk = { me: ["me"] as const, adminMe: ["adminMe"] as const, home: ["home"] as const, leaderboard: ["leaderboard"] as const, expansions: ["expansions"] as const, factions: ["factions"] as const, myStats: ["myStats"] as const, publicProfile: (id: number) => ["publicProfile", id] as const, userMatches: (id: number) => ["userMatches", id] as const, userSearch: (q: string, limit: number) => ["userSearch", q, limit] as const, groups: ["groups"] as const, group: (id: number) => ["group", id] as const, groupFactions: (id: number) => ["group", id, "factions"] as const, groupMembers: (id: number) => ["group", id, "members"] as const, groupMatches: (id: number) => ["group", id, "matches"] as const, groupStats: (id: number) => ["group", id, "stats"] as const, match: (id: number) => ["match", id] as const, authConfig: ["authConfig"] as const, invitations: ["invitations"] as const, notifications: ["notifications"] as const, announcements: ["announcements"] as const, devUsers: ["devUsers"] as const, adminUsers: ["adminUsers"] as const, adminGroups: ["adminGroups"] as const, adminMatches: ["adminMatches"] as const, adminLogs: ["adminLogs"] as const, adminAchievements: ["adminAchievements"] as const, adminAnnouncements: ["adminAnnouncements"] as const, }; /** * Ключи, которые протухают от любой партии: конкретных участников мы не знаем * (событие приходит на всю группу), поэтому инвалидируем по префиксу. Один * список на SSE-обработчик и на завершение партии — иначе переименование ключа * в этом файле тихо разойдётся с местами, где он написан строкой. */ export const matchAffectedKeys = [ qk.home, qk.leaderboard, qk.myStats, ["userMatches"], ["publicProfile"], ] as const;