package com.vincent.rsf.server.ai.service.impl; import com.vincent.rsf.server.ai.config.AiDefaults; import com.vincent.rsf.server.ai.dto.AiConfigSummaryDto; import com.vincent.rsf.server.ai.dto.AiPromptPreviewDto; import com.vincent.rsf.server.ai.dto.AiPromptPreviewRequest; import com.vincent.rsf.server.ai.entity.AiMcpMount; import com.vincent.rsf.server.ai.entity.AiParam; import com.vincent.rsf.server.ai.entity.AiPrompt; import com.vincent.rsf.server.ai.service.AiConfigOpsService; import com.vincent.rsf.server.ai.service.AiMcpMountService; import com.vincent.rsf.server.ai.service.AiParamService; import com.vincent.rsf.server.ai.service.AiPromptService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.util.List; @Service @RequiredArgsConstructor public class AiConfigOpsServiceImpl implements AiConfigOpsService { private final AiParamService aiParamService; private final AiPromptService aiPromptService; private final AiMcpMountService aiMcpMountService; private final AiPromptRenderSupport aiPromptRenderSupport; @Override public AiConfigSummaryDto getSummary(String promptCode, Long tenantId) { String finalPromptCode = StringUtils.hasText(promptCode) ? promptCode : AiDefaults.DEFAULT_PROMPT_CODE; AiParam activeParam = aiParamService.getActiveParam(tenantId); AiPrompt activePrompt = aiPromptService.getActivePrompt(finalPromptCode, tenantId); List mounts = aiMcpMountService.listActiveMounts(tenantId); return AiConfigSummaryDto.builder() .promptCode(activePrompt.getCode()) .promptName(activePrompt.getName()) .promptScene(activePrompt.getScene()) .activeParamName(activeParam.getName()) .activeModel(activeParam.getModel()) .activeParamUpdatedAt(activeParam.getUpdateTime$()) .activeParamUpdatedBy(activeParam.getUpdateBy()) .activeParamValidateStatus(activeParam.getValidateStatus()) .activeParamValidateMessage(activeParam.getLastValidateMessage()) .activeParamValidatedAt(activeParam.getLastValidateTime$()) .enabledMcpCount(mounts.size()) .enabledMcpNames(mounts.stream().map(AiMcpMount::getName).toList()) .activePromptUpdatedAt(activePrompt.getUpdateTime$()) .activePromptUpdatedBy(activePrompt.getUpdateBy()) .build(); } @Override public AiPromptPreviewDto renderPromptPreview(AiPromptPreviewRequest request, Long tenantId) { return aiPromptService.renderPreview(request, tenantId); } }