Perbaikan Service Satu sehat
This commit is contained in:
+2
-58
@@ -10,18 +10,10 @@ import (
|
||||
"syscall"
|
||||
|
||||
"service/internal/auth"
|
||||
antrol "service/internal/bpjs/antrol/reference"
|
||||
aplicareBed "service/internal/bpjs/aplicare/bed"
|
||||
apotekDpho "service/internal/bpjs/apotek/reference/dpho"
|
||||
apotekPoli "service/internal/bpjs/apotek/reference/poli"
|
||||
"service/internal/bpjs/vclaim/peserta"
|
||||
"service/internal/bpjs/vclaim/sep"
|
||||
"service/internal/infrastructure/cache"
|
||||
"service/internal/infrastructure/config"
|
||||
"service/internal/infrastructure/database"
|
||||
grpcHandlers "service/internal/infrastructure/transport/grpc/handlers"
|
||||
httpServer "service/internal/infrastructure/transport/http/servers"
|
||||
bpjsFactory "service/internal/interfaces/bpjs"
|
||||
"service/internal/interfaces/minio"
|
||||
satuSehatFactory "service/internal/interfaces/satusehat"
|
||||
|
||||
@@ -170,40 +162,6 @@ func main() {
|
||||
// roleComponentQueryRepo := roleComponent.NewQueryRepository(dbService, "postgres")
|
||||
// roleComponentService := roleComponent.NewService(roleComponentCmdRepo, roleComponentQueryRepo)
|
||||
|
||||
// --- [NEW] Inisialisasi Modul CQRS Baru (Memanfaatkan DB Service) ---
|
||||
// Contoh ketika mengimplementasikan entity "Province" atau "Person":
|
||||
// provinceCmdRepo := province.NewCommandRepository(dbService, "default")
|
||||
// provinceQueryRepo := province.NewQueryRepository(dbService, "default")
|
||||
// provinceSvc := province.NewService(provinceCmdRepo, provinceQueryRepo)
|
||||
|
||||
// --- [NEW] Inisialisasi Factory BPJS ---
|
||||
bpjsServices := bpjsFactory.NewBPJSFactory(cfg.Bpjs)
|
||||
|
||||
// 1. Modul VClaim (Lama)
|
||||
vclaimServiceEngine := bpjsServices.VClaim()
|
||||
sepRepo := sep.NewRepository(vclaimServiceEngine)
|
||||
sepService := sep.NewService(sepRepo)
|
||||
pesertaRepo := peserta.NewRepository(vclaimServiceEngine)
|
||||
pesertaService := peserta.NewService(pesertaRepo)
|
||||
|
||||
// 2. Modul Antrean RS (Baru)
|
||||
antreanClient := bpjsServices.AntreanRS()
|
||||
antrolRepo := antrol.NewRepository(antreanClient)
|
||||
antrolService := antrol.NewService(antrolRepo)
|
||||
|
||||
// 3. Modul Aplicares (Bed Ketersediaan Tempat Tidur)
|
||||
aplicareClient := bpjsServices.Aplicare()
|
||||
bedRepo := aplicareBed.NewRepository(aplicareClient)
|
||||
bedService := aplicareBed.NewService(bedRepo)
|
||||
|
||||
// 4. Modul Apotek (Referensi DPHO dan Poli)
|
||||
apotekClient := bpjsServices.Apotek()
|
||||
dphoRepo := apotekDpho.NewRepository(apotekClient)
|
||||
dphoService := apotekDpho.NewService(dphoRepo)
|
||||
|
||||
poliApotekRepo := apotekPoli.NewRepository(apotekClient)
|
||||
poliApotekService := apotekPoli.NewService(poliApotekRepo)
|
||||
|
||||
// --- [NEW] Inisialisasi Modul Satu Sehat ---
|
||||
satusehatFact := satuSehatFactory.NewSatuSehatFactory(cfg.SatuSehat)
|
||||
satusehatClient := satusehatFact.Client()
|
||||
@@ -273,20 +231,6 @@ func main() {
|
||||
RolePermission: rolePermissionService,
|
||||
RoleMaster: roleMasterService,
|
||||
},
|
||||
VClaim: &httpServer.VClaimServices{
|
||||
Sep: sepService,
|
||||
Peserta: pesertaService,
|
||||
},
|
||||
Antrol: &httpServer.AntrolServices{
|
||||
Reference: antrolService,
|
||||
},
|
||||
Aplicare: &httpServer.AplicaresServices{
|
||||
Bed: bedService,
|
||||
},
|
||||
Apotek: &httpServer.ApotekServices{
|
||||
DPHO: dphoService,
|
||||
Poli: poliApotekService,
|
||||
},
|
||||
SatuSehat: &httpServer.SatuSehatServices{
|
||||
Auth: satuSehatAuthSvc,
|
||||
Patient: satuSehatPatientSvc,
|
||||
@@ -334,10 +278,10 @@ func main() {
|
||||
serverCount++
|
||||
|
||||
// 1. Buat gRPC handlers
|
||||
permissionHandler := grpcHandlers.NewPermissionHandler(rolePermissionService)
|
||||
// permissionHandler := grpcHandlers.NewPermissionHandler(rolePermissionService)
|
||||
// 2. Buat dan isi gRPC service registry
|
||||
grpcRegistry := &grpcServers.ServiceRegistry{
|
||||
PermissionHandler: permissionHandler,
|
||||
// PermissionHandler: permissionHandler,
|
||||
}
|
||||
|
||||
// 3. Buat gRPC server dengan registry yang sudah diisi
|
||||
|
||||
@@ -1,141 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"service/internal/infrastructure/cache"
|
||||
"service/internal/infrastructure/config"
|
||||
"service/internal/infrastructure/database"
|
||||
httpServer "service/internal/infrastructure/transport/http/servers"
|
||||
satuSehatFactory "service/internal/interfaces/satusehat"
|
||||
"service/pkg/logger"
|
||||
|
||||
satuSehatAuth "service/internal/satusehat/reference/auth"
|
||||
satuSehatKfa "service/internal/satusehat/reference/kfa"
|
||||
satuSehatLocation "service/internal/satusehat/reference/location"
|
||||
satuSehatOrganization "service/internal/satusehat/reference/organization"
|
||||
satuSehatPatient "service/internal/satusehat/reference/patient"
|
||||
satuSehatPractitioner "service/internal/satusehat/reference/practitioner"
|
||||
satuSehatCondition "service/internal/satusehat/usecase/condition"
|
||||
satuSehatEncounter "service/internal/satusehat/usecase/encounter"
|
||||
satuSehatProcedure "service/internal/satusehat/usecase/procedure"
|
||||
|
||||
_ "service/docs/swagger" // Import swagger docs
|
||||
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 1. Load Config
|
||||
cfg := config.LoadConfig()
|
||||
|
||||
// 2. Init Logger khusus untuk service Satu Sehat
|
||||
loggerConfig := logger.Config{
|
||||
Level: cfg.Logger.Level,
|
||||
Format: cfg.Logger.Format,
|
||||
Output: "both",
|
||||
ServiceName: "service-satusehat", // Penanda log
|
||||
EnableCaller: cfg.Server.Mode != "production",
|
||||
Environment: cfg.Server.Mode,
|
||||
}
|
||||
logger.Init(loggerConfig)
|
||||
|
||||
logger.Default().Info("SatuSehat Microservice starting...",
|
||||
logger.String("environment", cfg.Server.Mode),
|
||||
logger.String("log_level", cfg.Logger.Level),
|
||||
)
|
||||
|
||||
if err := cfg.Validate(); err != nil {
|
||||
logger.Default().Fatal("Config validation failed", logger.ErrorField(err))
|
||||
}
|
||||
|
||||
// 3. Init Database Manager
|
||||
dbService := database.New(cfg)
|
||||
defer dbService.Close()
|
||||
|
||||
gormDB, err := dbService.GetGormDB("default")
|
||||
if err != nil {
|
||||
logger.Default().Fatal("Failed to get primary database", logger.ErrorField(err))
|
||||
}
|
||||
|
||||
// 4. Init Cache
|
||||
cacheFactory := cache.NewFactory(cfg.Cache)
|
||||
cacheManager, err := cacheFactory.CreateManager()
|
||||
if err != nil {
|
||||
logger.Default().Fatal("Failed to initialize cache manager", logger.ErrorField(err))
|
||||
}
|
||||
defer cacheManager.Close()
|
||||
|
||||
// 5. Init Layers (Hanya Modul Satu Sehat)
|
||||
satusehatFact := satuSehatFactory.NewSatuSehatFactory(cfg.SatuSehat)
|
||||
satusehatClient := satusehatFact.Client()
|
||||
|
||||
// - Reference Services
|
||||
satuSehatAuthSvc := satuSehatAuth.NewService(satusehatClient, cacheManager)
|
||||
satuSehatPatientSvc := satuSehatPatient.NewService(satuSehatPatient.NewRepository(satusehatClient))
|
||||
satuSehatPractitionerSvc := satuSehatPractitioner.NewService(satuSehatPractitioner.NewRepository(satusehatClient))
|
||||
satuSehatOrganizationSvc := satuSehatOrganization.NewService(satuSehatOrganization.NewRepository(satusehatClient))
|
||||
satuSehatLocationSvc := satuSehatLocation.NewService(satuSehatLocation.NewRepository(satusehatClient))
|
||||
satuSehatKfaSvc := satuSehatKfa.NewService(satuSehatKfa.NewRepository(satusehatClient))
|
||||
|
||||
// - Usecase Services
|
||||
satuSehatEncounterSvc := satuSehatEncounter.NewService(satuSehatEncounter.NewRepository(satusehatClient, dbService))
|
||||
satuSehatProcedureSvc := satuSehatProcedure.NewService(satuSehatProcedure.NewRepository(satusehatClient))
|
||||
satuSehatConditionSvc := satuSehatCondition.NewService(satuSehatCondition.NewRepository(satusehatClient))
|
||||
|
||||
// 6. Server Orchestration
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
g, ctx := errgroup.WithContext(ctx)
|
||||
|
||||
// --- Start REST Server (Hanya me-load endpoint Satu Sehat & Health) ---
|
||||
if cfg.Server.REST.Enabled {
|
||||
registry := &httpServer.ServiceRegistry{
|
||||
Config: cfg,
|
||||
DBManager: dbService,
|
||||
PrimaryDB: gormDB,
|
||||
CacheManager: cacheManager,
|
||||
SatuSehat: &httpServer.SatuSehatServices{
|
||||
Auth: satuSehatAuthSvc,
|
||||
Patient: satuSehatPatientSvc,
|
||||
Practitioner: satuSehatPractitionerSvc,
|
||||
Organization: satuSehatOrganizationSvc,
|
||||
Location: satuSehatLocationSvc,
|
||||
KFA: satuSehatKfaSvc,
|
||||
Encounter: satuSehatEncounterSvc,
|
||||
Procedure: satuSehatProcedureSvc,
|
||||
Condition: satuSehatConditionSvc,
|
||||
},
|
||||
}
|
||||
|
||||
restSrv := httpServer.NewHTTPServer(&cfg.Server.REST, registry)
|
||||
g.Go(func() error {
|
||||
logger.Default().Info("SatuSehat REST API running", logger.Int("port", cfg.Server.REST.Port))
|
||||
if err := restSrv.Start(&cfg.Server); err != nil && err != http.ErrServerClosed {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// --- Graceful Shutdown Listener ---
|
||||
g.Go(func() error {
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-quit
|
||||
logger.Default().Warn("Signal received, shutting down SatuSehat service...")
|
||||
cancel()
|
||||
return nil
|
||||
})
|
||||
|
||||
if err := g.Wait(); err != nil {
|
||||
logger.Default().Error("SatuSehat service shutdown with error", logger.ErrorField(err))
|
||||
} else {
|
||||
logger.Default().Info("SatuSehat service shutdown successful")
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"service/internal/infrastructure/config"
|
||||
"service/internal/infrastructure/database"
|
||||
satuSehatFactory "service/internal/interfaces/satusehat"
|
||||
"service/internal/worker"
|
||||
"service/pkg/logger"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 1. Load Configuration
|
||||
cfg := config.LoadConfig()
|
||||
|
||||
// 2. Initialize Logger khusus untuk Worker
|
||||
loggerConfig := logger.Config{
|
||||
Level: cfg.Logger.Level,
|
||||
Format: cfg.Logger.Format,
|
||||
Output: "both",
|
||||
ServiceName: "service-worker", // Penanda log khusus worker
|
||||
EnableCaller: cfg.Server.Mode != "production",
|
||||
Environment: cfg.Server.Mode,
|
||||
}
|
||||
logger.Init(loggerConfig)
|
||||
|
||||
logger.Default().Info("Background Worker Microservice starting...",
|
||||
logger.String("environment", cfg.Server.Mode),
|
||||
logger.String("log_level", cfg.Logger.Level),
|
||||
)
|
||||
|
||||
if err := cfg.Validate(); err != nil {
|
||||
logger.Default().Fatal("Config validation failed", logger.ErrorField(err))
|
||||
}
|
||||
|
||||
// 3. Initialize Database Manager
|
||||
dbService := database.New(cfg)
|
||||
defer dbService.Close()
|
||||
|
||||
// 4. Initialize SatuSehat Client (Dibutuhkan oleh worker manager)
|
||||
satusehatFact := satuSehatFactory.NewSatuSehatFactory(cfg.SatuSehat)
|
||||
satusehatClient := satusehatFact.Client()
|
||||
|
||||
// 5. Setup Context untuk Graceful Shutdown
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
// 6. Initialize dan Jalankan Worker Manager
|
||||
workerManager := worker.NewManager(cfg, dbService, satusehatClient)
|
||||
workerManager.Start(ctx)
|
||||
|
||||
// 7. Listener untuk OS Signals (Ctrl+C / SIGTERM)
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
<-quit // Block aplikasi sampai signal diterima
|
||||
logger.Default().Warn("Signal received, shutting down worker service...")
|
||||
cancel() // Batalkan context, trigger penghentian semua worker
|
||||
}
|
||||
Reference in New Issue
Block a user