Files
ReadMeABook/documentation/admin-dashboard.md
T
kikootwo aefc9ef667 Admin requests: paginated API & UI overhaul
Add a paginated Admin Requests API and fully refactor the admin requests UI to support filtering, sorting, pagination, and URL state.

- New API: src/app/api/admin/requests/route.ts implements paginated, searchable, filterable, and sortable request listing with proper relation includes and pagination metadata.
- Frontend: RecentRequestsTable rewritten to fetch via SWR (authenticatedFetcher), read/write URL query params, debounce search, support status/user filters, sortable columns, page size selector, and full pagination UI; added loading/error states and toast feedback for actions.
- Admin page updated to use Suspense and the new RecentRequestsTable (component now fetches its own data).
- Settings: deprecated single download-client PUT route now maps updates into the new multi-client format (download_clients JSON), logs deprecation, and invalidates download client manager; settings GET now reads multi-client config for backward compatibility.
- Processors: monitor-download and retry-failed-imports updated to use the download-client-manager and new PathMappingConfig shape for path mapping logic.
- Minor API/schema updates: request-with-torrent schema extended (indexerId, infoUrl, protocol) and setup complete no longer writes legacy path keys.
- Tests updated to reflect API and processor changes.

This change centralizes request management on the server, modernizes the UI for large datasets, and migrates download client settings toward a multi-client configuration while keeping backward compatibility.
2026-02-02 10:24:09 -05:00

4.9 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
  • Request Management: Full-featured table with filtering, sorting, pagination
  • 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 (Paginated)

  • Query params: page, pageSize (10|25|50|100), search, status, userId, sortBy, sortOrder
  • Returns: requests[], total, page, pageSize, totalPages
  • Sorting: createdAt (default), completedAt, title, user, status
  • Filtering: by status, by user, text search (title/author)

GET /api/admin/requests/recent (Legacy)

  • Request ID, title, user, status, created/completed dates
  • Limited to 50 entries, no filtering

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)

Request Management Features

  • Filter Bar:
    • Text search (title/author, 300ms debounce)
    • Status dropdown (all statuses)
    • User dropdown (all users)
    • Clear filters button
  • Sortable Columns: Click headers to sort by title, user, status, requested, completed
  • Pagination: Page navigation, page size selector (10/25/50/100), results count
  • URL State: Filters/sort/page stored in URL query params (shareable, bookmarkable)
  • Actions: Delete, cancel, manual search, fetch ebook (via dropdown)

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