133 lines
5.1 KiB
Python
133 lines
5.1 KiB
Python
from fastapi import APIRouter, HTTPException, status
|
|
from services.preset_service import PresetService
|
|
|
|
router = APIRouter(prefix="/presets", tags=["presets"])
|
|
|
|
@router.get("", response_model=dict)
|
|
async def list_presets():
|
|
"""获取所有预设列表及其基本信息"""
|
|
try:
|
|
presets = PresetService.list_presets()
|
|
response_data = {"presets": presets}
|
|
print(f"[API] GET /api/presets - 返回数据: {response_data}")
|
|
return response_data
|
|
except Exception as e:
|
|
print(f"[API] GET /api/presets - 错误: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
# 注意:路由定义顺序很重要!更具体的路由(更多参数)必须放在前面
|
|
@router.get("/{preset_name}/components/{component_id}")
|
|
async def get_preset_component(preset_name: str, component_id: str):
|
|
"""获取指定组件的详情"""
|
|
raise HTTPException(status_code=501, detail="Not Implemented")
|
|
|
|
@router.get("/{preset_name}/components")
|
|
async def list_preset_components(preset_name: str):
|
|
"""获取预设中的所有组件"""
|
|
raise HTTPException(status_code=501, detail="Not Implemented")
|
|
|
|
@router.get("/{preset_name}")
|
|
async def get_preset(preset_name: str):
|
|
"""获取指定预设的完整内容"""
|
|
try:
|
|
preset_data = PresetService.get_preset(preset_name)
|
|
return preset_data
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@router.post("", status_code=status.HTTP_201_CREATED)
|
|
async def create_preset(preset_data: dict):
|
|
"""创建新预设"""
|
|
try:
|
|
preset_name = preset_data.get("name")
|
|
if not preset_name:
|
|
raise HTTPException(status_code=400, detail="preset name is required")
|
|
|
|
# 使用 create_preset 方法保存预设
|
|
saved_preset = PresetService.create_preset(preset_name, preset_data)
|
|
return {"success": True, "preset": saved_preset}
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=409, detail=str(e))
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@router.put("/{preset_name}")
|
|
async def update_preset(preset_name: str, update_data: dict):
|
|
"""更新预设配置"""
|
|
try:
|
|
updated_preset = PresetService.update_preset(preset_name, update_data)
|
|
return {"success": True, "preset": updated_preset}
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@router.post("/{preset_name}/rename")
|
|
async def rename_preset(preset_name: str, rename_data: dict):
|
|
"""重命名预设(同时修改文件名和内部 name 字段)"""
|
|
try:
|
|
new_name = rename_data.get("newName")
|
|
if not new_name:
|
|
raise HTTPException(status_code=400, detail="newName is required")
|
|
|
|
# 清理新名称(去掉可能的时间戳和后缀)
|
|
import re
|
|
clean_name = re.sub(r'_\d{10,13}$', '', new_name.replace('.json', ''))
|
|
|
|
updated_preset = PresetService.rename_preset(preset_name, clean_name)
|
|
return {"success": True, "preset": updated_preset, "newName": clean_name}
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=409, detail=str(e))
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@router.delete("/{preset_name}")
|
|
async def delete_preset(preset_name: str):
|
|
"""删除指定预设"""
|
|
try:
|
|
success = PresetService.delete_preset(preset_name)
|
|
if success:
|
|
return {"success": True, "message": f"Preset '{preset_name}' deleted"}
|
|
else:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@router.post("/{preset_name}/components", status_code=status.HTTP_201_CREATED)
|
|
async def add_preset_component(preset_name: str, component_data: dict):
|
|
"""向预设添加新组件"""
|
|
raise HTTPException(status_code=501, detail="Not Implemented")
|
|
|
|
@router.put("/{preset_name}/components/{component_id}")
|
|
async def update_preset_component(preset_name: str, component_id: str, update_data: dict):
|
|
"""更新指定组件"""
|
|
raise HTTPException(status_code=501, detail="Not Implemented")
|
|
|
|
@router.delete("/{preset_name}/components/{component_id}")
|
|
async def delete_preset_component(preset_name: str, component_id: str):
|
|
"""从预设中删除指定组件"""
|
|
raise HTTPException(status_code=501, detail="Not Implemented")
|
|
|
|
@router.post("/{preset_name}/reorder")
|
|
async def reorder_preset_components(preset_name: str, order_data: dict):
|
|
"""重新排序预设组件"""
|
|
try:
|
|
component_order = order_data.get("component_order", [])
|
|
if not component_order:
|
|
raise HTTPException(status_code=400, detail="component_order is required")
|
|
|
|
updated_preset = PresetService.reorder_components(preset_name, component_order)
|
|
return {"success": True, "preset": updated_preset}
|
|
except FileNotFoundError:
|
|
raise HTTPException(status_code=404, detail="Preset not found")
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|