Lanjut ke konten
Samkarsa Logbook

v1.0.0-050 — Draft Arsitektur Universal Fast CRUD & Reactive Cache Invalidation

Rencana arsitektur menyeluruh untuk mempercepat seluruh operasi CRUD (1-2 ms Redis Cache) dan sinkronisasi UI instan (0 ms Optimistic Update) di seluruh modul Blonjo & Sajen, termasuk Alur Transaksi.

2mnt baca

Menjamin seluruh operasi pembacaan data (READ/GET) di aplikasi berjalan super cepat (1–2 ms via Redis Cache & Bulk SQL Query) serta seluruh operasi perubahan data (WRITE/POST/PUT/DELETE) terefleksi secara seketika (0 ms delay) di antarmuka pengguna (UI) melalui strategi Optimistic UI Update dan Reactive Cache Eviction.


[ FRONTEND: React Optimistic UI ] ---> 0 ms Delay (Update state lokal memori browser)
│
▼ (Async Network Mutate)
[ BACKEND: FastAPI + SQLAlchemy ] ---> Eksekusi SQL Transaction + Eager Loading
│
▼ (Instant Cache Invalidation)
[ REDIS CACHE: Pattern Eviction ] ---> Hapus Kunci Cache `tenant:{id}:{entity}:*`
│
▼ (Next Read Request)
[ FRESH DATA: Re-cached ] ---> Fetch DB (Bulk Query) & Auto Re-cache (1-2 ms)

Proses transaksi (Penjualan Kasier, Pembelian Supplier, Restok, dan Stock Adjustment) bekerja secara ACID Compliant di database SQL dan secara otomatis memicu invalidasi cache Redis:

┌─────────────────────────────────────────────────────────────────────────┐
│ PROSES TRANSAKSI │
└─────────────────────────────────────────────────────────────────────────┘
│
├─► 1. FRONTEND KASIR / PURCHASING
│ └─► Validasi Lokal Keranjang/Form (0 ms Delay).
│ └─► Kirim Payload ke API (`POST /finance/transactions`).
│
├─► 2. BACKEND SAJEN (`sajen-api`)
│ ├─► `db.begin()` -> Buka SQL Transaction.
│ ├─► Simpan Header `Transaction` (Status: POSTED).
│ ├─► Simpan `JournalEntry` (Debet Kas/HPP, Kredit Penjualan/Persediaan).
│ ├─► Simpan `InventoryLog` (IN untuk Pembelian, OUT untuk Penjualan).
│ ├─► Hitung Ulang HPP Moving Average (`moving_average_cost`).
│ └─► `db.commit()` -> Simpan Permanen ke Postgres.
│
└─► 3. REAKSI CACHE INVALIDATION (Otomatis & Seketika)
├─► Invalidate `products_list:tenant_id:*` -> Stok & Harga Produk Terupdate.
├─► Invalidate `insights:purchase_matrix:tenant_id:*` -> Analitik Pembelian Terupdate.
├─► Invalidate `dashboard:tenant_id:*` -> Saldo Kas & Widget Keuangan Terupdate.
└─► Invalidate `material_control:tenant_id:*` -> Radar Restok Terupdate.

  • ✅ Status: Selesai (v1.0.0-049)
  • READ: Bulk SQL query + Redis caching products_list:tenant_id:... (Response Time: 1,4 ms).
  • WRITE: Invalidation otomatis Redis key products_list:tenant_id:* saat create/update/merge/delete.
  • UI: Optimistic state update pada tabel & background sync tanpa spinner penutup layar.

  • ⏳ Status: Draft Eksekusi berikutnya
  • Backend: Caching Redis categories:tenant_id + Invalidation pada POST/PUT/DELETE. Sorting A-Z di SQL level.
  • Frontend: Optimistic state update pada dialog penambahan/pengeditan kategori.

  • ⏳ Status: Draft Eksekusi berikutnya
  • Backend: Caching Redis uoms:global + Invalidation pada perubahan UOM.
  • Frontend: Optimistic state update pada tabel UOM.

  • ⏳ Status: Draft Eksekusi berikutnya
  • Backend: Bulk batch query + Caching Redis contacts:tenant_id:{type} + Invalidation pada POST/PUT/DELETE kontak.
  • Frontend: Instant local update untuk form pelanggan & supplier.

  • ⏳ Status: Draft Eksekusi berikutnya
  • Backend: Fast caching parameter stok (safety_stock, reorder_point, max_stock).
  • Invalidation: Trigger otomatis saat penyesuaian stok (adjust stock) atau saat transaksi kasir/pembelian diposting.

  • ⏳ Status: Draft Eksekusi berikutnya
  • Backend: Invalidation Redis multi-entity (products_list, dashboard, insights) setiap kali transaksi diposting.
  • Frontend: Print nota/faktur instan & update saldo kas realtime.

  • Response Time READ: ≤5 ms\le 5\text{ ms} (Redis Hit) / ≤50 ms\le 50\text{ ms} (Redis Miss).
  • UI Perception Delay: 0 ms0\text{ ms} (Instant Optimistic Update).
  • Cache Consistency: 100%100\% Data Up-to-Date (Zero Stale Data) melalui Pattern Key Invalidation.