3.0 KiB
3.0 KiB
🏛️ 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:
- Sistem Internal (SIMRS Lokal): Berkomunikasi via REST API & gRPC.
- 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 modulpermission, pencarian dan tree-hierarchy di- cache (kunci menggunakan hash SHA-256 dari parameter query) dan diinvalidasi otomatis saat terjadiCreate/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) menggunakansqlxke 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): MenyediakanFHIRPayloadbuilder (fluent interface) untuk JSON FHIR, serta manajemen Access Token OAuth2. - Background Workers: Berjalan secara asinkron (
goroutine) menggunakanerrgroup. Worker sepertimigrator.gomenyinkronkan data pasien secara bertahap untuk menghindari Rate Limit Kemenkes, dicatat viatracker 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 folderlogs/YYYY/MM/YYYY-MM-DD.log.