From 9a056701c6bdd4257eaba6764f8ab8666e4a35d2 Mon Sep 17 00:00:00 2001 From: vanilia Date: Thu, 20 Nov 2025 09:10:58 +0700 Subject: [PATCH] update nomr patient --- .../simgos-sync-handler/patient/handler.go | 5 +++ .../simgos-sync-handler.go | 2 + .../use-case/main-use-case/patient/helper.go | 5 ++- .../main-use-case/patient/middleware.go | 2 + .../simgos-sync-plugin/patient/plugin.go | 40 +++++++++++++++++++ .../simgos-sync-use-case/patient/case.go | 8 ++-- .../simgos-sync-use-case/patient/helper.go | 1 + .../simgos-sync-use-case/patient/lib.go | 6 --- 8 files changed, 58 insertions(+), 11 deletions(-) diff --git a/internal/interface/simgos-sync-handler/patient/handler.go b/internal/interface/simgos-sync-handler/patient/handler.go index ae2e1db8..cfc0c8da 100644 --- a/internal/interface/simgos-sync-handler/patient/handler.go +++ b/internal/interface/simgos-sync-handler/patient/handler.go @@ -61,3 +61,8 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) { res, err := u.Delete(dto) rw.DataResponse(w, res, err) } + +func (obj myBase) GenerateNomr(w http.ResponseWriter, r *http.Request) { + res, err := u.GenerateNomr() + rw.DataResponse(w, res, err) +} diff --git a/internal/interface/simgos-sync-handler/simgos-sync-handler.go b/internal/interface/simgos-sync-handler/simgos-sync-handler.go index dee6fb3f..2a67b7e9 100644 --- a/internal/interface/simgos-sync-handler/simgos-sync-handler.go +++ b/internal/interface/simgos-sync-handler/simgos-sync-handler.go @@ -1,6 +1,7 @@ package simgossynchandler import ( + "fmt" "net/http" hc "simrs-vx/pkg/handler-crud-helper" @@ -45,6 +46,7 @@ func SetRoutes() http.Handler { hc.SyncCrud(r, prefix+"/v1/specialist", specialist.O) hc.SyncCrud(r, prefix+"/v1/subspecialist", subspecialist.O) hc.SyncCrud(r, prefix+"/v1/patient", patient.O) + r.HandleFunc(fmt.Sprintf("GET %s/v1/patient-nomr-generator", prefix), patient.O.GenerateNomr) return cmw.SetCors(handlerlogger.SetLog(r)) } diff --git a/internal/use-case/main-use-case/patient/helper.go b/internal/use-case/main-use-case/patient/helper.go index 2c62ca21..82142632 100644 --- a/internal/use-case/main-use-case/patient/helper.go +++ b/internal/use-case/main-use-case/patient/helper.go @@ -24,12 +24,15 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Patient) error { inputSrc = &inputTemp.CreateDto } - if data.Number == nil { + switch { + case inputSrc.Number == nil && data.Number == nil: medRecNum, err := GenerateNextMedicalRecordNumber() if err != nil { return err } data.Number = &medRecNum + case inputSrc.Number != nil: + data.Number = inputSrc.Number } data.Person_Id = inputSrc.Person_Id diff --git a/internal/use-case/main-use-case/patient/middleware.go b/internal/use-case/main-use-case/patient/middleware.go index cc97473f..4270c14c 100644 --- a/internal/use-case/main-use-case/patient/middleware.go +++ b/internal/use-case/main-use-case/patient/middleware.go @@ -29,6 +29,8 @@ func init() { deletePreMw = append(deletePreMw, deleteMw{Name: "sync-delete-patient", Func: plugin.Delete}) + + generatePatientNumber = generateNumberMw{Name: "generate-nomr-patient", Func: plugin.GenerateNomrPatient} } func checkVclaimMember(input *e.CreateDto, data *e.Patient, tx *gorm.DB) error { diff --git a/internal/use-case/simgos-sync-plugin/patient/plugin.go b/internal/use-case/simgos-sync-plugin/patient/plugin.go index b10fdce5..ebfb8dc4 100644 --- a/internal/use-case/simgos-sync-plugin/patient/plugin.go +++ b/internal/use-case/simgos-sync-plugin/patient/plugin.go @@ -162,6 +162,46 @@ func Delete(input *e.DeleteDto) error { return nil } +func GenerateNomrPatient() (*string, error) { + prefixEndpoint := getPrefixEndpoint() + endpoint := fmt.Sprintf("%s-nomr-generator", prefixEndpoint) + + req, err := http.NewRequest("GET", endpoint, nil) + if err != nil { + return nil, err + } + + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + bodyBytes, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + if resp.StatusCode != http.StatusOK { + errors := d.FieldError{} + _ = json.Unmarshal(bodyBytes, &errors) + + return nil, fmt.Errorf(errors.Message) + } + + var result map[string]any + if err = json.Unmarshal(bodyBytes, &result); err != nil { + return nil, err + } + + dataMap := result["data"].(map[string]any) + nomr := dataMap["nomr"].(string) + + return &nomr, nil +} + func getPrefixEndpoint() string { return fmt.Sprintf("%s%s/v1/patient", sync.O.Host, sync.O.Prefix) } diff --git a/internal/use-case/simgos-sync-use-case/patient/case.go b/internal/use-case/simgos-sync-use-case/patient/case.go index b87cd952..d403a8ac 100644 --- a/internal/use-case/simgos-sync-use-case/patient/case.go +++ b/internal/use-case/simgos-sync-use-case/patient/case.go @@ -202,7 +202,7 @@ func Delete(input e.DeleteDto) (*d.Data, error) { } -func Generate() (*d.Data, error) { +func GenerateNomr() (*d.Data, error) { event := pl.Event{ Feature: "Generate Nomr", Source: source, @@ -224,8 +224,8 @@ func Generate() (*d.Data, error) { "structure": "single-data", "status": "created", }, - Data:d.II{ - - } + Data: d.IS{ + "nomr": norm, + }, }, nil } diff --git a/internal/use-case/simgos-sync-use-case/patient/helper.go b/internal/use-case/simgos-sync-use-case/patient/helper.go index 4b7ddfe6..0bffcc9b 100644 --- a/internal/use-case/simgos-sync-use-case/patient/helper.go +++ b/internal/use-case/simgos-sync-use-case/patient/helper.go @@ -43,6 +43,7 @@ func setDataSimgos(input *e.Patient) (data esimgos.MPasien) { data.Nip = input.RegisteredBy_User_Name data.Tgldaftar = input.RegisteredAt + data.Nomr = *input.Number return } diff --git a/internal/use-case/simgos-sync-use-case/patient/lib.go b/internal/use-case/simgos-sync-use-case/patient/lib.go index 20f6cdcf..6d50f877 100644 --- a/internal/use-case/simgos-sync-use-case/patient/lib.go +++ b/internal/use-case/simgos-sync-use-case/patient/lib.go @@ -21,11 +21,6 @@ func CreateSimgosData(input e.Patient, event *pl.Event, dbx ...*gorm.DB) (*esimg pl.SetLogInfo(event, nil, "started", "DBCreate") data := setDataSimgos(&input) - nomr, err := generateNomrPatient() - if err != nil { - return nil, plh.HandleCreateError(input, event, err) - } - data.Nomr = nomr var tx *gorm.DB if len(dbx) > 0 { @@ -65,7 +60,6 @@ func UpdateSimgosData(input e.Patient, patientData *esimgos.MPasien, event *pl.E data := setDataSimgos(&input) data.Id = patientData.Id - data.Nomr = patientData.Nomr data.CreatedAt = patientData.CreatedAt var tx *gorm.DB