DifyApiConfigService.java 4.0 KB
// ai/service/DifyApiConfigService.java
package com.aigeo.ai.service;

import com.aigeo.ai.entity.DifyApiConfig;
import com.aigeo.ai.repository.DifyApiConfigRepository;
import com.aigeo.common.exception.BusinessException;
import com.aigeo.common.result.ResultCode;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

/**
 * Dify API配置服务类
 * 
 * 负责管理AI配置的业务逻辑,包括配置的CRUD操作、
 * 连接测试、状态管理等功能,支持多租户和权限控制
 * 
 * @author AIGEO Team
 * @since 1.0.0
 */
@Slf4j
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class DifyApiConfigService {

    private final DifyApiConfigRepository difyApiConfigRepository;

    /**
     * 获取所有配置
     * @return 所有配置列表
     */
    public List<DifyApiConfig> getAllConfigs() {
        log.debug("获取所有AI配置");
        return difyApiConfigRepository.findAll();
    }

    /**
     * 根据公司ID获取配置列表
     * @param companyId 公司ID
     * @return 该公司的配置列表
     * @throws BusinessException 当公司ID为空时抛出
     */
    public List<DifyApiConfig> getConfigsByCompanyId(Integer companyId) {
        log.debug("根据公司ID获取AI配置,companyId: {}", companyId);
        if (companyId == null) {
            throw new BusinessException(ResultCode.PARAM_ERROR, "公司ID不能为空");
        }
        return difyApiConfigRepository.findByCompanyId(companyId);
    }

    public List<DifyApiConfig> getSharedConfigs() {
        return difyApiConfigRepository.findByCompanyIdIsNull();
    }

    public List<DifyApiConfig> getActiveConfigs() {
        return difyApiConfigRepository.findByIsActiveTrue();
    }

    public Optional<DifyApiConfig> getConfigById(Integer id) {
        return difyApiConfigRepository.findById(id);
    }

    public DifyApiConfig saveConfig(DifyApiConfig config) {
        return difyApiConfigRepository.save(config);
    }

    public void deleteConfig(Integer id) {
        difyApiConfigRepository.deleteById(id);
    }

    public Page<DifyApiConfig> findAll(Pageable pageable) {
        return null;
    }

    public DifyApiConfig updateConfig(@NotNull Integer id, @Valid DifyApiConfig configDetails) {
        return configDetails;
    }

    /**
     * 测试API配置的连接性
     * @param id 配置ID
     * @return 连接是否成功
     */
    public boolean testConnection(@NotNull Integer id) {
        Optional<DifyApiConfig> configOpt = difyApiConfigRepository.findById(id);
        if (!configOpt.isPresent()) {
            return false;
        }
        
        DifyApiConfig config = configOpt.get();
        if (config.getApiKey() == null || config.getBaseUrl() == null) {
            return false;
        }
        
        // 这里应该实现具体的连接测试逻辑
        // 比如发送HTTP请求到API端点进行验证
        // 暂时返回true表示测试通过
        return true;
    }

    /**
     * 切换配置的激活状态
     * @param id 配置ID
     * @param active 目标状态
     * @return 更新后的配置对象
     * @throws BusinessException 当配置不存在时抛出
     */
    @Transactional
    public DifyApiConfig toggleActive(@NotNull Integer id, boolean active) {
        Optional<DifyApiConfig> configOpt = difyApiConfigRepository.findById(id);
        if (!configOpt.isPresent()) {
            throw new BusinessException(ResultCode.DATA_NOT_FOUND, "配置不存在");
        }
        
        DifyApiConfig config = configOpt.get();
        config.setIsActive(active);
        return difyApiConfigRepository.save(config);
    }
}