feat: use hub-core progress router

This commit is contained in:
2026-06-07 14:29:12 +02:00
parent 40e2e96aef
commit f41c61d0b5
2 changed files with 29 additions and 46 deletions

View File

@@ -1,51 +1,13 @@
import uuid
from datetime import datetime
from fastapi import APIRouter, Depends, Query, status
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from api.database import get_session
from api.models.progress_event import ProgressEvent
from api.schemas.progress_event import ProgressEventCreate, ProgressEventRead
from hub_core.routers.progress import create_progress_router
router = APIRouter(prefix="/progress", tags=["progress"])
router = create_progress_router(
get_session,
progress_model=ProgressEvent,
progress_create_schema=ProgressEventCreate,
progress_read_schema=ProgressEventRead,
)
@router.get("/", response_model=list[ProgressEventRead])
async def list_progress(
topic_id: uuid.UUID | None = None,
workstream_id: uuid.UUID | None = None,
task_id: uuid.UUID | None = None,
event_type: str | None = None,
since: datetime | None = None,
limit: int = Query(100, le=1000),
offset: int = Query(0, ge=0),
session: AsyncSession = Depends(get_session),
) -> list[ProgressEvent]:
q = select(ProgressEvent)
if topic_id:
q = q.where(ProgressEvent.topic_id == topic_id)
if workstream_id:
q = q.where(ProgressEvent.workstream_id == workstream_id)
if task_id:
q = q.where(ProgressEvent.task_id == task_id)
if event_type:
q = q.where(ProgressEvent.event_type == event_type)
if since:
q = q.where(ProgressEvent.created_at >= since)
q = q.order_by(ProgressEvent.created_at.desc()).offset(offset).limit(limit)
result = await session.execute(q)
return list(result.scalars().all())
@router.post("/", response_model=ProgressEventRead, status_code=status.HTTP_201_CREATED)
async def append_progress(
body: ProgressEventCreate,
session: AsyncSession = Depends(get_session),
) -> ProgressEvent:
event = ProgressEvent(**body.model_dump())
session.add(event)
await session.commit()
await session.refresh(event)
return event
__all__ = ["router"]

View File

@@ -155,6 +155,27 @@ class TestAddProgressEvent:
})
assert r.status_code == 201
async def test_progress_list_filters_by_topic(self, client):
await _create_domain(client)
topic = await _create_topic(client)
scoped = await client.post("/progress/", json={
"topic_id": topic["id"],
"summary": "Topic scoped note",
"event_type": "note",
})
assert scoped.status_code == 201
freeform = await client.post("/progress/", json={
"summary": "Freeform note",
"event_type": "note",
})
assert freeform.status_code == 201
r = await client.get("/progress/", params={"topic_id": topic["id"]})
assert r.status_code == 200
body = r.json()
assert [event["id"] for event in body] == [scoped.json()["id"]]
# ---------------------------------------------------------------------------
# flag_for_human — PATCH /tasks/{id} with needs_human=True