# Setrip โ€” Admin Roadmap (Index) Status implementasi kemampuan admin agar admin **dapat mengontrol seluruh aplikasi saat ada insiden**, bukan hanya read-only dashboard. > **Prinsip:** admin adalah safety net terakhir saat sistem otomatis gagal atau ada bad actor. Setiap action admin harus auditable (siapa, kapan, alasan), idempotent, dan terbatas hanya untuk admin yang terdaftar di `ADMIN_EMAILS`. --- ## Baseline (yang BISA admin lakukan sekarang) | Area | Fungsi | File | |---|---|---| | Dashboard | View count: verifikasi PENDING, refund per status, payout per status | [app/admin/page.tsx](app/admin/page.tsx) | | **Trips** | List + search + detail; force-cancel dengan auto-refund (admin intervention) | [app/admin/trips/](app/admin/trips/) | | **Bookings detail** | Timeline lintas Payment + Refund + Payout, raw callback viewer, Midtrans reconcile | [app/admin/bookings/[id]/page.tsx](app/admin/bookings/[id]/page.tsx) | | Verifikasi KYC | Approve / Reject organizer (KTP, liveness, bank) | [app/admin/verifications/page.tsx](app/admin/verifications/page.tsx) | | Refund | Create manual, approve, reject, mark SUCCEEDED, mark FAILED + link ke booking timeline | [app/admin/refunds/page.tsx](app/admin/refunds/page.tsx) | | Payout | View per status, mark PAID setelah transfer manual + link ke booking timeline | [app/admin/payouts/page.tsx](app/admin/payouts/page.tsx) | Auth admin: env `ADMIN_EMAILS` โ†’ cek di [lib/admin.ts](lib/admin.ts), dipassing ke session via [lib/auth.ts](lib/auth.ts). --- ## Roadmap per area | Roadmap | Prioritas | Status | File | |---|---|---|---| | Trip Operations (search, view, cancel manual) | ๐Ÿ”ด HIGH | โœ… **Delivered** | [docs/archive/ADMIN_TRIP_OPS_ROADMAP.md](docs/archive/ADMIN_TRIP_OPS_ROADMAP.md) | | Payment Operations (booking detail, reconcile, dispute) | ๐Ÿ”ด HIGH | โœ… **Delivered** | [docs/archive/ADMIN_PAYMENT_OPS_ROADMAP.md](docs/archive/ADMIN_PAYMENT_OPS_ROADMAP.md) | | Audit & Investigation (search, filter, export) | ๐Ÿ”ด HIGH | โณ 0% | [ADMIN_AUDIT_ROADMAP.md](ADMIN_AUDIT_ROADMAP.md) | | User Management (search, suspend/ban) | ๐ŸŸก MEDIUM | โณ 0% | [ADMIN_USER_MGMT_ROADMAP.md](ADMIN_USER_MGMT_ROADMAP.md) | | Verification (reopen, re-upload request) | ๐ŸŸก MEDIUM | โณ 0% | [ADMIN_VERIFICATION_ROADMAP.md](ADMIN_VERIFICATION_ROADMAP.md) | | System Health (cron monitor, stale state alerts) | ๐ŸŸก MEDIUM | โณ 0% | [ADMIN_SYSTEM_HEALTH_ROADMAP.md](ADMIN_SYSTEM_HEALTH_ROADMAP.md) | **Legend status:** โณ belum mulai ยท ๐Ÿšง partial ยท โœ… selesai (lihat archive untuk detail delivery) --- ## Iterasi berikutnya (sisa HIGH + MEDIUM) Setelah Trip Ops + Payment Ops, urutan berikutnya: 1. **Audit & Investigation** (HIGH) โ€” filter date range, search global, CSV export. Penting untuk compliance & investigasi dispute. 2. **User Management** (MEDIUM) โ€” search + suspend/ban. Butuh schema change (`User.suspended`). 3. **System Health** (MEDIUM) โ€” cron monitor + stale state alerts. Butuh model baru (`CronRun`). 4. **Verification** (MEDIUM) โ€” reopen REJECTED + re-upload request. Edge case rare tapi kecil scope. --- ## Tindakan manual setelah deploy Untuk versi yang berisi delivery Trip Ops + Payment Ops: ```bash # Apply migration baru (add_trip_admin_cancel) npx prisma migrate deploy # Restart Next.js / PM2 supaya Prisma client baru ter-load pm2 restart setrip --update-env ``` Brief admin tentang dua kapabilitas baru: - **Force-cancel trip** di `/admin/trips/[id]` โ€” pakai saat organizer unreachable / dispute, reason wajib min 10 karakter. - **Reconcile Midtrans** di `/admin/bookings/[id]` โ€” pakai saat peserta lapor "sudah bayar tapi status belum update". Idempotent, aman diulang.