Paginate address book contacts

This commit is contained in:
2026-07-30 05:22:09 +02:00
parent 1545ea711e
commit bf1d7c9678
7 changed files with 231 additions and 16 deletions
+28 -2
View File
@@ -80,6 +80,7 @@ from govoplan_addresses.backend.service import (
create_carddav_sync_source,
create_contact,
create_sync_source,
count_contacts,
delete_address_book,
delete_address_list,
delete_address_list_entry,
@@ -430,16 +431,41 @@ def api_restore_address_book(
@router.get("/contacts", response_model=ContactListResponse)
def api_list_contacts(
address_book_id: str | None = Query(default=None),
address_list_id: str | None = Query(default=None),
query: str | None = Query(default=None),
limit: int = Query(default=200, ge=1, le=500),
offset: int = Query(default=0, ge=0),
include_deleted: bool = Query(default=False),
principal: ApiPrincipal = Depends(get_api_principal),
session: Session = Depends(get_session),
):
_require_scope(principal, "addresses:contact:read")
try:
contacts = list_contacts(session, principal, address_book_id=address_book_id, query=query, limit=limit, include_deleted=include_deleted)
return ContactListResponse(contacts=[_contact_response(contact) for contact in contacts])
contacts = list_contacts(
session,
principal,
address_book_id=address_book_id,
address_list_id=address_list_id,
query=query,
limit=limit,
offset=offset,
include_deleted=include_deleted,
)
total = count_contacts(
session,
principal,
address_book_id=address_book_id,
address_list_id=address_list_id,
query=query,
include_deleted=include_deleted,
)
return ContactListResponse(
contacts=[_contact_response(contact) for contact in contacts],
total=total,
offset=offset,
limit=limit,
has_more=offset + len(contacts) < total,
)
except AddressBookError as exc:
raise _error(exc) from exc