from fastapi import APIRouter, HTTPException from pydantic import BaseModel, Field from typing import Any, Dict, Optional from .manager import get_cms_manager router = APIRouter( prefix="/api/cms", tags=["CMS"] ) class ProjectPayload(BaseModel): project_id: str = Field(min_length=1, max_length=200) html: str = "" css: str = "" components: Optional[Any] = None styles: Optional[Any] = None @router.get("/projects/{project_id}") async def get_project(project_id: str): project = get_cms_manager().get(project_id) if project is None: raise HTTPException( status_code=404, detail="Project not found" ) return project @router.put("/projects/{project_id}") async def save_project( project_id: str, payload: ProjectPayload ): if project_id != payload.project_id: raise HTTPException( status_code=400, detail="project_id mismatch" ) return get_cms_manager().save( project_id, payload.model_dump() ) @router.delete("/projects/{project_id}") async def delete_project(project_id: str): deleted = get_cms_manager().delete(project_id) if not deleted: raise HTTPException( status_code=404, detail="Project not found" ) return { "deleted": True, "project_id": project_id }