Files
sanguo_moziplus_v2/src/api/project_routes.py
T
2026-05-17 07:29:08 +08:00

57 lines
1.5 KiB
Python

"""API 路由 — 项目管理"""
from __future__ import annotations
from pathlib import Path
from typing import Any, Dict, List, Optional
from fastapi import APIRouter, HTTPException
from src.blackboard.registry import ProjectRegistry
from src.utils import get_data_root
router = APIRouter(prefix="/api/projects", tags=["projects"])
def _registry() -> ProjectRegistry:
return ProjectRegistry(get_data_root())
@router.get("")
async def list_projects():
reg = _registry()
projects = reg.list_projects()
return {"projects": {pid: info for pid, info in projects.items()
if info.get("status") != "archived"}}
@router.post("")
async def create_project(body: Dict[str, Any]):
reg = _registry()
try:
info = reg.create_project(
body["id"], body["name"],
agents=body.get("agents", []),
description=body.get("description", ""),
)
return {"ok": True, "project_id": body["id"]}
except ValueError as e:
raise HTTPException(409, str(e))
@router.get("/{project_id}")
async def get_project(project_id: str):
reg = _registry()
info = reg.get_project(project_id)
if not info:
raise HTTPException(404, f"Project not found: {project_id}")
return info
@router.post("/{project_id}/archive")
async def archive_project(project_id: str):
reg = _registry()
if not reg.archive_project(project_id):
raise HTTPException(404, f"Project not found: {project_id}")
return {"ok": True}