Databases
Detail lifecycle, ownership, dan delivery status kanonis berada di Blueprint. Halaman database ini adalah referensi domain teknis; jangan menganggap model atau contoh endpoint sebagai fitur yang sudah tersedia bila Roadmap belum mencatatnya.
Domains
Domain database dibagi menjadi lima services yang terpisah. Setiap client hanya mereferensikan schema database berdasarkan domainnya.
| Name | Client | Environment | Ownership |
|---|---|---|---|
| billing | dbBilling | DATABASE_BILLING_URL | plan, subscription, entitlement, usage, Aori billing |
| runner | dbRunner | DATABASE_RUNNER_URL | identity, tenancy, access |
| catalog | dbCatalog | DATABASE_CATALOG_URL | product, service, pricing |
| commerce | dbCommerce | DATABASE_COMMERCE_URL | transaction lifecycle |
| inventory | dbInventory | DATABASE_INVENTORY_URL | stock ledger and warehouse |
Database Provider
Saat ini semua database menggunakan provider MongoDB.
Object-Relational Mapping
Object-Relational Mapping (ORM) yang digunakan untuk mengelola semua schema database adalah Prisma versi 6.15.0, sebagai jalur MongoDB yang stabil, Prisma 7 banyak yang tidak didukung untuk MongoDB, sementara Prisma 8 memiliki jalur MongoDB baru; detail client/API-nya berbeda. (Prisma)
Baca juga tips.
Referential integrity
Cross-database ID seperti organizationId, productId, dan memberId adalah scalar. Service harus melakukan lookup ke owner database sebelum write dan menolak reference yang tidak valid.
Tidak ada transaksi ACID lintas client. Untuk workflow multi-database, gunakan idempotency key, ordered writes, retry yang aman, dan compensation. Jangan menampilkan generated Prisma client pada client bundle.
Billing menentukan entitlement tenant; Runner, Catalog, Commerce, dan Inventory tetap memegang authorization serta menghitung penggunaan resource miliknya secara atomik. Aksi berfitur selalu membutuhkan entitlement dan permission actor.
Konvensi global
Money: BigInt
Quantity: Int + quantityScale
Ratio / percentage: Float hanya jika memang sifatnya numerik aproksimatifContoh:
1.25 kg
quantityScale = 2
quantity = 125dan bukan:
quantity = 1.25;Sehingga:
Catalog
β
Commerce
β
Inventorymenggunakan representasi type field yang identik dan tidak ada conversion boundary berbasis IEEE-754 Float pada quantity.
Catatan Prisma/MongoDB
Composite types yang digunakan pada schema memang merupakan fitur MongoDB Prisma dan cocok untuk embedded value objects. (Prisma)
MongoDB Prisma juga mendukung transaction API pada Prisma v6; dokumentasi v6 menyatakan MongoDB menggunakan transaction untuk nested/multi-operation writes dan membutuhkan deployment replica set. (Prisma)
Untuk Inventory, ini bukan sekadar nice-to-have. Operasi seperti:
reserve stock
+ update WarehouseStock
+ update LotBalancedan:
transfer
+ source movement
+ destination movement
+ lot balancesharus diperlakukan sebagai atomic business operation.
Jadi environment production harus menggunakan MongoDB replica set/Atlas.
Status implementasi
Skema bukan bukti sebuah capability sudah production-ready. Katalog, Commerce, Inventory, event publisher/inbox, reconciliation, subscription lifecycle, dan policy retention memiliki tahap implementasi berbeda. Rujuk Execution Roadmap sebelum memakai capability atau menambah consumer lintas domain.
Migration
Sebelum menerapkan perubahan schema model ke database production, perubahan tersebut sebaiknya dimigrasikan dalam beberapa tahap agar historical data tidak hilang.