Lewati ke isi

Sentra Service — Architecture & Tech Stack Delta

System Architecture

SentraService menggunakan pendekatan arsitektur Distributed Scheduler Architecture yang berfokus pada kecepatan alokasi slot waktu dan sinkronisasi status antrean realtime di multi-cabang.

3.1 C4 Container Diagram

graph TB
    subgraph "Customer Channels"
        A["Mobile Booking Widget (React)"]
        B["WhatsApp Gateway API"]
    end

    subgraph "Outlet Frontdesk (Cabang)"
        C["Frontdesk Dashboard (Next.js)"]
        D["Queue Visual Display (Tauri)"]
    end

    subgraph "Central Cloud Backend Services"
        E["API Gateway (Nginx)"]
        F["Scheduler Service (Go)"]
        G["POS & Billing Service (Go)"]
        H["Customer CRM & Notification Service (Node.js)"]

        I[("PostgreSQL Master (Transactional DB)")]
        J[("Redis Cache & Distributed Redlock Broker")]
    end

    A & B -->|1. Request Booking & Lock| E
    C & D -->|2. WebSocket Connection Queue| E
    E --> F
    E --> G
    E --> H
    F <--> I
    F <--> J
    G <--> I
    H --> B

3.2 Slot Locking Sync Protocol

Untuk menjamin tidak terjadi pemesanan ganda pada slot waktu yang sama di stasiun yang sama: 1. Ketika pelanggan memilih staf Budi pada pukul 10.00 di cabang Dago, sistem memicu distributed lock di Redis: SET appointment:lock:branch_01:staff_02:2026-05-21T10:00 "locked" EX 600 NX 2. Jika Redis merespon OK, slot berhasil dikunci selama 10 menit untuk pelanggan tersebut menyelesaikan transaksi DP. 3. Jika pelanggan lain mencoba membooking slot yang sama, sistem langsung merespon: "Slot sedang dipesan orang lain". 4. Jika transaksi pembayaran sukses sebelum 10 menit, data janji temu disimpan permanen ke database PostgreSQL dan kunci Redis dilepas. Jika lewat 10 menit tidak dibayar, kunci otomatis hangus dan slot kembali tersedia.

Tech Stack — Sentra Service Delta

Baseline: _shared/tech-stack-baseline.md

Overrides

  • Booking Backend EngineGo (Golang) untuk core-scheduler (bukan NestJS): Go dipilih karena kecepatan eksekusi tinggi dan kontrol memori efisien — kritis untuk menangani ratusan lock request bersamaan di jam sibuk (peak hours) dengan latensi milidetik.

Tambahan Sistem-Spesifik

  • Queue Visual Display (Tauri): Aplikasi Tauri terpisah khusus untuk layar monitor lobi yang menampilkan nomor antrean panggilan staf secara realtime — bukan bagian dari POS terminal kasir.
  • Redis Redlock Distributed Slot Lock: Implementasi skema Redlock khusus untuk penguncian slot janji temu — memastikan zero double-booking meski ada dua pelanggan yang memindai QRIS di detik yang sama.
  • WhatsApp Business API Gateway (Fonnte / Twilio): Worker reminder scheduler mengirim pesan WA otomatis H-1 dan H-2 jam sebelum jadwal janji temu — terpisah dari baseline notification WebSocket.
  • Mobile Customer Booking Widget (React embedded): Widget React yang dapat disematkan ke website klien atau link bio Instagram — berbeda dari POS dashboard frontdesk yang berbasis Next.js.