Files
satusehat-worker/docs/architecture.md
T
2026-07-29 06:38:42 +00:00

38 lines
3.0 KiB
Markdown

# 🏛️ System Architecture
Aplikasi **GoPrint Service General** dirancang menggunakan kombinasi prinsip **Clean Architecture**, **CQRS (Command Query Responsibility Segregation)**, dan **Event-Driven / Worker Patterns**.
## 1. High-Level Topologi
Aplikasi ini bertindak sebagai **Middleware / Bridging API** antara:
1. **Sistem Internal (SIMRS Lokal):** Berkomunikasi via REST API & gRPC.
2. **Sistem Eksternal (Nasional):** Berkomunikasi via HTTP Client ke BPJS (VClaim/Antrol) dan Kemenkes (SatuSehat FHIR & KFA).
## 2. Core Components
### A. Transport Layer (Dual-Protocol Server)
* **HTTP/REST (Gin Framework):** Menyediakan antarmuka standar bagi *frontend* dan sistem *legacy*. Implementasi *Service Registry* (`httpServer.ServiceRegistry`) menjamin manajemen rute yang modular.
* **gRPC:** Menggunakan Protobuf untuk komunikasi internal antar-*microservice* dengan latensi ultra-rendah dan *payload* terkompresi.
### B. Data & Infrastructure Layer
* **Multi-Database Manager (`database.go`):**
Mampu melayani multi-koneksi sekaligus (Postgres, MySQL, SQLServer, SQLite, MongoDB). Otomatis memisahkan beban *Read* (menggunakan *Read Replicas* dengan *round-robin balancer*) dan *Write* (ke *Primary DB*). Terdapat *auto-tuning* koneksi (MaxOpen, MaxIdle).
* **Cache Manager (`cache.go`):**
Redis digunakan secara ekstensif dengan pola **Cache-Aside**. Pada modul `permission`, pencarian dan *tree-hierarchy* di- *cache* (kunci menggunakan *hash* SHA-256 dari parameter *query*) dan diinvalidasi otomatis saat terjadi `Create`/`Update`/`Delete`.
* **Object Storage:** MinIO/S3 terintegrasi untuk penyimpanan aset (seperti hasil *ImagingStudy* atau dokumen medis).
### C. Business Logic Layer (CQRS Pattern)
Setiap modul (contoh: `role/permission`) dibagi dengan jelas:
* **Command Repository:** Khusus mutasi data (`Create`, `Update`, `Delete`) dengan GORM ke Primary DB.
* **Query Repository:** Khusus pengambilan data (`FindAll`, `Search`) menggunakan `sqlx` ke Read Replica DB agar sangat cepat dan tidak mengganggu transaksi utama.
* **Service:** Menangani aturan bisnis, validasi, dan integrasi ke *Cache Manager*.
### D. External Integration & Background Workers
* **BPJS Client (`bpjs/client.go`):** Meng- *handle* generasi *header* HMAC SHA256, *timestamp*, otomatis dekripsi *payload* VClaim V2, dan *error handling* standar BPJS.
* **SatuSehat Client (`satusehat/types.go`):** Menyediakan `FHIRPayload` *builder* (*fluent interface*) untuk JSON FHIR, serta manajemen *Access Token* OAuth2.
* **Background Workers:** Berjalan secara asinkron (`goroutine`) menggunakan `errgroup`. *Worker* seperti `migrator.go` menyinkronkan data pasien secara bertahap untuk menghindari *Rate Limit* Kemenkes, dicatat via `tracker file`.
## 3. Observability & Logging
Menggunakan sistem *logging* internal (berbasis `logrus`):
* Menambahkan **X-Request-ID** dan **Trace ID** di *Context*.
* Menjalankan *Hook* waktu **WIB (Asia/Jakarta)** secara ketat.
* Rotasi *log file* harian (`dailyFileWriter`) ke dalam folder `logs/YYYY/MM/YYYY-MM-DD.log`.