Summary
Client-side portion of group-scoped quotas. Blocked on ericfitz/tmi#647 (server API + precedence design).
Current Behavior
The quotas page is strictly user-scoped: two cards ("API rate limits" admin-quotas.component.html:37-247, "Webhook limits" :250-503), each a flat MatTableDataSource with its own paginator and inline row-edit state (EditableUserAPIQuota/EditableWebhookQuota, admin-quotas.component.ts:54-72). Owner enrichment does a GET /admin/users/{uuid} per row (quota.service.ts:189-258) — an N+1 that will matter more with a second scope.
Proposed Approach
Once the API exists: introduce a scope dimension (user | group) rather than duplicating the cards — a scope toggle or tabs above the tables, a generic subject column (provider display + email for users, group badge for groups), and a subject-type choice in the add/copy dialogs swapping user search for group search (GroupAdminService.list already exists). Generalize the enrichment layer to a subject label and factor out the shared inline-edit machinery before it gets cloned a third time.
Summary
Client-side portion of group-scoped quotas. Blocked on ericfitz/tmi#647 (server API + precedence design).
Current Behavior
The quotas page is strictly user-scoped: two cards ("API rate limits"
admin-quotas.component.html:37-247, "Webhook limits" :250-503), each a flatMatTableDataSourcewith its own paginator and inline row-edit state (EditableUserAPIQuota/EditableWebhookQuota,admin-quotas.component.ts:54-72). Owner enrichment does aGET /admin/users/{uuid}per row (quota.service.ts:189-258) — an N+1 that will matter more with a second scope.Proposed Approach
Once the API exists: introduce a scope dimension (
user | group) rather than duplicating the cards — a scope toggle or tabs above the tables, a genericsubjectcolumn (provider display + email for users, group badge for groups), and a subject-type choice in the add/copy dialogs swapping user search for group search (GroupAdminService.listalready exists). Generalize the enrichment layer to a subject label and factor out the shared inline-edit machinery before it gets cloned a third time.