engineering docs

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 expiresAt dan activeOrganizationId.
  • 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/:organizationId

Sebelum 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.