Files
ReadMeABook/documentation/admin-dashboard.md
T
kikootwo 3a9ae4a439 Add request approval system and audiobook path template
Implements admin approval workflow for user requests with global and per-user auto-approve controls. Adds new request statuses ('awaiting_approval', 'denied'), related API endpoints, and UI for pending approvals. Introduces configurable audiobook organization path template with validation and preview in settings, updates database schema and migrations for new fields.
2026-01-28 11:41:59 -05:00

112 lines
4.0 KiB
Markdown

# Admin Dashboard
**Status:** ✅ Implemented
Comprehensive overview of system metrics, active requests, download monitoring, and quick access to settings.
## Sections
- **Metrics:** Total requests, active downloads, completed/failed requests, total users, system health
- **Requests Awaiting Approval:** Grid of requests pending admin approval (approve/deny buttons, auto-refresh)
- **Active Downloads:** Real-time table with title, progress, speed, ETA
- **Recent Requests:** Last 50 with status and timestamps
- **Quick Actions:** Links to settings, users, scheduled jobs, system logs
## Data Sources
**GET /api/admin/metrics**
- Total requests (all time)
- Active downloads (status: 'downloading')
- Completed requests (status: 'downloaded' or 'available', last 30 days)
- Failed requests (status: 'failed', last 30 days)
- Total users
- System health indicators
**GET /api/admin/downloads/active**
- Request ID, title, progress %, speed, ETA, user
**GET /api/admin/requests/recent**
- Request ID, title, user, status, created/completed dates
**GET /api/admin/requests/pending-approval**
- Requests with status 'awaiting_approval', includes audiobook + user details
- Returns: requests array, count
**POST /api/admin/requests/[id]/approve**
- Action: 'approve' (set status to 'pending', trigger search) or 'deny' (set status to 'denied')
- Validates request is in 'awaiting_approval' status
**GET /api/admin/users**
- User ID, Plex ID, username, email, role, avatar, created/updated dates, last login, request count, autoApproveRequests
**PUT /api/admin/users/[id]**
- Update user role (user/admin), autoApproveRequests (true/false/null)
- Prevents self-demotion
**GET /api/admin/settings/auto-approve**
- Get global auto-approve setting (boolean)
**PATCH /api/admin/settings/auto-approve**
- Update global auto-approve setting (boolean)
**GET /api/admin/logs**
- Query params: page, limit, status, type
- Returns: Job logs with request/audiobook/user details, pagination info
- Filters: status (all/pending/active/completed/failed/delayed/stuck), type (all job types)
## Features
- Auto-refresh every 10 seconds (SWR)
- Back to Home button in header
- Admin role required
- Real-time progress updates
- **Requests Awaiting Approval Section:**
- Only visible when pending approval requests exist
- Grid layout (3 columns on desktop)
- Book cards with cover, title, author, user info, timestamp
- Approve (green) and Deny (red) buttons
- Loading states during approval/denial actions
- Toast notifications for success/errors
- Mutates pending-approval, recent requests, metrics caches on action
## Navigation
- `/admin/jobs` - Scheduled jobs management (trigger, edit schedule, enable/disable)
- `/admin/settings` - System settings (Plex, Prowlarr, paths)
- `/admin/users` - User management (view users, change roles)
- `/admin/logs` - System logs (view job history, errors, filter by status/type)
## User Management Features
- List all users with avatar, email, role, request count, last login, autoApproveRequests
- Edit user roles (user/admin)
- Cannot change own role (security)
- Shows request count per user
- Role badges (purple for admin, gray for user)
- **Global Auto-Approve Toggle:**
- Checkbox at top: "Auto-approve all requests by default"
- Updates Configuration.auto_approve_requests
- **Per-User Auto-Approve Control:**
- Dropdown: Use Global (null), Always Auto-Approve (true), Always Require Approval (false)
- Updates User.autoApproveRequests
- Shows effective setting (considers global + per-user)
## System Logs Features
- Real-time job monitoring (10s refresh)
- Filter by status (pending/active/completed/failed/delayed/stuck)
- Filter by job type (search_indexers/monitor_download/organize_files/scan_plex/match_plex)
- Shows related audiobook/user for request jobs
- Expandable error messages
- Duration calculation
- Attempt tracking (current/max)
- Pagination (50 logs per page)
- Shows Bull job ID
## Tech Stack
- React Server Components + SWR
- Tailwind CSS
- Prisma aggregations for metrics
- Database queries with indexing