Deklarasi Arsitektur Isolasi Data
Fondasi multi-tenant white-label: semua tabel baru V109 wajib membawa tenant_id — satu database fisik, isolasi logis yang ketat.
Aturan 1: setiap tabel baru wajib tenant_id
Mulai V109, semua tabel uc_* baru wajib memuat tenant_id TEXT NOT NULL DEFAULT 'aifeng'. Tabel tanpa kolom ini tidak boleh digabung. uc_tenant_v109 / uc_tenant_cfg_v109 sudah memulai.
Aturan 2: query wajib filter tenant
Semua baca/tulis memakai WHERE tenant_id = %(tenant)s (atau filter kunci proyek) di level SQL; dilarang full-scan lintas tenant. Review kode dan skrip acceptance memeriksa aturan ini.
Aturan 3: seed & impor idempoten
Semua data seed ditandai data_origin, memakai INSERT ... ON CONFLICT idempoten; eksekusi berulang tidak menggandakan baris dan tidak menimpa status yang diubah manual.
Aturan 4: data lama tidak disentuh
Tabel/data lama v32/v33/v34 tidak pernah dihapus/diubah; fitur baru selalu memakai tabel berversi uc_*_v109. Rollback = matikan rute + tabel tetap disimpan.
Tabel yang dibuat modul ini
| Table | tenant_id | data_origin |
|---|---|---|
uc_tenant_v109 | TEXT NOT NULL DEFAULT 'aifeng' | v109_tenant_seed |
uc_tenant_cfg_v109 | TEXT NOT NULL DEFAULT 'aifeng' | v109_tenant_seed |
Janji isolasi saat digandakan untuk rekanan
Setiap rekanan = satu project (tenant_id/project_key). Baris pelanggan, percakapan, dan pesanannya semua tergantung pada tenant_id masing-masing; menghapus proyek rekanan hanya menghapus baris tenant_id-nya, tanpa menyentuh tenant lain. Kebijakan Row-Level Security (RLS) tingkat produksi masuk antrean Human-Gate.
⚠ Human-Gate: perubahan paket, aktivasi pembayaran, pengikatan domain, koneksi object storage, dan kebijakan RLS produksi wajib disetujui boss satu per satu.