feat: add chat_id to project response
Some checks failed
Deploy Tracker / deploy (push) Failing after 0s

This commit is contained in:
Markov 2026-02-22 19:03:25 +01:00
parent e65d66125e
commit 999b049a9d

View File

@ -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}")