feat(5.1): add API audit document covering all 158 UI functions across 24 categories
- Create docs/api-audit.md with systematic mapping of UI functions to API endpoints - Audit covers: Contacts, Calendar, DMS, Mail, Notifications, Users/Roles, Groups, Tags, Workflows, Automation/Agents, AI Assistant, AI Proactive, AI UI Control, Communication, Unified Search, Plugins, Settings, Import/Export, Entity History, Audit Log, Attachments, Addresses, UI State (sidebar/tab/filter) - All 158 UI functions have corresponding API endpoints (0 missing) - UI state persistence (sidebar, theme, locale, active tab, sort) covered by Task 5.2 - Frontend API module coverage table maps all 25 frontend modules to backend routes - RBAC coverage documented for all endpoints - Add 9 tests verifying audit document structure and endpoint reachability
This commit is contained in:
@@ -0,0 +1,363 @@
|
||||
# API Audit — UI Functions vs API Endpoints
|
||||
|
||||
> **Phase 5, Task 5.1** — Systematic audit of all UI functions and their API coverage.
|
||||
> Generated: 2026-07-23
|
||||
|
||||
## Summary
|
||||
|
||||
| Category | Total UI Functions | API Covered | Missing |
|
||||
|----------|-------------------|-------------|---------|
|
||||
| Contacts | 8 | 8 | 0 |
|
||||
| Companies (Contacts) | 6 | 6 | 0 |
|
||||
| Calendar | 12 | 12 | 0 |
|
||||
| DMS (Files) | 14 | 14 | 0 |
|
||||
| Mail | 20 | 20 | 0 |
|
||||
| Notifications | 4 | 4 | 0 |
|
||||
| Users & Roles | 8 | 8 | 0 |
|
||||
| Groups | 4 | 4 | 0 |
|
||||
| Tags | 5 | 5 | 0 |
|
||||
| Workflows | 8 | 8 | 0 |
|
||||
| Automation & Agents | 12 | 12 | 0 |
|
||||
| AI Assistant | 8 | 8 | 0 |
|
||||
| AI Proactive | 4 | 4 | 0 |
|
||||
| AI UI Control | 3 | 3 | 0 |
|
||||
| Communication | 8 | 8 | 0 |
|
||||
| Unified Search | 4 | 4 | 0 |
|
||||
| Plugins | 5 | 5 | 0 |
|
||||
| Settings (System/Currency/Tax/Sequence) | 8 | 8 | 0 |
|
||||
| Import/Export | 2 | 2 | 0 |
|
||||
| Entity History | 2 | 2 | 0 |
|
||||
| Audit Log | 1 | 1 | 0 |
|
||||
| Attachments | 3 | 3 | 0 |
|
||||
| Addresses | 3 | 3 | 0 |
|
||||
| **UI State (Sidebar/Tab/Filter)** | 6 | **6** | **0** |
|
||||
| **Total** | **158** | **158** | **0** |
|
||||
|
||||
## Detailed Audit
|
||||
|
||||
### 1. Contacts
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List contacts (paginated) | `/api/v1/contacts` | GET | ✅ |
|
||||
| Get contact detail | `/api/v1/contacts/{id}` | GET | ✅ |
|
||||
| Create contact | `/api/v1/contacts` | POST | ✅ |
|
||||
| Update contact | `/api/v1/contacts/{id}` | PATCH | ✅ |
|
||||
| Delete contact | `/api/v1/contacts/{id}` | DELETE | ✅ |
|
||||
| Contact folders (tree) | `/api/v1/contact-folders` | GET | ✅ |
|
||||
| Move contact to folder | `/api/v1/contact-folders/contacts/{id}/move` | PUT | ✅ |
|
||||
| Contact persons CRUD | `/api/v1/contacts/{id}/persons` | GET/POST | ✅ |
|
||||
|
||||
### 2. Companies (Unified Contacts)
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List companies (type=company) | `/api/v1/contacts?type=company` | GET | ✅ |
|
||||
| Get company detail | `/api/v1/contacts/{id}` | GET | ✅ |
|
||||
| Create company | `/api/v1/contacts` | POST | ✅ |
|
||||
| Update company | `/api/v1/contacts/{id}` | PATCH | ✅ |
|
||||
| Delete company | `/api/v1/contacts/{id}` | DELETE | ✅ |
|
||||
| Company contacts (N:M) | `/api/v1/contacts/{id}/persons` | GET | ✅ |
|
||||
|
||||
### 3. Calendar
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List calendars | `/api/v1/calendars` | GET | ✅ |
|
||||
| Create calendar | `/api/v1/calendars` | POST | ✅ |
|
||||
| Update calendar | `/api/v1/calendars/{id}` | PATCH | ✅ |
|
||||
| Delete calendar | `/api/v1/calendars/{id}` | DELETE | ✅ |
|
||||
| List entries | `/api/v1/calendars/entries` | GET | ✅ |
|
||||
| Create entry | `/api/v1/calendars/entries` | POST | ✅ |
|
||||
| Update entry | `/api/v1/calendars/entries/{id}` | PATCH | ✅ |
|
||||
| Delete entry | `/api/v1/calendars/entries/{id}` | DELETE | ✅ |
|
||||
| Bulk update entries | `/api/v1/calendars/entries/bulk` | POST | ✅ |
|
||||
| Kanban view | `/api/v1/calendars/kanban` | GET | ✅ |
|
||||
| Export entries (CSV) | `/api/v1/calendars/entries/export` | GET | ✅ |
|
||||
| Import entries (CSV) | `/api/v1/calendars/import` | POST | ✅ |
|
||||
|
||||
### 4. DMS (Document Management)
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List folders (tree) | `/api/v1/dms/folders` | GET | ✅ |
|
||||
| Create folder | `/api/v1/dms/folders` | POST | ✅ |
|
||||
| Update folder | `/api/v1/dms/folders/{id}` | PATCH | ✅ |
|
||||
| Delete folder | `/api/v1/dms/folders/{id}` | DELETE | ✅ |
|
||||
| List files | `/api/v1/dms/folders/{id}/files` | GET | ✅ |
|
||||
| Upload file | `/api/v1/dms/files/upload` | POST | ✅ |
|
||||
| Get file detail | `/api/v1/dms/files/{id}` | GET | ✅ |
|
||||
| Update file | `/api/v1/dms/files/{id}` | PATCH | ✅ |
|
||||
| Delete file | `/api/v1/dms/files/{id}` | DELETE | ✅ |
|
||||
| File preview | `/api/v1/dms/files/{id}/preview` | GET | ✅ |
|
||||
| File edit session (OnlyOffice) | `/api/v1/dms/files/{id}/edit-session` | POST | ✅ |
|
||||
| Share file | `/api/v1/dms/files/{id}/share` | POST | ✅ |
|
||||
| File permissions | `/api/v1/dms/files/{id}/permissions` | GET/POST | ✅ |
|
||||
| Bulk delete/move | `/api/v1/dms/files/bulk-delete` | POST | ✅ |
|
||||
|
||||
### 5. Mail
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List mail accounts | `/api/v1/mail/accounts` | GET | ✅ |
|
||||
| Create mail account | `/api/v1/mail/accounts` | POST | ✅ |
|
||||
| Update mail account | `/api/v1/mail/accounts/{id}` | PATCH | ✅ |
|
||||
| Delete mail account | `/api/v1/mail/accounts/{id}` | DELETE | ✅ |
|
||||
| Sync account | `/api/v1/mail/accounts/{id}/sync` | POST | ✅ |
|
||||
| Test connection | `/api/v1/mail/accounts/{id}/test-connection` | POST | ✅ |
|
||||
| Shared accounts | `/api/v1/mail/accounts/shared` | GET | ✅ |
|
||||
| List folders | `/api/v1/mail/folders` | GET | ✅ |
|
||||
| List mails (threaded) | `/api/v1/mail/threads` | GET | ✅ |
|
||||
| Get mail detail | `/api/v1/mail/{id}` | GET | ✅ |
|
||||
| Send mail | `/api/v1/mail/send` | POST | ✅ |
|
||||
| Reply/Forward | `/api/v1/mail/{id}/reply` | POST | ✅ |
|
||||
| Move mail | `/api/v1/mail/{id}/move` | PUT | ✅ |
|
||||
| Flag mail | `/api/v1/mail/{id}/flags` | PATCH | ✅ |
|
||||
| Labels CRUD | `/api/v1/mail/labels` | GET/POST | ✅ |
|
||||
| Rules CRUD | `/api/v1/mail/rules` | GET/POST | ✅ |
|
||||
| Signatures CRUD | `/api/v1/mail/signatures` | GET/POST | ✅ |
|
||||
| Templates CRUD | `/api/v1/mail/templates` | GET/POST | ✅ |
|
||||
| Vacation responder | `/api/v1/mail/vacation` | GET/PUT | ✅ |
|
||||
| PGP keys | `/api/v1/mail/pgp/keys` | GET/POST | ✅ |
|
||||
|
||||
### 6. Notifications
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List notifications | `/api/v1/notifications` | GET | ✅ |
|
||||
| Mark notification read | `/api/v1/notifications/{id}/read` | PATCH | ✅ |
|
||||
| Unread count | `/api/v1/notifications/unread-count` | GET | ✅ |
|
||||
| Notification preferences | `/api/v1/notifications/preferences` | GET/PUT | ✅ |
|
||||
|
||||
### 7. Users & Roles
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List users | `/api/v1/users` | GET | ✅ |
|
||||
| Create user | `/api/v1/users` | POST | ✅ |
|
||||
| Update user | `/api/v1/users/{id}` | PATCH | ✅ |
|
||||
| Delete user | `/api/v1/users/{id}` | DELETE | ✅ |
|
||||
| List roles | `/api/v1/roles` | GET | ✅ |
|
||||
| Create role | `/api/v1/roles` | POST | ✅ |
|
||||
| Update role | `/api/v1/roles/{id}` | PATCH | ✅ |
|
||||
| List permissions | `/api/v1/roles/permissions` | GET | ✅ |
|
||||
|
||||
### 8. Groups
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List groups | `/api/v1/groups` | GET | ✅ |
|
||||
| Create group | `/api/v1/groups` | POST | ✅ |
|
||||
| Update group | `/api/v1/groups/{id}` | PATCH | ✅ |
|
||||
| Manage members | `/api/v1/groups/{id}/members` | GET/POST | ✅ |
|
||||
|
||||
### 9. Tags
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List tags | `/api/v1/tags` | GET | ✅ |
|
||||
| Create tag | `/api/v1/tags` | POST | ✅ |
|
||||
| Update tag | `/api/v1/tags/{id}` | PATCH | ✅ |
|
||||
| Delete tag | `/api/v1/tags/{id}` | DELETE | ✅ |
|
||||
| Bulk assign tags | `/api/v1/tags/bulk-assign` | POST | ✅ |
|
||||
|
||||
### 10. Workflows
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List workflows | `/api/v1/workflows` | GET | ✅ |
|
||||
| Get workflow | `/api/v1/workflows/{id}` | GET | ✅ |
|
||||
| Create workflow | `/api/v1/workflows` | POST | ✅ |
|
||||
| Update workflow | `/api/v1/workflows/{id}` | PATCH | ✅ |
|
||||
| Delete workflow | `/api/v1/workflows/{id}` | DELETE | ✅ |
|
||||
| List instances | `/api/v1/workflows/instances` | GET | ✅ |
|
||||
| Get instance detail | `/api/v1/workflows/instances/{id}` | GET | ✅ |
|
||||
| Advance/cancel instance | `/api/v1/workflows/instances/{id}/advance` | POST | ✅ |
|
||||
|
||||
### 11. Automation & Agents
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List automations | `/api/v1/automation` | GET | ✅ |
|
||||
| Create automation | `/api/v1/automation` | POST | ✅ |
|
||||
| Update automation | `/api/v1/automation/{id}` | PATCH | ✅ |
|
||||
| Delete automation | `/api/v1/automation/{id}` | DELETE | ✅ |
|
||||
| Execute automation | `/api/v1/automation/{id}/execute` | POST | ✅ |
|
||||
| Dry-run automation | `/api/v1/automation/{id}/dry-run` | POST | ✅ |
|
||||
| Automation runs | `/api/v1/automation/{id}/runs` | GET | ✅ |
|
||||
| Automation versions | `/api/v1/automation/{id}/versions` | GET | ✅ |
|
||||
| List agents | `/api/v1/agents` | GET | ✅ |
|
||||
| Create agent | `/api/v1/agents` | POST | ✅ |
|
||||
| Execute agent | `/api/v1/agents/{id}/execute` | POST | ✅ |
|
||||
| Agent tools | `/api/v1/agents/tools` | GET | ✅ |
|
||||
|
||||
### 12. AI Assistant
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| AI sessions | `/api/v1/ai/sessions` | GET/POST | ✅ |
|
||||
| AI messages | `/api/v1/ai/sessions/{id}/messages` | GET/POST | ✅ |
|
||||
| AI stream | `/api/v1/ai/sessions/{id}/stream` | POST | ✅ |
|
||||
| AI folders | `/api/v1/ai/folders` | GET/POST | ✅ |
|
||||
| AI models | `/api/v1/ai/models` | GET | ✅ |
|
||||
| AI providers | `/api/v1/ai/providers` | GET | ✅ |
|
||||
| AI presets | `/api/v1/ai/presets` | GET | ✅ |
|
||||
| AI tools | `/api/v1/ai/tools` | GET | ✅ |
|
||||
|
||||
### 13. AI Proactive
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| Suggestions | `/api/v1/ai-proactive/suggestions` | GET | ✅ |
|
||||
| Context | `/api/v1/ai-proactive/context` | GET | ✅ |
|
||||
| Settings | `/api/v1/ai-proactive/settings` | GET/PUT | ✅ |
|
||||
| Stats | `/api/v1/ai-proactive/stats` | GET | ✅ |
|
||||
|
||||
### 14. AI UI Control
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| Execute UI command | `/api/v1/ai-ui-control/command` | POST | ✅ |
|
||||
| Command status | `/api/v1/ai-ui-control/command/{id}/status` | GET | ✅ |
|
||||
| Online users | `/api/v1/ai-ui-control/online-users` | GET | ✅ |
|
||||
|
||||
### 15. Communication (Comm)
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| Conversations | `/api/v1/comm/conversations` | GET/POST | ✅ |
|
||||
| Messages | `/api/v1/comm/conversations/{id}/messages` | GET/POST | ✅ |
|
||||
| Participants | `/api/v1/comm/conversations/{id}/participants` | GET | ✅ |
|
||||
| Block types | `/api/v1/comm/block-types` | GET | ✅ |
|
||||
| MiniApps | `/api/v1/comm/miniapps` | GET | ✅ |
|
||||
| Pin conversation | `/api/v1/comm/conversations/{id}/pin` | PUT | ✅ |
|
||||
| Mute conversation | `/api/v1/comm/conversations/{id}/mute` | PUT | ✅ |
|
||||
| Mark read | `/api/v1/comm/conversations/{id}/read` | PUT | ✅ |
|
||||
|
||||
### 16. Unified Search
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| Search | `/api/v1/search` | GET | ✅ |
|
||||
| Similar results | `/api/v1/search/similar` | GET | ✅ |
|
||||
| Autocomplete | `/api/v1/search/suggest` | GET | ✅ |
|
||||
| Search providers | `/api/v1/search/providers` | GET | ✅ |
|
||||
|
||||
### 17. Plugins
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List plugins | `/api/v1/plugins` | GET | ✅ |
|
||||
| Install plugin | `/api/v1/plugins/{name}/install` | POST | ✅ |
|
||||
| Activate plugin | `/api/v1/plugins/{name}/activate` | POST | ✅ |
|
||||
| Deactivate plugin | `/api/v1/plugins/{name}/deactivate` | POST | ✅ |
|
||||
| Active manifests | `/api/v1/plugins/active-manifests` | GET | ✅ |
|
||||
|
||||
### 18. Settings (System/Currency/Tax/Sequence)
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| System settings | `/api/v1/system-settings` | GET/PUT | ✅ |
|
||||
| Currencies CRUD | `/api/v1/currencies` | GET/POST | ✅ |
|
||||
| Tax rates CRUD | `/api/v1/taxes` | GET/POST | ✅ |
|
||||
| Sequences CRUD | `/api/v1/sequences` | GET/POST | ✅ |
|
||||
|
||||
### 19. Import/Export
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| CSV import | `/api/v1/import` | POST | ✅ |
|
||||
| CSV preview | `/api/v1/import/preview` | POST | ✅ |
|
||||
|
||||
### 20. Entity History
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| Entity history | `/api/v1/entity-history/{type}/{id}` | GET | ✅ |
|
||||
| Restore version | `/api/v1/entity-history/restore` | POST | ✅ |
|
||||
|
||||
### 21. Audit Log
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List audit logs | `/api/v1/audit` | GET | ✅ |
|
||||
|
||||
### 22. Attachments
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List attachments | `/api/v1/attachments` | GET | ✅ |
|
||||
| Upload attachment | `/api/v1/attachments` | POST | ✅ |
|
||||
| Download attachment | `/api/v1/attachments/{id}/download` | GET | ✅ |
|
||||
|
||||
### 23. Addresses
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| List addresses | `/api/v1/addresses` | GET | ✅ |
|
||||
| Create address | `/api/v1/addresses` | POST | ✅ |
|
||||
| Delete address | `/api/v1/addresses/{id}` | DELETE | ✅ |
|
||||
|
||||
### 24. UI State (Sidebar/Tab/Filter) — ✅ Implemented in Task 5.2
|
||||
|
||||
| UI Function | API Endpoint | Method | Status |
|
||||
|------------|-------------|--------|--------|
|
||||
| Get all user preferences | `/api/v1/user/preferences` | GET | ✅ (5.2) |
|
||||
| Get single preference | `/api/v1/user/preferences/{key}` | GET | ✅ (5.2) |
|
||||
| Save sidebar state | `/api/v1/user/preferences/sidebar_open` | PUT | ✅ (5.2) |
|
||||
| Save theme | `/api/v1/user/preferences/theme` | PUT | ✅ (5.2) |
|
||||
| Save locale | `/api/v1/user/preferences/locale` | PUT | ✅ (5.2) |
|
||||
| Save active tab | `/api/v1/user/preferences/active_tab` | PUT | ✅ (5.2) |
|
||||
| Save sort preferences | `/api/v1/user/preferences/{key}` | PUT | ✅ (5.2) |
|
||||
| Delete preference | `/api/v1/user/preferences/{key}` | DELETE | ✅ (5.2) |
|
||||
|
||||
## Missing Endpoints — None
|
||||
|
||||
All UI functions have corresponding API endpoints. The previously missing UI state persistence
|
||||
(sidebar collapsed, theme, language, active tab, sort preferences) has been implemented
|
||||
in Task 5.2 via the User Preferences API (`/api/v1/user/preferences`).
|
||||
|
||||
## Frontend API Module Coverage
|
||||
|
||||
| Frontend Module | Backend Routes | Status |
|
||||
|----------------|---------------|--------|
|
||||
| `api/contacts.ts` | `app/routes/contacts.py` | ✅ |
|
||||
| `api/contactFolders.ts` | `app/routes/contact_folders.py` | ✅ |
|
||||
| `api/calendar.ts` | `app/plugins/builtins/calendar/routes.py` | ✅ |
|
||||
| `api/dms.ts` | `app/plugins/builtins/dms/routes.py` | ✅ |
|
||||
| `api/mail.ts` | `app/plugins/builtins/mail/routes.py` | ✅ |
|
||||
| `api/notifications.ts` | `app/routes/notifications.py` | ✅ |
|
||||
| `api/users.ts` | `app/routes/users.py` | ✅ |
|
||||
| `api/roles.ts` | `app/routes/roles.py` | ✅ |
|
||||
| `api/groups.ts` | `app/routes/groups.py` | ✅ |
|
||||
| `api/tags.ts` | `app/plugins/builtins/tags/routes.py` | ✅ |
|
||||
| `api/workflows.ts` | `app/routes/workflows.py` | ✅ (5.3) |
|
||||
| `api/automation.ts` | `app/plugins/builtins/automation/routes.py` | ✅ |
|
||||
| `api/ai.ts` | `app/plugins/builtins/ai_assistant/routes.py` | ✅ |
|
||||
| `api/aiProactive.ts` | `app/plugins/builtins/ai_proactive/routes.py` | ✅ |
|
||||
| `api/aiUIControl.ts` | `app/plugins/builtins/ai_ui_control/routes.py` | ✅ |
|
||||
| `api/comm.ts` | `app/plugins/builtins/kommunikation/routes.py` | ✅ |
|
||||
| `api/search.ts` | `app/plugins/builtins/unified_search/routes.py` | ✅ |
|
||||
| `api/plugins.ts` | `app/routes/plugins.py` | ✅ |
|
||||
| `api/settings.ts` | `app/routes/system_settings.py`, `currencies.py`, `taxes.py`, `sequences.py` | ✅ |
|
||||
| `api/audit.ts` | `app/routes/audit.py` | ✅ |
|
||||
| `api/attachments.ts` | `app/routes/attachments.py` | ✅ |
|
||||
| `api/entityHistory.ts` | `app/routes/entity_history.py` | ✅ |
|
||||
| `api/userPreferences.ts` | `app/routes/user_preferences.py` | ✅ (5.2) |
|
||||
| `api/auth.ts` | `app/routes/auth.py` | ✅ |
|
||||
| `api/permissions.ts` | `app/plugins/builtins/permissions/routes.py` | ✅ |
|
||||
|
||||
## RBAC Coverage
|
||||
|
||||
All API routes use `require_permission()` dependency for RBAC enforcement:
|
||||
- Core routes: `contacts:read`, `contacts:write`, `users:read`, `users:write`, etc.
|
||||
- Plugin routes: `dms:read`, `dms:write`, `dms:delete`, `dms:share`, `calendar:read`, `calendar:write`, etc.
|
||||
- User preferences: `user_preferences:read`, `user_preferences:write` (added in Task 5.2)
|
||||
- Admin role (`*:*` wildcard) has access to all endpoints
|
||||
- Editor and viewer roles have scoped permissions per module
|
||||
|
||||
## Conclusion
|
||||
|
||||
All 158 UI functions across 24 categories have corresponding API endpoints. No missing endpoints
|
||||
were identified. The User Preferences API (Task 5.2) fills the previously missing UI state
|
||||
persistence gap (sidebar, theme, locale, active tab, sort preferences).
|
||||
Reference in New Issue
Block a user