Runner database: identity dan tenancy
runner adalah source of truth untuk identitas, session, organisasi, membership, dan akses.
Auth dan identity
Model utama: User, Account, Session, Verification, PasswordReset, Passkey, TwoFactor, dan Jwks. Operasi sign-in/sign-up/session mengikuti handler better-auth. Jangan membuat endpoint CRUD manual untuk password, token, private key, atau backup code.
- Password dan token selalu diproses server-side.
- Session memiliki
expiresAtdanactiveOrganizationId. - Account menghubungkan provider ke
userId. - 401 harus menghapus asumsi session di client dan mengarahkan login.
Organization dan membership
Organization menyimpan ownerId, parentId, profil, kategori, alamat, FAQ, workspace, member, employee, dan permission role. Member menjadi boundary akses resource organisasi.
POST /api/organization
GET /api/organization/:organizationId
PATCH /api/organization/:organizationId
DELETE /api/organization/:organizationIdSebelum mutasi, API wajib memastikan user adalah owner/member aktif dan bahwa organizationId valid. Child records harus membawa scope organisasi yang sama.
FAQ
FAQ berada di runner dan terkait langsung dengan organization. Dokumentasikan FAQ sebagai subsection domain organization, bukan halaman terpisah. Payload minimal harus divalidasi di server; jangan menerima organizationId dari body sebagai satu-satunya bukti akses.
{
"question": "Bagaimana cara memulai?",
"answer": "Gunakan panduan onboarding.",
"organizationId": "<validated organization id>"
}Cross-database contract
organizationId direferensikan oleh catalog, commerce, dan inventory sebagai scalar. Runner memvalidasi tenancy; database domain memvalidasi resource lokal. Tidak ada transaksi Prisma lintas empat database, sehingga workflow multi-write perlu idempotency dan kompensasi.