99 lines
3.3 KiB
Python
99 lines
3.3 KiB
Python
from fastapi import APIRouter, HTTPException, status
|
|
from backend.core.models.PromptList import AIDesignSpec
|
|
from backend.core.models.PromptComponent import PromptComponent
|
|
|
|
router = APIRouter(prefix="/presets", tags=["presets"])
|
|
|
|
|
|
# ========== 预设基础路由 ==========
|
|
|
|
@router.get("", response_model=dict)
|
|
async def list_presets():
|
|
"""获取所有预设列表及其基本信息"""
|
|
return await AIDesignSpec.list_all_presets()
|
|
|
|
|
|
@router.get("/{preset_name}")
|
|
async def get_preset(preset_name: str):
|
|
"""获取指定预设的完整内容"""
|
|
try:
|
|
return await AIDesignSpec.get_preset(preset_name)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
|
|
|
|
@router.post("", status_code=status.HTTP_201_CREATED)
|
|
async def create_preset(preset_name: str, preset_data: dict):
|
|
"""创建新预设"""
|
|
try:
|
|
return await AIDesignSpec.create_preset(preset_name, preset_data)
|
|
except FileExistsError:
|
|
raise HTTPException(status_code=400, detail="Preset already exists")
|
|
|
|
|
|
@router.put("/{preset_name}")
|
|
async def update_preset(preset_name: str, update_data: dict):
|
|
"""更新预设配置"""
|
|
try:
|
|
return await AIDesignSpec.update_preset(preset_name, update_data)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
|
|
|
|
@router.delete("/{preset_name}")
|
|
async def delete_preset(preset_name: str):
|
|
"""删除指定预设"""
|
|
try:
|
|
return await AIDesignSpec.delete_preset(preset_name)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
|
|
|
|
# ========== 预设组件路由 ==========
|
|
|
|
@router.get("/{preset_name}/components")
|
|
async def list_preset_components(preset_name: str):
|
|
"""获取预设中的所有组件"""
|
|
try:
|
|
return await AIDesignSpec.list_components(preset_name)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
|
|
|
|
@router.get("/{preset_name}/components/{component_id}")
|
|
async def get_preset_component(preset_name: str, component_id: str):
|
|
"""获取指定组件的详情"""
|
|
try:
|
|
return await AIDesignSpec.get_component(preset_name, component_id)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
|
|
|
|
@router.post("/{preset_name}/components", status_code=status.HTTP_201_CREATED)
|
|
async def add_preset_component(preset_name: str, component_data: dict):
|
|
"""向预设添加新组件"""
|
|
try:
|
|
return await AIDesignSpec.add_component_to_preset(preset_name, component_data)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
|
|
|
|
@router.put("/{preset_name}/components/{component_id}")
|
|
async def update_preset_component(preset_name: str, component_id: str, update_data: dict):
|
|
"""更新指定组件"""
|
|
try:
|
|
return await AIDesignSpec.update_component_in_preset(preset_name, component_id, update_data)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
|
|
|
|
@router.delete("/{preset_name}/components/{component_id}")
|
|
async def delete_preset_component(preset_name: str, component_id: str):
|
|
"""从预设中删除指定组件"""
|
|
try:
|
|
return await AIDesignSpec.delete_component_from_preset(preset_name, component_id)
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|