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: (Redis Hit) / (Redis Miss).
- UI Perception Delay: (Instant Optimistic Update).
- Cache Consistency: Data Up-to-Date (Zero Stale Data) melalui Pattern Key Invalidation.