Lewati ke konten utama

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:

  1. Tenant Context Extraction: Setiap request yang melewati gateway divalidasi oleh middleware TenantResolver untuk mengekstrak tenant_id / organization_id dari JWT token.
  2. Role Enforcement: Role menggunakan hierarki Freelance (1), Staf organizer (5), Organizer (10), dan Superadmin (100). Backend menolak seluruh request DELETE dari role di bawah Organizer. Freelance hanya dapat melakukan mutation operasional yang diizinkan secara eksplisit: check-in, penyerahan souvenir, dan pencatatan hadiah.
  3. User Visibility: Organizer hanya dapat membaca dan mengelola user dengan tenant_id yang sama. Hanya Superadmin yang dapat membaca daftar user lintas organisasi.
  4. Query Scoping Otomatis: Semua operasi ORM GORM diwajibkan menggunakan klausa WHERE organization_id = ? dan WHERE event_id = ?.
  5. 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)โ€‹

  1. Saat perangkat bekerja offline, data transaksi check-in ditampung di penyimpanan lokal browser (IndexedDB).
  2. Ketika koneksi internet pulih, antrean dikirim ke server secara batch.
  3. Server memvalidasi stempel waktu (timestamp) dan memastikan hanya transaksi pertama yang diakui sebagai check-in sah, sementara pemindaian berikutnya dicatat sebagai duplikasi audit.