Arsitektur Sistem & Model Data Database
Dokumentasi ini menjelaskan arsitektur internal backend, relasi entitas basis data, prinsip isolasi data multi-organisasi (multi-tenancy), serta mekanisme concurrency control dan offline sync.
1. Arsitektur Komponen Sistemโ
2. Diagram Relasi Entitas Database (ERD)โ
3. Isolasi Multi-Tenant & Keamanan Dataโ
Sistem menerapkan model isolasi Shared Database, Multi-Tenant Scoping:
- Tenant Context Extraction: Setiap request yang melewati gateway divalidasi oleh middleware
TenantResolveruntuk mengekstraktenant_id/organization_iddari JWT token. - Role Enforcement: Role menggunakan hierarki
Freelance (1),Staf organizer (5),Organizer (10), danSuperadmin (100). Backend menolak seluruh requestDELETEdari role di bawah Organizer. Freelance hanya dapat melakukan mutation operasional yang diizinkan secara eksplisit: check-in, penyerahan souvenir, dan pencatatan hadiah. - User Visibility: Organizer hanya dapat membaca dan mengelola user dengan
tenant_idyang sama. Hanya Superadmin yang dapat membaca daftar user lintas organisasi. - Query Scoping Otomatis: Semua operasi ORM GORM diwajibkan menggunakan klausa
WHERE organization_id = ?danWHERE event_id = ?. - Pencegahan Akses Ilegal (IDOR): Pengguna dari Tenant A tidak akan dapat membaca atau memperbarui data milik Tenant B, meskipun mengetahui ID entitas secara langsung.
4. Mekanisme Konsistensi & Offline Reception Syncโ
Row-Level Locking Transaksionalโ
Untuk mencegah kondisi balapan (race condition) saat ratusan tamu memindai QR secara bersamaan:
SELECT * FROM event_guests WHERE id = ? FOR UPDATE;
SELECT * FROM wedding_souvenir_items WHERE id = ? FOR UPDATE;
Operasi penyerahan souvenir dan check-in dibungkus dalam blok transaksi database PostgreSQL yang atomik.
Idempotensi Operasi (client_operation_id)โ
Setiap request penyerahan souvenir dan check-in menyertakan UUID unik client_operation_id dari frontend. Jika request terkirim ulang akibat gangguan jaringan, server mengenali ID tersebut dan mengembalikan status transaksi sebelumnya tanpa memproses duplikasi data.
Sinkronisasi Offline (Server-Authoritative)โ
- Saat perangkat bekerja offline, data transaksi check-in ditampung di penyimpanan lokal browser (IndexedDB).
- Ketika koneksi internet pulih, antrean dikirim ke server secara batch.
- Server memvalidasi stempel waktu (timestamp) dan memastikan hanya transaksi pertama yang diakui sebagai check-in sah, sementara pemindaian berikutnya dicatat sebagai duplikasi audit.