[Performance] Add pagination and batch loading to access admin lists #12

Closed
opened 2026-07-11 11:39:42 +02:00 by zemion · 3 comments
Owner

Several access admin list endpoints fetch full tables and then call helper functions that run additional queries per row. This will become slow with larger tenants.

Code paths: src/govoplan_access/backend/api/v1/routes.py:1080, src/govoplan_access/backend/api/v1/routes.py:2037, src/govoplan_access/backend/api/v1/admin_common.py:85, src/govoplan_access/backend/api/v1/admin_common.py:111, src/govoplan_access/backend/api/v1/admin_common.py:141.

Acceptance: full-list endpoints use cursor/page-size parameters or route clients to delta/paginated APIs, summaries batch-load related data, tests assert bounded query counts, and small-tenant UI behavior remains intact.

Several access admin list endpoints fetch full tables and then call helper functions that run additional queries per row. This will become slow with larger tenants. Code paths: `src/govoplan_access/backend/api/v1/routes.py:1080`, `src/govoplan_access/backend/api/v1/routes.py:2037`, `src/govoplan_access/backend/api/v1/admin_common.py:85`, `src/govoplan_access/backend/api/v1/admin_common.py:111`, `src/govoplan_access/backend/api/v1/admin_common.py:141`. Acceptance: full-list endpoints use cursor/page-size parameters or route clients to delta/paginated APIs, summaries batch-load related data, tests assert bounded query counts, and small-tenant UI behavior remains intact. <!-- codex-audit-2026-07-11:access-nplus1 -->
Author
Owner

Codex State: progress

Summary

  • Added bounded pagination metadata and page/page_size parameters to legacy admin list endpoints for identities, users, groups, roles, system roles, system accounts, and API keys.
  • Left delta endpoints unchanged because their first-load/full-snapshot behavior needs frontend cursor continuation work before changing response shape.

Changed Files

  • src/govoplan_access/backend/api/v1/admin_schemas.py
  • src/govoplan_access/backend/api/v1/routes.py
  • tests/test_admin_pagination.py

Verification

  • PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m unittest tests.test_optional_tenancy_contract tests.test_admin_pagination
  • PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m compileall -q src tests

Next / Blocked

  • Add bounded continuation semantics to delta/full-snapshot admin views if this issue is meant to cover the WebUI initial-load path too.

Suggested status label: status/in-progress

## Codex State: progress ### Summary - Added bounded pagination metadata and page/page_size parameters to legacy admin list endpoints for identities, users, groups, roles, system roles, system accounts, and API keys. - Left delta endpoints unchanged because their first-load/full-snapshot behavior needs frontend cursor continuation work before changing response shape. ### Changed Files - `src/govoplan_access/backend/api/v1/admin_schemas.py` - `src/govoplan_access/backend/api/v1/routes.py` - `tests/test_admin_pagination.py` ### Verification - `PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m unittest tests.test_optional_tenancy_contract tests.test_admin_pagination` - `PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m compileall -q src tests` ### Next / Blocked - Add bounded continuation semantics to delta/full-snapshot admin views if this issue is meant to cover the WebUI initial-load path too. Suggested status label: `status/in-progress`
Author
Owner

Codex State: progress

Summary

  • Extended the pagination slice with batch summary helpers for accounts, user groups, direct roles, group members, group roles, tenant role assignment counts, system role assignment counts, and API key owner accounts.
  • Wired the paginated users, groups, roles, system roles/system accounts shared-role list, and API key endpoints to the batch helpers while leaving delta/full-snapshot endpoints unchanged.

Changed Files

  • src/govoplan_access/backend/api/v1/admin_common.py
  • src/govoplan_access/backend/api/v1/routes.py
  • tests/test_admin_batch_helpers.py
  • tests/test_admin_pagination.py

Verification

  • PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m unittest tests.test_optional_tenancy_contract tests.test_admin_pagination tests.test_admin_batch_helpers
  • PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m compileall -q src tests

Next / Blocked

  • Still open: decide and implement bounded continuation semantics for delta full snapshots, and add API-level query-count regression coverage before closing.

Suggested status label: status/in-progress

## Codex State: progress ### Summary - Extended the pagination slice with batch summary helpers for accounts, user groups, direct roles, group members, group roles, tenant role assignment counts, system role assignment counts, and API key owner accounts. - Wired the paginated users, groups, roles, system roles/system accounts shared-role list, and API key endpoints to the batch helpers while leaving delta/full-snapshot endpoints unchanged. ### Changed Files - `src/govoplan_access/backend/api/v1/admin_common.py` - `src/govoplan_access/backend/api/v1/routes.py` - `tests/test_admin_batch_helpers.py` - `tests/test_admin_pagination.py` ### Verification - `PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m unittest tests.test_optional_tenancy_contract tests.test_admin_pagination tests.test_admin_batch_helpers` - `PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m compileall -q src tests` ### Next / Blocked - Still open: decide and implement bounded continuation semantics for delta full snapshots, and add API-level query-count regression coverage before closing. Suggested status label: `status/in-progress`
Author
Owner

Codex State: done

Summary

  • Completed bounded access admin list loading: legacy list endpoints are paginated, identity/user/group/role/API-key summaries use batch helpers, and delta initial snapshots now page through full snapshots with full:* continuation cursors before returning a normal seq:* watermark.
  • Adjusted access WebUI delta merging so paged full snapshots accumulate instead of replacing earlier pages, including the custom system users panel loop.

Changed Files

  • src/govoplan_access/backend/api/v1/admin_common.py
  • src/govoplan_access/backend/api/v1/admin_schemas.py
  • src/govoplan_access/backend/api/v1/routes.py
  • webui/src/features/admin/utils/deltaRows.ts
  • webui/src/features/admin/SystemUsersPanel.tsx
  • tests/test_admin_batch_helpers.py
  • tests/test_admin_pagination.py

Verification

  • PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m unittest tests.test_optional_tenancy_contract tests.test_admin_pagination tests.test_admin_batch_helpers tests.test_auth_dependencies
  • PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m compileall -q src tests
  • /home/zemion/.nvm/versions/node/v22.22.3/bin/npm run build in govoplan-core/webui
## Codex State: done ### Summary - Completed bounded access admin list loading: legacy list endpoints are paginated, identity/user/group/role/API-key summaries use batch helpers, and delta initial snapshots now page through full snapshots with full:* continuation cursors before returning a normal seq:* watermark. - Adjusted access WebUI delta merging so paged full snapshots accumulate instead of replacing earlier pages, including the custom system users panel loop. ### Changed Files - `src/govoplan_access/backend/api/v1/admin_common.py` - `src/govoplan_access/backend/api/v1/admin_schemas.py` - `src/govoplan_access/backend/api/v1/routes.py` - `webui/src/features/admin/utils/deltaRows.ts` - `webui/src/features/admin/SystemUsersPanel.tsx` - `tests/test_admin_batch_helpers.py` - `tests/test_admin_pagination.py` ### Verification - `PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m unittest tests.test_optional_tenancy_contract tests.test_admin_pagination tests.test_admin_batch_helpers tests.test_auth_dependencies` - `PYTHONPATH=/mnt/DATA/git/govoplan-core/src:/mnt/DATA/git/govoplan-access/src:/mnt/DATA/git/govoplan-tenancy/src /mnt/DATA/git/govoplan/.venv/bin/python -m compileall -q src tests` - `/home/zemion/.nvm/versions/node/v22.22.3/bin/npm run build in govoplan-core/webui`
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: add-ideas/govoplan-access#12
No description provided.