package com.vincent.rsf.server.ai.store; import com.vincent.rsf.server.ai.config.AiDefaults; import com.vincent.rsf.server.ai.dto.AiResolvedConfig; import com.vincent.rsf.server.ai.store.support.AiRedisExecutor; import com.vincent.rsf.server.ai.store.support.AiRedisIndexSupport; import com.vincent.rsf.server.ai.store.support.AiRedisKeys; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class AiConfigCacheStore { private final AiRedisExecutor aiRedisExecutor; private final AiRedisIndexSupport aiRedisIndexSupport; private final AiRedisKeys aiRedisKeys; public AiResolvedConfig getResolvedConfig(Long tenantId, String promptCode, Long aiParamId) { return aiRedisExecutor.readJson(aiRedisKeys.buildConfigKey(tenantId, promptCode, aiParamId), AiResolvedConfig.class); } public void cacheResolvedConfig(Long tenantId, String promptCode, Long aiParamId, AiResolvedConfig config) { String key = aiRedisKeys.buildConfigKey(tenantId, promptCode, aiParamId); aiRedisExecutor.writeJson(key, config, AiDefaults.CONFIG_CACHE_TTL_SECONDS); aiRedisIndexSupport.remember(aiRedisKeys.buildConfigIndexKey(tenantId), key); } public void evictTenantConfigCaches(Long tenantId) { aiRedisIndexSupport.deleteTrackedKeys(aiRedisKeys.buildConfigIndexKey(tenantId)); } }