DifyApiConfigController.java 6.0 KB
package com.aigeo.ai.controller;

import com.aigeo.ai.entity.DifyApiConfig;
import com.aigeo.ai.service.DifyApiConfigService;
import com.aigeo.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import java.util.List;
import java.util.Optional;

/**
 * AI配置管理控制器
 * 
 * @author AIGEO Team
 * @since 1.0.0
 */
@Tag(name = "AI配置管理", description = "Dify API配置管理接口")
@Slf4j
@RestController
@RequestMapping("/api/ai-configs")
@RequiredArgsConstructor
public class DifyApiConfigController {

    private final DifyApiConfigService difyApiConfigService;

    @Operation(summary = "获取所有配置", description = "获取所有AI配置列表")
    @GetMapping
    public Result<List<DifyApiConfig>> getAllConfigs() {
        log.debug("获取所有AI配置");
        List<DifyApiConfig> configs = difyApiConfigService.getAllConfigs();
        return Result.success(configs);
    }

    @Operation(summary = "分页查询配置", description = "分页查询AI配置列表")
    @GetMapping("/list")
    public Result<Page<DifyApiConfig>> listConfigs(
            @Parameter(description = "页码") @RequestParam(defaultValue = "0") int page,
            @Parameter(description = "页大小") @RequestParam(defaultValue = "10") int size) {
        log.debug("分页查询AI配置,page: {}, size: {}", page, size);
        Pageable pageable = PageRequest.of(page, size);
        Page<DifyApiConfig> configs = difyApiConfigService.findAll(pageable);
        return Result.success(configs);
    }

    @Operation(summary = "根据ID获取配置", description = "根据配置ID获取单个AI配置")
    @GetMapping("/{id}")
    public Result<DifyApiConfig> getConfigById(
            @Parameter(description = "配置ID") @PathVariable @NotNull Integer id) {
        log.debug("获取AI配置,id: {}", id);
        Optional<DifyApiConfig> config = difyApiConfigService.getConfigById(id);
        if (config.isPresent()) {
            return Result.success(config.get());
        } else {
            return Result.error(404, "配置不存在");
        }
    }

    @Operation(summary = "根据公司ID获取配置", description = "获取指定公司的AI配置列表")
    @GetMapping("/company/{companyId}")
    public Result<List<DifyApiConfig>> getConfigsByCompanyId(
            @Parameter(description = "公司ID") @PathVariable @NotNull Integer companyId) {
        log.debug("获取公司AI配置,companyId: {}", companyId);
        List<DifyApiConfig> configs = difyApiConfigService.getConfigsByCompanyId(companyId);
        return Result.success(configs);
    }

    @Operation(summary = "获取共享配置", description = "获取所有共享的AI配置")
    @GetMapping("/shared")
    public Result<List<DifyApiConfig>> getSharedConfigs() {
        log.debug("获取共享AI配置");
        List<DifyApiConfig> configs = difyApiConfigService.getSharedConfigs();
        return Result.success(configs);
    }

    @Operation(summary = "获取启用的配置", description = "获取所有启用状态的AI配置")
    @GetMapping("/active")
    public Result<List<DifyApiConfig>> getActiveConfigs() {
        log.debug("获取启用的AI配置");
        List<DifyApiConfig> configs = difyApiConfigService.getActiveConfigs();
        return Result.success(configs);
    }

    @Operation(summary = "创建配置", description = "创建新的AI配置")
    @PostMapping
    public Result<DifyApiConfig> createConfig(
            @Parameter(description = "配置信息") @Valid @RequestBody DifyApiConfig config) {
        log.info("创建AI配置,name: {}", config.getName());
        DifyApiConfig createdConfig = difyApiConfigService.saveConfig(config);
        return Result.success(createdConfig);
    }

    @Operation(summary = "更新配置", description = "更新指定的AI配置")
    @PutMapping("/{id}")
    public Result<DifyApiConfig> updateConfig(
            @Parameter(description = "配置ID") @PathVariable @NotNull Integer id,
            @Parameter(description = "配置信息") @Valid @RequestBody DifyApiConfig configDetails) {
        log.info("更新AI配置,id: {}, name: {}", id, configDetails.getName());
        DifyApiConfig updatedConfig = difyApiConfigService.updateConfig(id, configDetails);
        return Result.success(updatedConfig);
    }

    @Operation(summary = "删除配置", description = "删除指定的AI配置")
    @DeleteMapping("/{id}")
    public Result<Void> deleteConfig(
            @Parameter(description = "配置ID") @PathVariable @NotNull Integer id) {
        log.info("删除AI配置,id: {}", id);
        difyApiConfigService.deleteConfig(id);
        return Result.success();
    }

    @Operation(summary = "测试配置", description = "测试AI配置的连接性")
    @PostMapping("/{id}/test")
    public Result<Boolean> testConfig(
            @Parameter(description = "配置ID") @PathVariable @NotNull Integer id) {
        log.info("测试AI配置连接,id: {}", id);
        boolean testResult = difyApiConfigService.testConnection(id);
        return Result.success(testResult);
    }

    @Operation(summary = "启用/禁用配置", description = "启用或禁用指定的AI配置")
    @PutMapping("/{id}/toggle")
    public Result<DifyApiConfig> toggleConfig(
            @Parameter(description = "配置ID") @PathVariable @NotNull Integer id,
            @Parameter(description = "是否启用") @RequestParam boolean active) {
        log.info("切换AI配置状态,id: {}, active: {}", id, active);
        DifyApiConfig config = difyApiConfigService.toggleActive(id, active);
        return Result.success(config);
    }
}