Skip to content

Admin (Dashboard) API Flows

JWT audience: snr_dash.

sequenceDiagram
  participant Dash as Admin Dashboard
  participant Worker as second_opinion
  participant D1 as D1

  Dash->>Worker: POST /admin/save-reviewtypes
  Worker->>D1: check duplicate active names
  alt duplicate
    Worker-->>Dash: 409 Conflict
  else ok
    Worker->>D1: INSERT review_types
    Worker-->>Dash: { review_type_id }
  end
sequenceDiagram
  participant Dash as Admin Dashboard
  participant Worker as second_opinion
  participant D1 as D1
  participant PX as Persistence
  participant Sock as Socket Hub

  Dash->>Worker: POST /admin/assign-coordinator
  Worker->>D1: UPDATE case_coordinator_id + payment_pending
  Worker->>D1: SET payment_url, total_amount
  Worker->>D1: INSERT second_opinions (is_coordinator=1)
  Worker->>D1: UPSERT sticky_header_cards (Proceed to pay)
  Worker->>D1: INSERT case_status_history milestones
  Worker->>D1: INSERT sop_activity
  Worker->>PX: fetch coordinator profile
  Worker->>Sock: notify coordinator + patient
  Worker-->>Dash: { status: 1000 }
sequenceDiagram
  participant Dash as Admin Dashboard
  participant Worker as second_opinion
  participant D1 as D1
  participant PX as Persistence

  Dash->>Worker: POST /admin/list-review-cases
  Worker->>D1: SELECT with filters (status, date, payment)
  Worker->>PX: enrich with patient/doctor names
  Worker-->>Dash: paginated case list
sequenceDiagram
  participant Dash as Admin Dashboard
  participant Worker as second_opinion
  participant D1 as D1
  participant PX as Persistence

  Dash->>Worker: POST /admin/review-case-details { case_id }
  Worker->>D1: SELECT review_cases + review_type + disease_category
  Worker->>D1: SELECT second_opinions + case_status_history
  Worker->>D1: LOAD sop_doctors (coordinator + assignees)
  Worker->>PX: fetch patient profile
  Worker->>PX: fetch PriceInfo, invoices, PaymentInfo
  Worker-->>Dash: full case detail, tracking timeline, financials
sequenceDiagram
  participant Dash as Admin Dashboard
  participant Worker as second_opinion
  participant D1 as D1

  Dash->>Worker: POST /admin/reject-reviewcase
  Worker->>D1: UPDATE status → rejected, reject_reason
  Worker->>D1: INSERT case_status_history (rejected)
  Worker->>D1: INSERT sop_activity
  Worker-->>Dash: { status: 1000 }
sequenceDiagram
  participant Dash as Admin Dashboard
  participant Worker as second_opinion
  participant D1 as D1

  Dash->>Worker: POST /admin/dashboard-overview
  Note over Worker: Riyadh timezone period bounds
  Worker->>D1: aggregate counts by status/period
  Worker-->>Dash: overview metrics
sequenceDiagram
  participant Dash as Admin Dashboard
  participant Worker as second_opinion
  participant D1 as D1
  participant PX as Persistence
  participant Sock as Socket Hub

  Dash->>Worker: POST /admin/cancel-review-case { case_id, reason }
  Worker->>D1: validate case status
  alt payment was taken
    Worker->>PX: post refund to Payment Hub
  end
  Worker->>D1: UPDATE status → cancelled
  Worker->>D1: INSERT case_status_history + sop_activity
  Worker->>Sock: notify patient
  Worker-->>Dash: { status: 1000 }
sequenceDiagram
  participant Dash as Admin Dashboard
  participant Worker as second_opinion
  participant D1 as D1

  Dash->>Worker: POST /admin/edit-coordinator { case_id, doctor_id }
  Note over Worker: Only while status = payment_pending
  Worker->>D1: UPDATE case_coordinator_id
  Worker->>D1: deactivate old second_opinions coordinator row
  Worker->>D1: INSERT new coordinator second_opinions row
  Worker->>D1: INSERT sop_activity
  Worker-->>Dash: { status: 1000 }
sequenceDiagram
  participant Dash as Admin Dashboard
  participant Worker as second_opinion
  participant D1 as D1

  Dash->>Worker: POST /admin/verify-case-and-emp { case_id, emp_id }
  Worker->>D1: check case exists
  Worker->>D1: check sop_doctors / coordinator eligibility
  Worker-->>Dash: { valid: true/false }

Admin setup CRUD (no sequence diagrams — straightforward D1 operations). See API Reference for request/response shapes.

AreaEndpoints
Review typessave-reviewtypes, list-reviewtypes, reviewtype-details, edit-reviewtypes, update-status, fetch-types-and-diseases
Disease categoriessave-disease-categories, list-disease-categories, disease-category-details, disease-category-edit, disease-category-update-status, map-doctors, list-mapped-doctors, mapped-doctors-details, list-mapped-department
Case coordinatorssave-case-coordinators, list-case-coordinators, case-coordinator-details, edit-case-coordinators, coordinator-list, list-assign-coordinator-doctors