61 lines
1.3 KiB
Python
61 lines
1.3 KiB
Python
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)
|