Lewati ke isi

Sentra Laundry — Architecture & Tech Stack Delta

System Architecture

SentraLaundry Clean mengadopsi arsitektur Distributed State Machine Event Hub yang melacak perubahan status ribuan item cucian secara asinkron di multi-cabang.

3.1 C4 Container Diagram

graph TB
    subgraph "Outlet Cabang (Edge Node)"
        A["POS Desktop Client (Tauri + React)"]
        B["Scale Driver Hub (Go Daemon)"]
        C["Operator App (React Native Mobile)"]
        D["Waterproof Tag Printer"]

        A <-->|1. Read Weight via Local Socket| B
        A -->|2. Serial Print Command| D
    end

    subgraph "Cloud Backend Infrastructure (AWS)"
        E["API Gateway Reverse Proxy (Nginx)"]
        F["Order State Machine Engine (Go)"]
        G["Courier Dispatch & Route Planner (Go)"]
        H["WhatsApp & Sync Event Bus (RabbitMQ)"]

        I[("PostgreSQL Master (Transactional DB)")]
        J[("Redis State & Session Store")]
    end

    A -->|3. HTTPS API Order Create| E
    C -->|4. Push Task Updates| E
    E <--> F
    E <--> G
    F <--> I
    F <--> J
    G --> H
    H -->|5. Trigger Notifications| K["WhatsApp Gateway Client"]

3.2 Protokol Pelacakan Status Cucian (Event-Driven State Engine)

Sistem melacak siklus cucian menggunakan pola Finite State Machine (FSM). Perpindahan status dipicu oleh pemindaian barcode fisik di stasiun kerja:

  1. Intake Event: Cucian diterima -> Status RECEIVED.
  2. Scan Stasiun Cuci: Operator cuci memindai tag -> Status berubah menjadi WASHING (mencatat ID operator dan ID mesin cuci).
  3. Scan Stasiun Setrika: Operator setrika memindai tag -> Status berubah menjadi IRONING.
  4. QC Check Event: Staf QC memindai tag -> Status READY_FOR_COLLECTION.
  5. State Transition Validation: Sistem memvalidasi transisi status. Misal: Pakaian tidak boleh di-scan di stasiun IRONING jika belum melewati status DRYING (mencegah operator melompati prosedur standar).

Tech Stack — Laundry Delta

Baseline: _shared/tech-stack-baseline.md

Overrides

  • POS Client AppTauri (Rust) + React (override: butuh native Rust serialport crate untuk integrasi langsung dengan timbangan digital USB tanpa driver tambahan; Electron tidak punya native Rust binding yang sama mudahnya)

Tambahan Sistem-Spesifik

  • Hardware Integration: timbangan digital USB via Rust serialport crate — Go Daemon (Scale Driver Hub) membaca data serial dari port COM/USB dan mengekspos nilai berat stabil ke POS client via local socket.
  • Waterproof Tag Printer: POS mengirim ZPL print command ke printer barcode thermal melalui koneksi serial/USB lokal untuk mencetak pita label anti air.
  • Operator App (React Native Expo): Aplikasi Android staf dapur cuci dan kurir — mendukung kamera scan barcode tag, update status stasiun, dan GPS kurir real-time.
  • RabbitMQ Event Bus: Perubahan status cucian (FSM state transitions) dipublikasikan ke queue RabbitMQ dan dikonsumsi oleh worker notifikasi WhatsApp, payroll calculator, dan sync dashboard.
  • WhatsApp Business API Gateway: Pengiriman link pelacakan interaktif ke konsumen setelah order dibuat; notifikasi status update real-time ke nomor HP konsumen.