Stack auth
Kode:apps/api/src/auth/better-auth.ts, auth.middleware.ts, roles.ts
Peran
Middleware
requireRole(['admin']) atau requireRole(['peserta']) dipasang per route.
Frontend: AdminRoute vs UserRoute di apps/web/src/routes/.
Flow login biasa
Auto-login setelah pembayaran
Saat peserta bayar lewat Scalev, mereka belum punya session. Flow claim membuat session otomatis: Field terkait:payment_sessions.sign_in_token, sign_in_token_expiry.
Kalau token gagal/expired, UI fallback ke login manual (requiresLogin: true).
Registrasi publik
POST /api/payment/register (dari /register/:batchSlug/:tierSlug):
- Validasi batch
open+ tier aktif - Provision user Better Auth (email + password)
- Buat
peserta+enrollmentpending - Buat
payment_session+ order Scalev
Bearer token
Pluginbearer() aktif — API menerima Authorization: Bearer <token> untuk client non-browser.