package com.vincent.rsf.server.ai.store; import com.fasterxml.jackson.core.type.TypeReference; import com.vincent.rsf.server.ai.config.AiDefaults; import com.vincent.rsf.server.ai.dto.AiMcpConnectivityTestDto; import com.vincent.rsf.server.ai.dto.AiMcpToolPreviewDto; import com.vincent.rsf.server.ai.store.support.AiRedisExecutor; import com.vincent.rsf.server.ai.store.support.AiRedisKeys; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.util.List; @Component @RequiredArgsConstructor public class AiMcpCacheStore { private final AiRedisExecutor aiRedisExecutor; private final AiRedisKeys aiRedisKeys; public List getToolPreview(Long tenantId, Long mountId) { return aiRedisExecutor.readJson(aiRedisKeys.buildMcpPreviewKey(tenantId, mountId), new TypeReference>() { }); } public void cacheToolPreview(Long tenantId, Long mountId, List tools) { aiRedisExecutor.writeJson(aiRedisKeys.buildMcpPreviewKey(tenantId, mountId), tools, AiDefaults.MCP_PREVIEW_CACHE_TTL_SECONDS); } public AiMcpConnectivityTestDto getConnectivity(Long tenantId, Long mountId) { return aiRedisExecutor.readJson(aiRedisKeys.buildMcpHealthKey(tenantId, mountId), AiMcpConnectivityTestDto.class); } public void cacheConnectivity(Long tenantId, Long mountId, AiMcpConnectivityTestDto connectivity) { aiRedisExecutor.writeJson(aiRedisKeys.buildMcpHealthKey(tenantId, mountId), connectivity, AiDefaults.MCP_HEALTH_CACHE_TTL_SECONDS); } public void evictMcpMountCaches(Long tenantId, Long mountId) { if (mountId == null) { return; } aiRedisExecutor.delete(aiRedisKeys.buildMcpPreviewKey(tenantId, mountId)); aiRedisExecutor.delete(aiRedisKeys.buildMcpHealthKey(tenantId, mountId)); } }