diff --git a/src/tracker/api/tasks.py b/src/tracker/api/tasks.py index a7a3853..dbd3a1d 100644 --- a/src/tracker/api/tasks.py +++ b/src/tracker/api/tasks.py @@ -219,6 +219,7 @@ async def list_tasks( status: Optional[str] = Query(None), assignee_id: Optional[str] = Query(None), label: Optional[str] = Query(None), + search: Optional[str] = Query(None, alias="q"), db: AsyncSession = Depends(get_db), ): q = select(Task).options( @@ -237,6 +238,13 @@ async def list_tasks( q = q.where(Task.assignee_id == uuid.UUID(assignee_id)) if label: q = q.where(Task.labels.contains([label])) + if search: + # Search by number or title + try: + num = int(search.split("-")[-1] if "-" in search else search) + q = q.where((Task.number == num) | (Task.title.ilike(f"%{search}%"))) + except ValueError: + q = q.where(Task.title.ilike(f"%{search}%")) q = q.order_by(Task.position, Task.created_at) result = await db.execute(q) return [task_out(t, t.project.slug if t.project else "") for t in result.unique().scalars()]