Sistem Multi-Tenant
Arsitektur multi-tenant Temuya: satu pengguna bisa memiliki beberapa toko, bagaimana data diisolasi antar tenant, dan mekanisme switching antar toko.
Gambaran Umum
Keunggulan sejati dari aplikasi SaaS modern seperti Temuya POS terletak pada arsitektur multi-tenant-nya. Bayangkan seorang pengusaha kuliner yang sukses, memiliki lima cabang kedai kopi yang berbeda. Akan sangat merepotkan jika ia harus memiliki lima akun yang berbeda dengan lima proses login terpisah. Di Temuya POS, konsep βTenantβ merepresentasikan satu entitas bisnis atau βTokoβ.
Sistem kami dirancang agar satu entitas pengguna (User) dapat ditautkan dengan banyak entitas toko (Tenants) melalui berbagai peran (Roles) yang berbeda. Seorang pengguna mungkin adalah βOwnerβ di Toko A, namun hanya sekadar βCashierβ di Toko B, dan βManagerβ di Toko C. Arsitektur data kami memfasilitasi kompleksitas hubungan ini sambil menjamin isolasi data yang sangat ketat: kasir di Toko A tidak akan pernah, dalam situasi apa pun, dapat melihat atau memanipulasi data inventori milik Toko B.
Alur Kerja
Setiap aktivitas yang terjadi di dalam aplikasi harus secara definitif terikat dengan satu tenant tertentu yang sedang aktif. Proses identifikasi dan validasi ini terjadi secara terus-menerus.
flowchart TD
Req[Incoming HTTP Request] --> CheckSession{Valid Session Cookie?}
CheckSession -->|Ya, Autentikasi Valid| GetTenant[Membaca Header 'X-Tenant-Slug' atau URL Params]
CheckSession -->|Tidak| Reject401[Return 401 Unauthorized]
GetTenant --> Lookup{Verifikasi Akses di DB}
Lookup -->|Cek tabel tenant_users| IsAuthorized
IsAuthorized -->|Punya Akses| SetContext[Inject Tenant ID & Role ke Context]
IsAuthorized -->|Tidak Punya Akses| Reject403[Return 403 Forbidden]
SetContext --> ProcessRoute[Lanjutkan ke Bisnis Logika Endpoint]
ProcessRoute --> ExecQuery[(Query DB dengan: WHERE tenant_id = Context.TenantID)]
Setiap kali pengguna berpindah toko melalui menu dropdown antarmuka, aplikasi React akan memuat ulang preferensi (seperti profil toko, daftar kasir, dan menu) dengan mengirimkan slug unik tenant baru di setiap header API request yang dikirim ke Hono.
Teknologi & Infrastruktur
Isolasi tenant dicapai dengan kombinasi kuat antara skema database relasional dan middleware Hono.
erDiagram
USERS ||--o{ TENANT_USERS : membership
TENANTS ||--o{ TENANT_USERS : members
TENANTS ||--o{ PRODUCTS : owns
TENANTS ||--o{ TRANSACTIONS : owns
USERS {
string id PK
string email
string name
}
TENANTS {
string id PK
string slug
string name
}
TENANT_USERS {
string user_id FK
string tenant_id FK
string role
}
Tabel tenant_users adalah tabel poros (pivot) yang sangat krusial. Tabel ini tidak hanya menghubungkan siapa bergabung dengan toko mana, tetapi juga menyimpan role yang menentukan apa saja izin (permissions) yang dimiliki oleh pengguna tersebut di dalam konteks toko yang spesifik.
Keterkaitan dengan Fitur Lain
Modul multi-tenant sangat bergantung pada manajemen sesi dari modul autentikasi OAuth. Setelah pengguna dikenali secara global, barulah sistem dapat mengekstrak daftar tenant yang berhak mereka masuki dari tabel tenant_users. Selain itu, logika ini bertalian erat dengan modul Role-Based Access Control (RBAC), karena saat middleware memvalidasi akses tenant, middleware juga secara simultan memuat definisi role yang akan diperiksa oleh fungsi-fungsi seperti requirePermission('DELETE_PRODUCT') di tingkat rute endpoint.
Hal Penting yang Perlu Diketahui
Sebagai pengembang (developer), Anda harus selalu waspada dan disiplin tingkat tinggi: Setiap query database yang mengekstrak, mengubah, atau menghapus data spesifik milik toko (seperti transaksi, produk, staf) WAJIB mengikutsertakan filter WHERE tenant_id = ?. Kegagalan menambahkan klausul filter ini dapat menyebabkan bencana kebocoran data antar perusahaan (Cross-Tenant Data Leak).
Untuk meminimalisir risiko kelalaian (human error), sangat direkomendasikan untuk menggunakan utilitas query builder internal kami yang secara otomatis meng-inject tenant_id berdasarkan konteks aktif dari permintaan Hono. Penggunaan parameter slug dalam URL publik (seperti temuya.app/toko-kopi-senja) dirancang agar ramah SEO dan mudah dibagikan, yang secara otomatis dipetakan ke internal tenant_id berformat UUID yang lebih aman di lapisan middleware.
Skenario Bisnis Lanjutan dan Kasus Penggunaan
Dalam skenario operasional ke-1, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-1 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-2, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-2 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-3, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-3 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-4, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-4 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-5, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-5 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-6, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-6 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-7, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-7 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-8, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-8 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-9, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-9 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-10, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-10 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-11, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-11 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-12, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-12 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-13, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-13 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-14, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-14 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.
Dalam skenario operasional ke-15, sistem dirancang untuk menangani berbagai macam kendala yang mungkin terjadi di lapangan. Misalnya, ketika seorang kasir menghadapi antrean yang sangat panjang di jam sibuk, setiap detik sangatlah berharga. Sistem Temuya POS memastikan bahwa waktu respons aplikasi tetap berada di bawah standar industri, memberikan pengalaman yang mulus dan meminimalisir kesalahan input data.
Bagi pemilik bisnis, informasi dari transaksi ke-15 ini akan langsung dikumpulkan dan diakumulasi pada dashboard laporan akhir hari. Keputusan strategis seperti penambahan stok barang, rotasi karyawan, hingga merencanakan promosi baru sangat bergantung pada kelengkapan dan kecepatan data yang disajikan oleh arsitektur sistem ini.