import { ChatConverseInfo, fetchConverseInfo } from '../model/converse'; import { findGroupInviteByCode, getGroupBasicInfo, GroupBasicInfo, GroupInvite, } from '../model/group'; import { fetchLocalStaticRegistryPlugins, fetchRegistryPlugins, fetchServiceRegistryPlugins, PluginManifest, } from '../model/plugin'; import { fetchUserInfo, getUserSettings, UserBaseInfo } from '../model/user'; import { parseUrlStr } from '../utils/url-helper'; import { queryClient } from './index'; export enum CacheKey { user = 'user', converse = 'converse', baseGroupInfo = 'baseGroupInfo', groupInvite = 'groupInvite', pluginRegistry = 'pluginRegistry', userSettings = 'userSettings', } /** * 获取缓存的用户信息 */ export async function getCachedUserInfo( userId: string, refetch = false ): Promise { const data = await queryClient.fetchQuery( [CacheKey.user, userId], () => fetchUserInfo(userId), { staleTime: refetch ? 0 : 2 * 60 * 60 * 1000, // 缓存2小时 } ); return data; } /** * 获取缓存的会话信息 */ export async function getCachedConverseInfo( converseId: string ): Promise { const data = await queryClient.fetchQuery( [CacheKey.converse, converseId], () => fetchConverseInfo(converseId) ); return data; } /** * 获取缓存的邀请码信息 */ export async function getCachedBaseGroupInfo( groupId: string ): Promise { const data = await queryClient.fetchQuery( [CacheKey.baseGroupInfo, groupId], () => getGroupBasicInfo(groupId) ); return data; } /** * 获取缓存的邀请码信息 */ export async function getCachedGroupInviteInfo( inviteCode: string ): Promise { const data = await queryClient.fetchQuery( [CacheKey.groupInvite, inviteCode], () => findGroupInviteByCode(inviteCode) ); return data; } /** * 获取缓存的插件列表 */ export async function getCachedRegistryPlugins(): Promise { const data = await queryClient.fetchQuery( [CacheKey.pluginRegistry], () => Promise.all([ fetchRegistryPlugins().catch(() => []), fetchServiceRegistryPlugins() .then((list) => list.map((manifest) => { const serviceManifest = { ...manifest, // 后端url策略。根据前端的url在获取时自动变更为当前链接的后端地址 url: parseUrlStr(manifest.url), }; if (manifest.icon) { serviceManifest.icon = parseUrlStr(manifest.icon); } if (manifest.documentUrl) { serviceManifest.documentUrl = parseUrlStr(manifest.documentUrl); } return serviceManifest; }) ) .catch(() => []), fetchLocalStaticRegistryPlugins().catch(() => []), ]).then(([a, b, c]) => [...a, ...b, ...c]), { staleTime: 2 * 60 * 60 * 1000, // 缓存2小时 } ); return data; } /** * 获取用户配置 */ export async function getCachedUserSettings() { const data = await queryClient.fetchQuery( [CacheKey.userSettings], () => getUserSettings, { staleTime: 1 * 60 * 1000, // 缓存1分钟 } ); return data; }