Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions src/agents-api/agents_api/queries/docs/list_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@
d.embedding_dimensions,
d.language,
d.metadata,
d.created_at
d.created_at,
d.updated_at
FROM docs d
JOIN doc_owners doc_own
ON d.developer_id = doc_own.developer_id
Expand All @@ -47,6 +48,12 @@
AND doc_own.owner_id = $4
"""

# AIDEV-NOTE: map exposed sort keys to fully-qualified columns to avoid join ambiguity
SORT_COLUMN_MAP: dict[str, str] = {
"created_at": "d.created_at",
"updated_at": "d.updated_at",
}


@rewrap_exceptions(common_db_exceptions("doc", ["list"]))
@wrap_in_class(
Expand Down Expand Up @@ -128,12 +135,13 @@ async def list_docs(
d.embedding_dimensions,
d.language,
d.metadata,
d.created_at"""
d.created_at,
d.updated_at"""

# Add sorting and pagination
query += (
f" ORDER BY {sort_by} {direction} LIMIT ${len(params) + 1} OFFSET ${len(params) + 2}"
)
order_column = SORT_COLUMN_MAP[sort_by]
direction_sql = "ASC" if direction == "asc" else "DESC"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add explicit validation for the sort direction. Currently, any value other than 'asc' defaults to 'DESC', but tests expect an HTTPException with "Invalid sort direction" for invalid inputs.

query += f" ORDER BY {order_column} {direction_sql} LIMIT ${len(params) + 1} OFFSET ${len(params) + 2}"
params.extend([limit, offset])

return query, params
51 changes: 51 additions & 0 deletions src/agents-api/tests/test_docs_queries.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import asyncio
from uuid import uuid4

from agents_api.autogen.openapi_model import CreateDocRequest, Doc
Expand Down Expand Up @@ -346,6 +347,56 @@ async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
assert exc.raised.detail == "Invalid sort direction"


@test("queries filters test... list docs sorted by updated_at uses latest timestamps")
async def _(dsn=pg_dsn, developer=test_developer, user=test_user):
pool = await create_db_pool(dsn=dsn)

shared_metadata = {"sort_group": "updated_at_sort_regression"}

first_doc = await create_doc(
developer_id=developer.id,
data=CreateDocRequest(
title="Sort regression doc 1",
content="content one",
metadata=shared_metadata,
embed_instruction="Embed",
),
owner_type="user",
owner_id=user.id,
connection_pool=pool,
)

# Ensure the second document has a greater updated_at timestamp
await asyncio.sleep(0.01)

second_doc = await create_doc(
developer_id=developer.id,
data=CreateDocRequest(
title="Sort regression doc 2",
content="content two",
metadata=shared_metadata,
embed_instruction="Embed",
),
owner_type="user",
owner_id=user.id,
connection_pool=pool,
)

docs = await list_docs(
developer_id=developer.id,
owner_type="user",
owner_id=user.id,
connection_pool=pool,
metadata_filter=shared_metadata,
sort_by="updated_at",
direction="desc",
)

assert len(docs) >= 2
assert docs[0].id == second_doc.id
assert docs[1].id == first_doc.id


@test("query: list agent docs")
async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent):
pool = await create_db_pool(dsn=dsn)
Expand Down