generated from coulomb/repo-seed
feat: use hub-core progress router
This commit is contained in:
@@ -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.database import get_session
|
||||||
from api.models.progress_event import ProgressEvent
|
from api.models.progress_event import ProgressEvent
|
||||||
from api.schemas.progress_event import ProgressEventCreate, ProgressEventRead
|
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,
|
||||||
|
)
|
||||||
|
|
||||||
|
__all__ = ["router"]
|
||||||
@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
|
|
||||||
|
|||||||
@@ -155,6 +155,27 @@ class TestAddProgressEvent:
|
|||||||
})
|
})
|
||||||
assert r.status_code == 201
|
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
|
# flag_for_human — PATCH /tasks/{id} with needs_human=True
|
||||||
|
|||||||
Reference in New Issue
Block a user