refactor: use static HIS database per instance

This commit is contained in:
2026-09-04 08:56:29 +07:00
parent 10fa7a6e38
commit 9afd5b792c
15 changed files with 174 additions and 783 deletions

View File

@@ -22,29 +22,22 @@ func main() {
}
bootstrapCtx, bootstrapCancel := context.WithTimeout(context.Background(), 20*time.Second)
registry, err := databaseconfig.NewRegistry(bootstrapCtx, databaseconfig.Setting{
Host: cfg.ManagementDBHost, Port: cfg.ManagementDBPort, Database: cfg.ManagementDBDatabase,
Username: cfg.ManagementDBUsername, Password: cfg.ManagementDBPassword,
resolver, err := databaseconfig.NewStaticResolver(bootstrapCtx, cfg.RSCode, databaseconfig.Setting{
Host: cfg.HISDBHost, Port: cfg.HISDBPort, Database: cfg.HISDBDatabase,
Username: cfg.HISDBUsername, Password: cfg.HISDBPassword,
}, databaseconfig.PoolConfig{
MaxOpenConns: cfg.DBMaxOpenConns, MaxIdleConns: cfg.DBMaxIdleConns,
ConnMaxLifetime: cfg.DBConnMaxLifetime,
}, cfg.DBCredentialSecret)
})
bootstrapCancel()
if err != nil {
log.Fatalf("load database registry: %v", err)
log.Fatalf("load database HIS: %v", err)
}
defer registry.Close()
defer resolver.Close()
handler := apphttp.NewDynamicHandler()
settingsHandler := apphttp.NewDatabaseSettingsHandler(registry)
handler := apphttp.NewDynamicHandler(cfg.RSCode)
protected := func(handler http.Handler) http.Handler {
return apphttp.BearerAuth(cfg.BearerToken, apphttp.SelectDatabase(registry, handler))
}
adminProtected := func(handler http.Handler) http.Handler {
return apphttp.BearerAuth(cfg.DBSettingsToken, handler)
}
catalogProtected := func(handler http.Handler) http.Handler {
return apphttp.BearerAuth(cfg.BearerToken, handler)
return apphttp.BearerAuth(cfg.BearerToken, apphttp.SelectDatabase(resolver, handler))
}
mux := http.NewServeMux()
@@ -64,10 +57,6 @@ func main() {
mux.Handle("POST /api/cpone/patients/lab-registration/{regId}/services", protected(http.HandlerFunc(handler.AddLabServices)))
mux.Handle("POST /api/cpone/patients/lab-registration/{regId}/packages", protected(http.HandlerFunc(handler.AddLabPackage)))
mux.Handle("GET /api/cpone/patients/lab-results/{labNumber}", protected(http.HandlerFunc(handler.GetLabResult)))
mux.Handle("GET /api/cpone/database-settings", adminProtected(http.HandlerFunc(settingsHandler.List)))
mux.Handle("GET /api/cpone/database-settings/{kodeRs}", adminProtected(http.HandlerFunc(settingsHandler.Get)))
mux.Handle("POST /api/cpone/database-settings", adminProtected(http.HandlerFunc(settingsHandler.Store)))
mux.Handle("GET /api/cpone/hospitals", catalogProtected(http.HandlerFunc(settingsHandler.ListHospitals)))
mux.HandleFunc("GET /healthz", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)