diff --git a/src/fabledassistant/routes/notes.py b/src/fabledassistant/routes/notes.py index f34eea4..1ad37db 100644 --- a/src/fabledassistant/routes/notes.py +++ b/src/fabledassistant/routes/notes.py @@ -61,6 +61,7 @@ async def list_notes_route(): project_id = request.args.get("project_id", type=int) milestone_id = request.args.get("milestone_id", type=int) parent_id = request.args.get("parent_id", type=int) + no_project = request.args.get("no_project", "").lower() == "true" # type= shorthand used by web frontend (?type=task or ?type=note) type_param = request.args.get("type") @@ -73,6 +74,7 @@ async def list_notes_route(): uid, q=q, tags=tag or None, is_task=is_task, sort=sort, order=order, limit=limit, offset=offset, project_id=project_id, milestone_id=milestone_id, parent_id=parent_id, + no_project=no_project, ) return jsonify({"notes": [n.to_dict() for n in notes], "total": total}) diff --git a/src/fabledassistant/routes/tasks.py b/src/fabledassistant/routes/tasks.py index 91aefa9..97e3829 100644 --- a/src/fabledassistant/routes/tasks.py +++ b/src/fabledassistant/routes/tasks.py @@ -27,6 +27,9 @@ async def list_tasks_route(): limit = min(request.args.get("limit", 50, type=int), 500) offset = request.args.get("offset", 0, type=int) + project_id = request.args.get("project_id", type=int) + no_project = request.args.get("no_project", "").lower() == "true" + due_before = parse_iso_date(request.args.get("due_before"), "due_before") if isinstance(due_before, tuple): return due_before @@ -43,6 +46,8 @@ async def list_tasks_route(): priority=priority, due_before=due_before, due_after=due_after, + project_id=project_id, + no_project=no_project, sort=sort, order=order, limit=limit, diff --git a/src/fabledassistant/services/notes.py b/src/fabledassistant/services/notes.py index 8221112..cf87ce5 100644 --- a/src/fabledassistant/services/notes.py +++ b/src/fabledassistant/services/notes.py @@ -85,6 +85,7 @@ async def list_notes( milestone_id: int | None = None, milestone_ids: list[int] | None = None, parent_id: int | None = None, + no_project: bool = False, sort: str = "updated_at", order: str = "desc", limit: int = 50, @@ -152,6 +153,10 @@ async def list_notes( if parent_id is not None: query = query.where(Note.parent_id == parent_id) + + if no_project: + query = query.where(Note.project_id.is_(None)) + count_query = count_query.where(Note.project_id.is_(None)) count_query = count_query.where(Note.parent_id == parent_id) sort_col = getattr(Note, sort, Note.updated_at)