From 999b049a9d20cd1c60f71b7d97908c63e0081941 Mon Sep 17 00:00:00 2001 From: Markov Date: Sun, 22 Feb 2026 19:03:25 +0100 Subject: [PATCH] feat: add chat_id to project response --- src/tracker/api/projects.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/tracker/api/projects.py b/src/tracker/api/projects.py index b1f47aa..6561b32 100644 --- a/src/tracker/api/projects.py +++ b/src/tracker/api/projects.py @@ -33,12 +33,18 @@ class ProjectOut(BaseModel): repo_urls: list[str] = [] status: str task_counter: int + chat_id: str | None = None class Config: from_attributes = True -def _project_out(p: Project) -> dict: +async def _project_out(p: Project, db: AsyncSession) -> dict: + # Get project chat + chat_result = await db.execute( + select(Chat).where(Chat.project_id == p.id, Chat.kind == "project") + ) + chat = chat_result.scalar_one_or_none() return { "id": str(p.id), "name": p.name, @@ -47,13 +53,14 @@ def _project_out(p: Project) -> dict: "repo_urls": p.repo_urls or [], "status": p.status, "task_counter": p.task_counter, + "chat_id": str(chat.id) if chat else None, } @router.get("/projects", response_model=list[ProjectOut]) async def list_projects(db: AsyncSession = Depends(get_db)): result = await db.execute(select(Project).where(Project.status == "active")) - return [_project_out(p) for p in result.scalars()] + return [await _project_out(p, db) for p in result.scalars()] @router.get("/projects/{slug}", response_model=ProjectOut) @@ -62,7 +69,7 @@ async def get_project(slug: str, db: AsyncSession = Depends(get_db)): project = result.scalar_one_or_none() if not project: raise HTTPException(404, "Project not found") - return _project_out(project) + return await _project_out(project, db) @router.post("/projects", response_model=ProjectOut) @@ -85,7 +92,7 @@ async def create_project(req: ProjectCreate, db: AsyncSession = Depends(get_db)) db.add(chat) await db.commit() - return _project_out(project) + return await _project_out(project, db) @router.patch("/projects/{slug}", response_model=ProjectOut) @@ -105,7 +112,7 @@ async def update_project(slug: str, req: ProjectUpdate, db: AsyncSession = Depen project.status = req.status await db.commit() - return _project_out(project) + return await _project_out(project, db) @router.delete("/projects/{slug}")