feat: Admin User Management - Display vehicles per user with system-wide vehicle count widget #11
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Enhance the admin user management interface to display vehicle information associated with each user, and add a system-wide total vehicles widget to the admin dashboard.
Requirements
1. Total Vehicles Widget (Admin Dashboard)
2. User Vehicle List (Admin User Management)
3. User Profile Page
Security Requirements
UI/UX Specifications
Acceptance Criteria
Plan: Admin User Management - Vehicle Display Features
Phase: Planning | Agent: Planner | Status: AWAITING_REVIEW
Overview
This plan implements three features for issue #11: (1) Total Vehicles widget on admin dashboard, (2) expandable user rows showing vehicle details in admin user management, and (3) My Vehicles section on user profile page. The approach uses separate API endpoints for stats and vehicle details, enabling cacheable stats queries and lazy-loading of vehicle data on row expansion.
Planning Context
Decision Log
Rejected Alternatives
Constraints & Assumptions
Known Risks
WHERE user_id = $1 AND is_active = trueInvisible Knowledge
Architecture
Data Flow
Invariants
Milestones
Milestone 1: Backend - Admin Stats Endpoint
Files:
backend/src/features/user-profile/data/user-profile.repository.tsbackend/src/features/admin/api/users.controller.tsbackend/src/features/admin/api/admin.routes.tsRequirements:
getTotalVehicleCount()method to user-profile.repository.tsgetAdminStats()handler to users.controller.ts{totalVehicles: number, totalUsers: number}Acceptance Criteria:
Tests:
backend/src/features/admin/tests/integration/admin-stats.integration.test.tsMilestone 2: Backend - User Vehicles Endpoint
Files:
backend/src/features/user-profile/data/user-profile.repository.tsbackend/src/features/admin/api/users.controller.tsbackend/src/features/admin/api/admin.routes.tsbackend/src/features/admin/types/admin.types.tsRequirements:
getUserVehiclesForAdmin(auth0Sub)method returning[{year, make, model}]getUserVehicles()handler to users.controller.tsAcceptance Criteria:
Tests:
backend/src/features/admin/tests/integration/admin-user-vehicles.integration.test.tsMilestone 3: Frontend Desktop - Admin Dashboard Updates
Files:
frontend/src/features/admin/api/admin.api.tsfrontend/src/features/admin/hooks/useUsers.tsfrontend/src/features/admin/types/admin.types.tsfrontend/src/pages/admin/AdminUsersPage.tsxRequirements:
getAdminStats()andgetUserVehicles(auth0Sub)to admin.api.tsuseAdminStats()anduseUserVehicles(auth0Sub)hooksAcceptance Criteria:
Tests:
frontend/src/features/admin/__tests__/AdminUsersPage.test.tsxMilestone 4: Frontend Desktop - Profile Vehicles Section
Files:
frontend/src/pages/SettingsPage.tsxRequirements:
useVehicles()hook from vehicles featureAcceptance Criteria:
Tests:
frontend/src/pages/__tests__/SettingsPage.test.tsxMilestone 5: Frontend Mobile - Admin + Profile Updates
Files:
frontend/src/features/admin/mobile/AdminUsersMobileScreen.tsxfrontend/src/features/settings/mobile/MobileSettingsScreen.tsxRequirements:
Acceptance Criteria:
Tests:
frontend/src/features/admin/mobile/__tests__/AdminUsersMobileScreen.test.tsxMilestone 6: Documentation
Files:
backend/src/features/admin/README.mdRequirements:
Acceptance Criteria:
Milestone Dependencies
M1 and M2 can execute in parallel (both backend).
M3 requires M1 and M2 (frontend needs backend APIs).
M4 can start immediately (uses existing API).
M5 requires M3 and M4 patterns established.
M6 follows all implementation.
Verdict: AWAITING_REVIEW | Next: Quality review of plan