mirror of
https://github.com/kikootwo/ReadMeABook.git
synced 2026-06-03 04:40:09 +00:00
3a9ae4a439
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.
112 lines
4.0 KiB
Markdown
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
|