Lewati ke isi

Sentra Membership — Architecture & Tech Stack Delta

Baseline tech stack: lihat _shared/tech-stack-baseline.md. Section ini hanya mencatat yang berbeda atau spesifik untuk Sentra Membership.

System Architecture

Sistem menggunakan Hybrid Cloud-Edge Architecture dengan backend berbasis mikro-modul dan gerbang akses edge (Raspberry Pi / Industrial PC) untuk menjamin keandalan gerbang turnstile saat terjadi internet offline.

3.1 C4 Container Diagram

graph TB
    subgraph "Client Applications"
        MobileApp["Member Mobile App (React Native)"]
        FrontdeskApp["Frontdesk App (Electron / React)"]
        TrainerDashboard["Trainer Console WebApp (React)"]
    end

    subgraph "AWS Cloud Platform"
        APIGateway["Nginx Ingress / AWS API Gateway"]

        subgraph "Modular Monolith Backend"
            CoreService["Core NestJS Engine"]
            BookingEngine["Redis Booking Engine"]
            WalletService["Wallet Transaction Manager"]
            BiometricService["Biometric Vector Service"]
        end

        CloudDB[("PostgreSQL Primary DB")]
        CacheStore[("Redis Cluster — Locks & Slots")]
        JobQueue["BullMQ — Notification & Payroll Queue"]

        CoreService --> CloudDB
        CoreService --> CacheStore
        BookingEngine --> CacheStore
        WalletService --> CloudDB
        BiometricService --> CloudDB
    end

    subgraph "Branch Edge Gateway (Offline Gate Resilience)"
        EdgeGateway["Raspberry Pi Sync Gateway (Go / MQTT)"]
        LocalCache[("Local SQLite Encrypted Cache")]
        TurnstileController["Relay Board / Turnstile Gate Controller"]
        FaceCamera["CCTV Camera with Local Face Vector Engine"]

        EdgeGateway --> LocalCache
        EdgeGateway -->|MQTT relay signal| TurnstileController
        FaceCamera --> EdgeGateway
    end

    subgraph "External Integrations"
        PaymentGateway["Midtrans / Xendit Gateway"]
        WAService["WhatsApp Gateway API (Fonnte)"]
    end

    MobileApp --> APIGateway
    FrontdeskApp --> EdgeGateway
    EdgeGateway <-->|"Secure MQTT over WebSockets TLS 1.3"| APIGateway
    APIGateway --> CoreService
    CoreService --> PaymentGateway
    CoreService --> WAService

3.2 Redis Distributed Lock for Booking Concurrency

Pemesanan kelas populer di jam sibuk memerlukan pencegahan race conditions agar kelas tidak terisi melampaui kuota kapasitas maksimum studio.

    Member A (Request Slot)                 Member B (Request Slot)
               │                                       │
               ▼                                       ▼
  [ Acquire Redis Lock: class_102 ]     [ Acquire Redis Lock: class_102 ]
               │                                       │
    (SUCCESS: Lock Acquired)                 (FAILED: Lock is Busy)
               │                                       │
               ▼                                       ▼
  Verify Remaining Slots (> 0)             Return "Slot is Busy,
               │                              Try Again" / Queue
  Decrement Slot & Save Booking
       [ Release Lock ]

Sistem menggunakan Redlock di atas Redis cluster untuk mengunci ID kelas selama transaksi pemesanan berlangsung (waktu penguncian maksimum 500 ms). Pengurangan kapasitas kuota dilakukan secara atomik di dalam memori Redis sebelum persisten ke PostgreSQL.


Tech Stack — Sentra Membership Delta

Baseline: _shared/tech-stack-baseline.md

Overrides

  • Frontdesk ConsoleElectron + React 19 (alasan: native Windows OS support untuk resepsionis, komunikasi langsung dengan driver pembaca kartu RFID/NFC via port USB serial)
  • Core Backend: Go (Golang) v1.22+ untuk subsistem booking konkuren dan integrasi gerbang MQTT karena performa goroutine yang sangat efisien. NestJS (TypeScript) untuk logika kepesertaan membership dan slip payroll.

Tambahan Sistem-Spesifik

  • MQTT Broker (Mosquitto): Digunakan untuk komunikasi IoT antara cloud backend dan edge turnstile gate. Setiap perintah buka/tutup gerbang dikirimkan sebagai MQTT message dari cloud ke Edge Gateway Raspberry Pi (MQTT_CMD_OPEN_GATE_01). Koneksi menggunakan Secure MQTT over WebSockets TLS 1.3 untuk enkripsi end-to-end.
  • Edge Gateway Go Daemon: Proses Go berjalan di Raspberry Pi sebagai MQTT subscriber, menerjemahkan sinyal MQTT menjadi sinyal relay fisik ke papan kontrol turnstile.
  • Local SQLite (Encrypted): Database offline edge cabang yang men-cache data biometrik hash dan status keanggotaan member aktif 24 jam terakhir. Menggunakan SQLCipher atau enkripsi AES-256 built-in Go untuk proteksi data jika perangkat dicuri.
  • Local Face Recognition Engine: Mesin pencocokan vektor wajah berjalan 100% lokal di Raspberry Pi / Industrial PC (128-dimensi face embedding). Foto mentah dihapus dalam < 2 detik setelah ekstraksi — hanya hash terenkripsi yang dikirim ke cloud (UU PDP compliant).