from fastapi import APIRouter, Response from pydantic import BaseModel from app.modules.project.application.services import ProjectService router = APIRouter(prefix="/projects", tags=["project"]) _service: ProjectService | None = None def init_router(service: ProjectService) -> None: global _service _service = service class CreateProjectRequest(BaseModel): name: str design_dir: str code_dir: str | None = None class ProjectResponse(BaseModel): id: str name: str design_dir: str code_dir: str | None created_at: str def _to_response(p) -> dict: return { "id": p.id, "name": p.name, "design_dir": p.design_dir, "code_dir": p.code_dir, "created_at": p.created_at.isoformat(), } @router.get("") def list_projects(): return [_to_response(p) for p in _service.list_projects()] @router.post("", status_code=201) def create_project(req: CreateProjectRequest): p = _service.create_project(req.name, req.design_dir, req.code_dir) return _to_response(p) @router.get("/{project_id}") def get_project(project_id: str): p = _service.get_project(project_id) return _to_response(p) @router.delete("/{project_id}", status_code=204) def delete_project(project_id: str): _service.delete_project(project_id) return Response(status_code=204)