mirror of
https://github.com/kikootwo/ReadMeABook.git
synced 2026-06-02 20:30:10 +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.
4.0 KiB
4.0 KiB
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