engineering docs

Runner database: identity dan tenancy

Status: halaman ini menjelaskan boundary dan vocabulary Runner. Ketersediaan route/model spesifik harus diverifikasi pada apps/api dan Execution Roadmap; jangan menafsirkan contoh sebagai kontrak publik yang otomatis tersedia.

runner adalah source of truth untuk identity, session, Organization tenant root, Member/RBAC, Team, Workspace, Collaboration, dan HR. User tidak otomatis menjadi Member, Employee, atau owner Organization.

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, team, collaboration, dan permission role. Member menjadi boundary akses resource organisasi; Employee adalah lifecycle HR terpisah.

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 Billing, Catalog, Commerce, dan Inventory sebagai scalar. Runner memvalidasi tenancy; database domain memvalidasi resource lokal. Tidak ada transaksi Prisma lintas lima database, sehingga workflow multi-write perlu outbox/inbox idempoten, retry terbatas, compensation, dan reconciliation.