API: no_project filter + project_id on tasks route
- list_notes(): add no_project param → Note.project_id.is_(None) filter - GET /api/notes: expose ?no_project=true - GET /api/tasks: add ?project_id= and ?no_project=true pass-through Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,7 @@ async def list_notes_route():
|
|||||||
project_id = request.args.get("project_id", type=int)
|
project_id = request.args.get("project_id", type=int)
|
||||||
milestone_id = request.args.get("milestone_id", type=int)
|
milestone_id = request.args.get("milestone_id", type=int)
|
||||||
parent_id = request.args.get("parent_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= shorthand used by web frontend (?type=task or ?type=note)
|
||||||
type_param = request.args.get("type")
|
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,
|
uid, q=q, tags=tag or None, is_task=is_task, sort=sort, order=order,
|
||||||
limit=limit, offset=offset,
|
limit=limit, offset=offset,
|
||||||
project_id=project_id, milestone_id=milestone_id, parent_id=parent_id,
|
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})
|
return jsonify({"notes": [n.to_dict() for n in notes], "total": total})
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ async def list_tasks_route():
|
|||||||
limit = min(request.args.get("limit", 50, type=int), 500)
|
limit = min(request.args.get("limit", 50, type=int), 500)
|
||||||
offset = request.args.get("offset", 0, type=int)
|
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")
|
due_before = parse_iso_date(request.args.get("due_before"), "due_before")
|
||||||
if isinstance(due_before, tuple):
|
if isinstance(due_before, tuple):
|
||||||
return due_before
|
return due_before
|
||||||
@@ -43,6 +46,8 @@ async def list_tasks_route():
|
|||||||
priority=priority,
|
priority=priority,
|
||||||
due_before=due_before,
|
due_before=due_before,
|
||||||
due_after=due_after,
|
due_after=due_after,
|
||||||
|
project_id=project_id,
|
||||||
|
no_project=no_project,
|
||||||
sort=sort,
|
sort=sort,
|
||||||
order=order,
|
order=order,
|
||||||
limit=limit,
|
limit=limit,
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ async def list_notes(
|
|||||||
milestone_id: int | None = None,
|
milestone_id: int | None = None,
|
||||||
milestone_ids: list[int] | None = None,
|
milestone_ids: list[int] | None = None,
|
||||||
parent_id: int | None = None,
|
parent_id: int | None = None,
|
||||||
|
no_project: bool = False,
|
||||||
sort: str = "updated_at",
|
sort: str = "updated_at",
|
||||||
order: str = "desc",
|
order: str = "desc",
|
||||||
limit: int = 50,
|
limit: int = 50,
|
||||||
@@ -152,6 +153,10 @@ async def list_notes(
|
|||||||
|
|
||||||
if parent_id is not None:
|
if parent_id is not None:
|
||||||
query = query.where(Note.parent_id == parent_id)
|
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)
|
count_query = count_query.where(Note.parent_id == parent_id)
|
||||||
|
|
||||||
sort_col = getattr(Note, sort, Note.updated_at)
|
sort_col = getattr(Note, sort, Note.updated_at)
|
||||||
|
|||||||
Reference in New Issue
Block a user