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

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:

  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.