David Prince
production: clean source snapshot — no history bloat
71b4454
Raw
History Blame Contribute Delete
1.4 kB
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
}