From 7ab845d79ddebed20f1fad65c484f0b5f8c555b3 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Thu, 11 Sep 2025 13:02:57 +0700 Subject: [PATCH] handle ss migration, tested --- cmd/main-migration/atlas.hcl | 22 +++ .../atlas.hcl.example | 0 .../config.yml-example | 0 .../migration.go | 2 +- .../migrations/20250904105930.sql | 0 .../migrations/20250904141448.sql | 0 .../migrations/20250908062237.sql | 0 .../migrations/20250908062323.sql | 0 .../migrations/20250908073811.sql | 0 .../migrations/20250908073839.sql | 0 .../migrations/20250910055902.sql | 0 .../migrations/atlas.sum | 4 +- cmd/satusehat-migration/atlas.hcl | 22 +++ cmd/satusehat-migration/atlas.hcl.example | 22 +++ cmd/satusehat-migration/config.yml-example | 47 ++++++ cmd/satusehat-migration/migration.go | 9 ++ .../migrations/20250911060006.sql | 9 ++ cmd/satusehat-migration/migrations/atlas.sum | 2 + go.mod | 6 +- go.sum | 4 +- .../satusehat-entities/patient/entity.go | 92 ++++++++++++ internal/infra/ss-db/ss-db.go | 32 +--- internal/infra/ss-db/tycovar.go | 10 +- .../interface/main-handler/main-handler.go | 2 +- internal/interface/migration/main-entities.go | 121 +++++++++++++++ internal/interface/migration/migration.go | 140 ++---------------- .../interface/migration/satusehat-entities.go | 11 ++ internal/interface/migration/tycovar.go | 7 + 28 files changed, 388 insertions(+), 176 deletions(-) create mode 100644 cmd/main-migration/atlas.hcl rename cmd/{migration => main-migration}/atlas.hcl.example (100%) rename cmd/{migration => main-migration}/config.yml-example (100%) rename cmd/{migration => main-migration}/migration.go (81%) rename cmd/{migration => main-migration}/migrations/20250904105930.sql (100%) rename cmd/{migration => main-migration}/migrations/20250904141448.sql (100%) rename cmd/{migration => main-migration}/migrations/20250908062237.sql (100%) rename cmd/{migration => main-migration}/migrations/20250908062323.sql (100%) rename cmd/{migration => main-migration}/migrations/20250908073811.sql (100%) rename cmd/{migration => main-migration}/migrations/20250908073839.sql (100%) rename cmd/{migration => main-migration}/migrations/20250910055902.sql (100%) rename cmd/{migration => main-migration}/migrations/atlas.sum (77%) create mode 100644 cmd/satusehat-migration/atlas.hcl create mode 100644 cmd/satusehat-migration/atlas.hcl.example create mode 100644 cmd/satusehat-migration/config.yml-example create mode 100644 cmd/satusehat-migration/migration.go create mode 100644 cmd/satusehat-migration/migrations/20250911060006.sql create mode 100644 cmd/satusehat-migration/migrations/atlas.sum create mode 100644 internal/domain/satusehat-entities/patient/entity.go create mode 100644 internal/interface/migration/main-entities.go create mode 100644 internal/interface/migration/satusehat-entities.go create mode 100644 internal/interface/migration/tycovar.go diff --git a/cmd/main-migration/atlas.hcl b/cmd/main-migration/atlas.hcl new file mode 100644 index 00000000..3372fb2d --- /dev/null +++ b/cmd/main-migration/atlas.hcl @@ -0,0 +1,22 @@ +data "external_schema" "gorm" { + program = [ + "go", + "run", + "-mod=mod", + ".", + ] +} + +env "gorm" { + src = data.external_schema.gorm.url + dev = "postgres://moko:password@localhost:5432/simrs_vx3?sslmode=disable" + migration { + dir = "file://migrations" + } + url = "postgres://moko:password@localhost:5432/simrs_vx1?sslmode=disable" + format { + migrate { + diff = "{{ sql . \" \" }}" + } + } +} \ No newline at end of file diff --git a/cmd/migration/atlas.hcl.example b/cmd/main-migration/atlas.hcl.example similarity index 100% rename from cmd/migration/atlas.hcl.example rename to cmd/main-migration/atlas.hcl.example diff --git a/cmd/migration/config.yml-example b/cmd/main-migration/config.yml-example similarity index 100% rename from cmd/migration/config.yml-example rename to cmd/main-migration/config.yml-example diff --git a/cmd/migration/migration.go b/cmd/main-migration/migration.go similarity index 81% rename from cmd/migration/migration.go rename to cmd/main-migration/migration.go index c225edf1..dd28a55f 100644 --- a/cmd/migration/migration.go +++ b/cmd/main-migration/migration.go @@ -5,5 +5,5 @@ import ( ) func main() { - m.Migrate() + m.Migrate(m.Main) } diff --git a/cmd/migration/migrations/20250904105930.sql b/cmd/main-migration/migrations/20250904105930.sql similarity index 100% rename from cmd/migration/migrations/20250904105930.sql rename to cmd/main-migration/migrations/20250904105930.sql diff --git a/cmd/migration/migrations/20250904141448.sql b/cmd/main-migration/migrations/20250904141448.sql similarity index 100% rename from cmd/migration/migrations/20250904141448.sql rename to cmd/main-migration/migrations/20250904141448.sql diff --git a/cmd/migration/migrations/20250908062237.sql b/cmd/main-migration/migrations/20250908062237.sql similarity index 100% rename from cmd/migration/migrations/20250908062237.sql rename to cmd/main-migration/migrations/20250908062237.sql diff --git a/cmd/migration/migrations/20250908062323.sql b/cmd/main-migration/migrations/20250908062323.sql similarity index 100% rename from cmd/migration/migrations/20250908062323.sql rename to cmd/main-migration/migrations/20250908062323.sql diff --git a/cmd/migration/migrations/20250908073811.sql b/cmd/main-migration/migrations/20250908073811.sql similarity index 100% rename from cmd/migration/migrations/20250908073811.sql rename to cmd/main-migration/migrations/20250908073811.sql diff --git a/cmd/migration/migrations/20250908073839.sql b/cmd/main-migration/migrations/20250908073839.sql similarity index 100% rename from cmd/migration/migrations/20250908073839.sql rename to cmd/main-migration/migrations/20250908073839.sql diff --git a/cmd/migration/migrations/20250910055902.sql b/cmd/main-migration/migrations/20250910055902.sql similarity index 100% rename from cmd/migration/migrations/20250910055902.sql rename to cmd/main-migration/migrations/20250910055902.sql diff --git a/cmd/migration/migrations/atlas.sum b/cmd/main-migration/migrations/atlas.sum similarity index 77% rename from cmd/migration/migrations/atlas.sum rename to cmd/main-migration/migrations/atlas.sum index 28fa58f4..3482f994 100644 --- a/cmd/migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,8 +1,8 @@ -h1:dw8c/C5xz/Do+p93EVuqfaZWYja1GO1VsbM7vuCJYGo= +h1:BLtMDgAdnqZbCj3HUbiTlyYtA87C4LcP/uquCbM6GSE= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= 20250908062323.sql h1:oXl6Z143tOpIl4EfP4B8JNU8LrMvVmHEtCgAfiB4gs8= 20250908073811.sql h1:m2aNXfnGxnLq1+rVWrh4f60q7fhyhV3gEwNu/OIqQlE= 20250908073839.sql h1:cPk54xjLdMs26uY8ZHjNWLuyfAMzV7Zb0/9oJQrsw04= -20250910055902.sql h1:fnLqf63sb0R02rzoj1Gnncp32NW/bUcBAMLyV4qF968= +20250910055902.sql h1:5xwjAV6QbtZT9empTJKfhyAjdknbHzb15B0Ku5dzqtQ= diff --git a/cmd/satusehat-migration/atlas.hcl b/cmd/satusehat-migration/atlas.hcl new file mode 100644 index 00000000..5efd3e80 --- /dev/null +++ b/cmd/satusehat-migration/atlas.hcl @@ -0,0 +1,22 @@ +data "external_schema" "gorm" { + program = [ + "go", + "run", + "-mod=mod", + ".", + ] +} + +env "gorm" { + src = data.external_schema.gorm.url + dev = "postgres://moko:password@localhost:5432/satusehat_diff?sslmode=disable" + migration { + dir = "file://migrations" + } + url = "postgres://moko:password@localhost:5432/satusehat_main?sslmode=disable" + format { + migrate { + diff = "{{ sql . \" \" }}" + } + } +} \ No newline at end of file diff --git a/cmd/satusehat-migration/atlas.hcl.example b/cmd/satusehat-migration/atlas.hcl.example new file mode 100644 index 00000000..857d1352 --- /dev/null +++ b/cmd/satusehat-migration/atlas.hcl.example @@ -0,0 +1,22 @@ +data "external_schema" "gorm" { + program = [ + "go", + "run", + "-mod=mod", + ".", + ] +} + +env "gorm" { + src = data.external_schema.gorm.url + dev = "" // dsn db to check the diff + migration { + dir = "file://migrations" + } + url = "" // dsn db to apply + format { + migrate { + diff = "{{ sql . \" \" }}" + } + } +} \ No newline at end of file diff --git a/cmd/satusehat-migration/config.yml-example b/cmd/satusehat-migration/config.yml-example new file mode 100644 index 00000000..19893fd7 --- /dev/null +++ b/cmd/satusehat-migration/config.yml-example @@ -0,0 +1,47 @@ +appCfg: + fullName: BPJS Bridge + codeName: simrs-vx + version: 0.1.0 + env: development + lang: en + +httpCfg: + host: + port: + +dbCfg: + dsn: + maxOpenConns: 5 + maxIdleConns: 5 + maxIdleTime: 100 + +loggerCfg: + hideTime: + hideLevel: + +msCfg: + dsn: + +langCfg: + active: + path: + fileName: + +minioCfg: + endpoint: + region: + accessKey: + secretKey: + useSsl: + bucketName: + - patient + +corsCfg: + allowedOrigin: + allowedMethod: + +satuSehatCfg: + host: localhsot:8200 + +bpjsCfg: + host: localhsot:8200 diff --git a/cmd/satusehat-migration/migration.go b/cmd/satusehat-migration/migration.go new file mode 100644 index 00000000..e426633e --- /dev/null +++ b/cmd/satusehat-migration/migration.go @@ -0,0 +1,9 @@ +package main + +import ( + m "simrs-vx/internal/interface/migration" +) + +func main() { + m.Migrate(m.SatuSehat) +} diff --git a/cmd/satusehat-migration/migrations/20250911060006.sql b/cmd/satusehat-migration/migrations/20250911060006.sql new file mode 100644 index 00000000..b1671f9a --- /dev/null +++ b/cmd/satusehat-migration/migrations/20250911060006.sql @@ -0,0 +1,9 @@ +-- Create "Patient" table +CREATE TABLE "public"."Patient" ( + "ResourceType" text NULL, + "Active" boolean NULL, + "Gender" text NULL, + "BirthDate" text NULL, + "DeceasedBool" boolean NULL, + "MultipleBirthInteger" bigint NULL +); diff --git a/cmd/satusehat-migration/migrations/atlas.sum b/cmd/satusehat-migration/migrations/atlas.sum new file mode 100644 index 00000000..d8f010f3 --- /dev/null +++ b/cmd/satusehat-migration/migrations/atlas.sum @@ -0,0 +1,2 @@ +h1:dPpFMJ+ZSlHizKRHShYcjJZJNZXi4UuZXZUHME8zPb4= +20250911060006.sql h1:G3YiyY/tCTZijQWqyvyDAaMVCFkhh/gD3v/1gz/eBb8= diff --git a/go.mod b/go.mod index da8ef314..e717f960 100644 --- a/go.mod +++ b/go.mod @@ -8,16 +8,16 @@ require ( ariga.io/atlas-provider-gorm v0.5.6 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.6.0 - github.com/karincake/apem v0.0.16-h + github.com/karincake/apem v0.0.17 github.com/karincake/dodol v0.0.1 github.com/karincake/getuk v0.1.0 github.com/karincake/hongkue v0.0.4 github.com/karincake/lepet v0.0.1 github.com/karincake/risoles v0.0.3 github.com/karincake/semprit v0.0.3 + github.com/karincake/serabi v0.0.14 github.com/rs/zerolog v1.33.0 golang.org/x/crypto v0.41.0 - gorm.io/driver/postgres v1.5.11 gorm.io/gorm v1.25.12 ) @@ -34,7 +34,6 @@ require ( github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect - github.com/karincake/serabi v0.0.14 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-sqlite3 v1.14.28 // indirect @@ -46,6 +45,7 @@ require ( golang.org/x/text v0.28.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/driver/mysql v1.5.7 // indirect + gorm.io/driver/postgres v1.5.11 // indirect gorm.io/driver/sqlite v1.5.7 // indirect gorm.io/driver/sqlserver v1.5.4 // indirect ) diff --git a/go.sum b/go.sum index 8982eb2b..3045e095 100644 --- a/go.sum +++ b/go.sum @@ -69,8 +69,8 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/karincake/apem v0.0.16-h h1:rfO444oDG4cWFf0PjUshA+0U8KI/u067Va273WeJhpU= -github.com/karincake/apem v0.0.16-h/go.mod h1:cQP2sJfDrLRIiwWoaLWw/z8uAya+DWu/FpmYeinMQXM= +github.com/karincake/apem v0.0.17 h1:y3WXCr9GWLFFFH4Qyq/VWlWWpijHh5zpTc3Lm96twa4= +github.com/karincake/apem v0.0.17/go.mod h1:cQP2sJfDrLRIiwWoaLWw/z8uAya+DWu/FpmYeinMQXM= github.com/karincake/dodol v0.0.1 h1:jUXmJh1r0Ei4fmHPZ6IUkoplW/V9d27L63JEl6zudL0= github.com/karincake/dodol v0.0.1/go.mod h1:2f1NcvkvY0J3GMUkwILNDYVvRUpz0W3lpPp/Ha/Ld24= github.com/karincake/getuk v0.1.0 h1:jcIsASrr0UDE528GN7Ua6n9UFyRgUypsWh8Or8wzCO0= diff --git a/internal/domain/satusehat-entities/patient/entity.go b/internal/domain/satusehat-entities/patient/entity.go new file mode 100644 index 00000000..12efaa93 --- /dev/null +++ b/internal/domain/satusehat-entities/patient/entity.go @@ -0,0 +1,92 @@ +package patient + +type Patient struct { + ResourceType string `json:"resourceType"` + // Meta Meta `json:"meta"` + // Identifier []Identifier `json:"identifier"` + Active bool `json:"active"` + // Name []HumanName `json:"name"` + // Telecom []ContactPoint `json:"telecom"` + Gender string `json:"gender"` + BirthDate string `json:"birthDate"` + DeceasedBool bool `json:"deceasedBoolean"` + // Address []Address `json:"address"` + // MaritalStatus MaritalStatus `json:"maritalStatus"` + MultipleBirthInteger int `json:"multipleBirthInteger"` + // Contact []Contact `json:"contact"` + // Communication []Communication `json:"communication"` + // Extension []Extension `json:"extension"` +} + +type Meta struct { + Profile []string `json:"profile"` +} + +type Identifier struct { + Use string `json:"use"` + System string `json:"system"` + Value string `json:"value"` +} + +type HumanName struct { + Use string `json:"use"` + Text string `json:"text"` +} + +type ContactPoint struct { + System string `json:"system"` + Value string `json:"value"` + Use string `json:"use"` +} + +type Address struct { + Use string `json:"use"` + Line []string `json:"line"` + City string `json:"city"` + PostalCode string `json:"postalCode"` + Country string `json:"country"` + Extension []Extension `json:"extension"` +} + +type Extension struct { + URL string `json:"url"` + Extension []SubExtension `json:"extension,omitempty"` + ValueCode string `json:"valueCode,omitempty"` + ValueAddress *Address `json:"valueAddress,omitempty"` +} + +type SubExtension struct { + URL string `json:"url"` + ValueCode string `json:"valueCode"` +} + +type MaritalStatus struct { + Coding []Coding `json:"coding"` + Text string `json:"text"` +} + +type Coding struct { + System string `json:"system"` + Code string `json:"code"` + Display string `json:"display,omitempty"` +} + +type Contact struct { + Relationship []Relationship `json:"relationship"` + Name HumanName `json:"name"` + Telecom []ContactPoint `json:"telecom"` +} + +type Relationship struct { + Coding []Coding `json:"coding"` +} + +type Communication struct { + Language Language `json:"language"` + Preferred bool `json:"preferred"` +} + +type Language struct { + Coding []Coding `json:"coding"` + Text string `json:"text"` +} diff --git a/internal/infra/ss-db/ss-db.go b/internal/infra/ss-db/ss-db.go index 3c239540..810864b3 100644 --- a/internal/infra/ss-db/ss-db.go +++ b/internal/infra/ss-db/ss-db.go @@ -1,36 +1,10 @@ package ssdb import ( - "log" - - a "github.com/karincake/apem" - lo "github.com/karincake/apem/loggero" - "gorm.io/driver/postgres" - "gorm.io/gorm" - "gorm.io/gorm/schema" + dg "github.com/karincake/apem/db-gorm-pg" ) -func Init() { - SetConfig() - NewInstance() -} +func SetInstance() { -func SetConfig() { - a.ParseSingleCfg(&Cfg) -} - -func NewInstance() { - // create database connection - db, err := gorm.Open(postgres.Open(Cfg.Dsn), &gorm.Config{ - NamingStrategy: schema.NamingStrategy{ - SingularTable: true, - NoLowerCase: true, - }, - }) - if err != nil { - log.Fatal(err) - } - - SSDb = db - lo.I.Println("Instantiation for satu-sehat database-connetion using db-gorm-pg, status: DONE!!") + I = dg.IS["satusehat"] } diff --git a/internal/infra/ss-db/tycovar.go b/internal/infra/ss-db/tycovar.go index ff084508..55fc90fd 100644 --- a/internal/infra/ss-db/tycovar.go +++ b/internal/infra/ss-db/tycovar.go @@ -2,12 +2,4 @@ package ssdb import "gorm.io/gorm" -type SsDbCfg struct { - Dsn string - MaxOpenConns int `yaml:"maxOpenConns"` - MaxIdleConns int `yaml:"maxIdleConns"` - MaxIdleTime int `yaml:"maxIdleTime"` -} - -var Cfg SsDbCfg = SsDbCfg{} -var SSDb *gorm.DB +var I *gorm.DB diff --git a/internal/interface/main-handler/main-handler.go b/internal/interface/main-handler/main-handler.go index 476dacc7..5ef7d2c4 100644 --- a/internal/interface/main-handler/main-handler.go +++ b/internal/interface/main-handler/main-handler.go @@ -80,7 +80,7 @@ func SetRoutes() http.Handler { ///// a.RegisterExtCall(gs.Adjust) a.RegisterExtCall(zlc.Adjust) - a.RegisterExtCall(ssdb.Init) + a.RegisterExtCall(ssdb.SetInstance) a.RegisterExtCall(lh.Populate) a.RegisterExtCall(validation.RegisterValidation) diff --git a/internal/interface/migration/main-entities.go b/internal/interface/migration/main-entities.go new file mode 100644 index 00000000..62e7ee76 --- /dev/null +++ b/internal/interface/migration/main-entities.go @@ -0,0 +1,121 @@ +package migration + +import ( + adime "simrs-vx/internal/domain/main-entities/adime" + ambulatory "simrs-vx/internal/domain/main-entities/ambulatory" + appointment "simrs-vx/internal/domain/main-entities/appointment" + counter "simrs-vx/internal/domain/main-entities/counter" + device "simrs-vx/internal/domain/main-entities/device" + diagnosesrc "simrs-vx/internal/domain/main-entities/diagnose-src" + district "simrs-vx/internal/domain/main-entities/district" + division "simrs-vx/internal/domain/main-entities/division" + divisionposition "simrs-vx/internal/domain/main-entities/division-position" + doctor "simrs-vx/internal/domain/main-entities/doctor" + doctorfee "simrs-vx/internal/domain/main-entities/doctor-fee" + emergency "simrs-vx/internal/domain/main-entities/emergency" + employee "simrs-vx/internal/domain/main-entities/employee" + encounter "simrs-vx/internal/domain/main-entities/encounter" + ethnic "simrs-vx/internal/domain/main-entities/ethnic" + infra "simrs-vx/internal/domain/main-entities/infra" + inpatient "simrs-vx/internal/domain/main-entities/inpatient" + installation "simrs-vx/internal/domain/main-entities/installation" + insurancecompany "simrs-vx/internal/domain/main-entities/insurance-company" + item "simrs-vx/internal/domain/main-entities/item" + itemprice "simrs-vx/internal/domain/main-entities/item-price" + laborant "simrs-vx/internal/domain/main-entities/laborant" + language "simrs-vx/internal/domain/main-entities/language" + material "simrs-vx/internal/domain/main-entities/material" + mcusrc "simrs-vx/internal/domain/main-entities/mcu-src" + mcusrccategory "simrs-vx/internal/domain/main-entities/mcu-src-category" + medicalactionsrc "simrs-vx/internal/domain/main-entities/medical-action-src" + medicalactionsrcitem "simrs-vx/internal/domain/main-entities/medical-action-src-item" + medicine "simrs-vx/internal/domain/main-entities/medicine" + medicinegroup "simrs-vx/internal/domain/main-entities/medicine-group" + medicinemethod "simrs-vx/internal/domain/main-entities/medicine-method" + medicinemix "simrs-vx/internal/domain/main-entities/medicine-mix" + medicinemixitem "simrs-vx/internal/domain/main-entities/medicine-mix-item" + nurse "simrs-vx/internal/domain/main-entities/nurse" + nutritionist "simrs-vx/internal/domain/main-entities/nutritionist" + patient "simrs-vx/internal/domain/main-entities/patient" + person "simrs-vx/internal/domain/main-entities/person" + personaddress "simrs-vx/internal/domain/main-entities/person-address" + personcontact "simrs-vx/internal/domain/main-entities/person-contact" + personrelative "simrs-vx/internal/domain/main-entities/person-relative" + pharmacist "simrs-vx/internal/domain/main-entities/pharmacist" + pharmacycompany "simrs-vx/internal/domain/main-entities/pharmacy-company" + practiceschedule "simrs-vx/internal/domain/main-entities/practice-schedule" + proceduresrc "simrs-vx/internal/domain/main-entities/procedure-src" + province "simrs-vx/internal/domain/main-entities/province" + regency "simrs-vx/internal/domain/main-entities/regency" + room "simrs-vx/internal/domain/main-entities/room" + sbar "simrs-vx/internal/domain/main-entities/sbar" + soapi "simrs-vx/internal/domain/main-entities/soapi" + specialist "simrs-vx/internal/domain/main-entities/specialist" + specialistintern "simrs-vx/internal/domain/main-entities/specialist-intern" + subspecialist "simrs-vx/internal/domain/main-entities/subspecialist" + unit "simrs-vx/internal/domain/main-entities/unit" + uom "simrs-vx/internal/domain/main-entities/uom" + user "simrs-vx/internal/domain/main-entities/user" + village "simrs-vx/internal/domain/main-entities/village" +) + +func getMainEntities() []any { + return []any{ + &user.User{}, + &division.Division{}, + &divisionposition.DivisionPosition{}, + &installation.Installation{}, + &unit.Unit{}, + &village.Village{}, + &district.District{}, + ®ency.Regency{}, + &province.Province{}, + &person.Person{}, + &personaddress.PersonAddress{}, + &personcontact.PersonContact{}, + &pharmacycompany.PharmacyCompany{}, + &diagnosesrc.DiagnoseSrc{}, + &proceduresrc.ProcedureSrc{}, + &employee.Employee{}, + &doctor.Doctor{}, + &nurse.Nurse{}, + &nutritionist.Nutritionist{}, + &pharmacist.Pharmacist{}, + &counter.Counter{}, + &practiceschedule.PracticeSchedule{}, + &uom.Uom{}, + &item.Item{}, + &itemprice.ItemPrice{}, + &infra.Infra{}, + &medicinegroup.MedicineGroup{}, + &medicinemethod.MedicineMethod{}, + &mcusrccategory.McuSrcCategory{}, + &mcusrc.McuSrc{}, + ðnic.Ethnic{}, + &insurancecompany.InsuranceCompany{}, + &medicine.Medicine{}, + &medicinemix.MedicineMix{}, + &medicinemixitem.MedicineMixItem{}, + &medicalactionsrc.MedicalActionSrc{}, + &medicalactionsrcitem.MedicalActionSrcItem{}, + &material.Material{}, + &device.Device{}, + &doctorfee.DoctorFee{}, + &language.Language{}, + &personrelative.PersonRelative{}, + &patient.Patient{}, + &appointment.Appointment{}, + &encounter.Encounter{}, + &laborant.Laborant{}, + &specialist.Specialist{}, + &subspecialist.Subspecialist{}, + &specialistintern.SpecialistIntern{}, + &room.Room{}, + &soapi.Soapi{}, + &sbar.Sbar{}, + &adime.Adime{}, + &emergency.Emergency{}, + &inpatient.Inpatient{}, + &ambulatory.Ambulatory{}, + } +} diff --git a/internal/interface/migration/migration.go b/internal/interface/migration/migration.go index 990ca134..66018a21 100644 --- a/internal/interface/migration/migration.go +++ b/internal/interface/migration/migration.go @@ -5,87 +5,20 @@ import ( "io" "os" "os/exec" - adime "simrs-vx/internal/domain/main-entities/adime" - ambulatory "simrs-vx/internal/domain/main-entities/ambulatory" - appointment "simrs-vx/internal/domain/main-entities/appointment" - counter "simrs-vx/internal/domain/main-entities/counter" - device "simrs-vx/internal/domain/main-entities/device" - diagnosesrc "simrs-vx/internal/domain/main-entities/diagnose-src" - district "simrs-vx/internal/domain/main-entities/district" - division "simrs-vx/internal/domain/main-entities/division" - divisionposition "simrs-vx/internal/domain/main-entities/division-position" - doctor "simrs-vx/internal/domain/main-entities/doctor" - doctorfee "simrs-vx/internal/domain/main-entities/doctor-fee" - emergency "simrs-vx/internal/domain/main-entities/emergency" - employee "simrs-vx/internal/domain/main-entities/employee" - encounter "simrs-vx/internal/domain/main-entities/encounter" - ethnic "simrs-vx/internal/domain/main-entities/ethnic" - infra "simrs-vx/internal/domain/main-entities/infra" - inpatient "simrs-vx/internal/domain/main-entities/inpatient" - installation "simrs-vx/internal/domain/main-entities/installation" - insurancecompany "simrs-vx/internal/domain/main-entities/insurance-company" - item "simrs-vx/internal/domain/main-entities/item" - itemprice "simrs-vx/internal/domain/main-entities/item-price" - laborant "simrs-vx/internal/domain/main-entities/laborant" - language "simrs-vx/internal/domain/main-entities/language" - material "simrs-vx/internal/domain/main-entities/material" - mcusrc "simrs-vx/internal/domain/main-entities/mcu-src" - mcusrccategory "simrs-vx/internal/domain/main-entities/mcu-src-category" - medicalactionsrc "simrs-vx/internal/domain/main-entities/medical-action-src" - medicalactionsrcitem "simrs-vx/internal/domain/main-entities/medical-action-src-item" - medicine "simrs-vx/internal/domain/main-entities/medicine" - medicinegroup "simrs-vx/internal/domain/main-entities/medicine-group" - medicinemethod "simrs-vx/internal/domain/main-entities/medicine-method" - medicinemix "simrs-vx/internal/domain/main-entities/medicine-mix" - medicinemixitem "simrs-vx/internal/domain/main-entities/medicine-mix-item" - nurse "simrs-vx/internal/domain/main-entities/nurse" - nutritionist "simrs-vx/internal/domain/main-entities/nutritionist" - patient "simrs-vx/internal/domain/main-entities/patient" - person "simrs-vx/internal/domain/main-entities/person" - personaddress "simrs-vx/internal/domain/main-entities/person-address" - personcontact "simrs-vx/internal/domain/main-entities/person-contact" - personrelative "simrs-vx/internal/domain/main-entities/person-relative" - pharmacist "simrs-vx/internal/domain/main-entities/pharmacist" - pharmacycompany "simrs-vx/internal/domain/main-entities/pharmacy-company" - practiceschedule "simrs-vx/internal/domain/main-entities/practice-schedule" - proceduresrc "simrs-vx/internal/domain/main-entities/procedure-src" - province "simrs-vx/internal/domain/main-entities/province" - regency "simrs-vx/internal/domain/main-entities/regency" - room "simrs-vx/internal/domain/main-entities/room" - sbar "simrs-vx/internal/domain/main-entities/sbar" - soapi "simrs-vx/internal/domain/main-entities/soapi" - specialist "simrs-vx/internal/domain/main-entities/specialist" - specialistintern "simrs-vx/internal/domain/main-entities/specialist-intern" - subspecialist "simrs-vx/internal/domain/main-entities/subspecialist" - unit "simrs-vx/internal/domain/main-entities/unit" - uom "simrs-vx/internal/domain/main-entities/uom" - user "simrs-vx/internal/domain/main-entities/user" - village "simrs-vx/internal/domain/main-entities/village" "ariga.io/atlas-provider-gorm/gormschema" "gorm.io/gorm" "gorm.io/gorm/schema" ) -type Config struct { - DbCfg DbConf `yaml:"dbCfg"` -} - -type DbConf struct { - DSN string `yaml:"dsn"` - MaxOpenConns int `yaml:"maxOpenConns"` - MaxIdleConns int `yaml:"maxIdleConns"` - MaxIdleTime int `yaml:"maxIdleTime"` -} - -func Loader() { +func loader(input string) { gormCfg := &gorm.Config{ NamingStrategy: schema.NamingStrategy{ SingularTable: true, NoLowerCase: true, }, } - stmts, err := gormschema.New("postgres", gormschema.WithConfig(gormCfg)).Load(GetEntities()...) + stmts, err := gormschema.New("postgres", gormschema.WithConfig(gormCfg)).Load(getEntities(input)...) if err != nil { fmt.Fprintf(os.Stderr, "failed to load gorm schema: %v\n", err) os.Exit(1) @@ -93,65 +26,14 @@ func Loader() { _, _ = io.WriteString(os.Stdout, stmts) } -func GetEntities() []any { - return []any{ - &user.User{}, - &division.Division{}, - &divisionposition.DivisionPosition{}, - &installation.Installation{}, - &unit.Unit{}, - &village.Village{}, - &district.District{}, - ®ency.Regency{}, - &province.Province{}, - &person.Person{}, - &personaddress.PersonAddress{}, - &personcontact.PersonContact{}, - &pharmacycompany.PharmacyCompany{}, - &diagnosesrc.DiagnoseSrc{}, - &proceduresrc.ProcedureSrc{}, - &employee.Employee{}, - &doctor.Doctor{}, - &nurse.Nurse{}, - &nutritionist.Nutritionist{}, - &pharmacist.Pharmacist{}, - &counter.Counter{}, - &practiceschedule.PracticeSchedule{}, - &uom.Uom{}, - &item.Item{}, - &itemprice.ItemPrice{}, - &infra.Infra{}, - &medicinegroup.MedicineGroup{}, - &medicinemethod.MedicineMethod{}, - &mcusrccategory.McuSrcCategory{}, - &mcusrc.McuSrc{}, - ðnic.Ethnic{}, - &insurancecompany.InsuranceCompany{}, - &medicine.Medicine{}, - &medicinemix.MedicineMix{}, - &medicinemixitem.MedicineMixItem{}, - &medicalactionsrc.MedicalActionSrc{}, - &medicalactionsrcitem.MedicalActionSrcItem{}, - &material.Material{}, - &device.Device{}, - &doctorfee.DoctorFee{}, - &language.Language{}, - &personrelative.PersonRelative{}, - &patient.Patient{}, - &appointment.Appointment{}, - &encounter.Encounter{}, - &laborant.Laborant{}, - &specialist.Specialist{}, - &subspecialist.Subspecialist{}, - &specialistintern.SpecialistIntern{}, - &room.Room{}, - &soapi.Soapi{}, - &sbar.Sbar{}, - &adime.Adime{}, - &emergency.Emergency{}, - &inpatient.Inpatient{}, - &ambulatory.Ambulatory{}, +func getEntities(input string) []any { + switch input { + case "main": + return getMainEntities() + case "satusehat": + return getSatuSehatEntities() } + return nil } func runAtlas(args ...string) error { @@ -165,8 +47,8 @@ func logMsg(msg string) { fmt.Fprintln(os.Stderr, msg) } -func Migrate() { - Loader() +func Migrate(input string) { + loader(input) logMsg("Running atlas migrate diff...") if err := runAtlas("migrate", "diff", "--env", "gorm"); err != nil { logMsg(fmt.Sprintf("Failed to run diff: %v", err)) diff --git a/internal/interface/migration/satusehat-entities.go b/internal/interface/migration/satusehat-entities.go new file mode 100644 index 00000000..02d4aa94 --- /dev/null +++ b/internal/interface/migration/satusehat-entities.go @@ -0,0 +1,11 @@ +package migration + +import ( + patient "simrs-vx/internal/domain/satusehat-entities/patient" +) + +func getSatuSehatEntities() []any { + return []any{ + &patient.Patient{}, + } +} diff --git a/internal/interface/migration/tycovar.go b/internal/interface/migration/tycovar.go new file mode 100644 index 00000000..f86f855d --- /dev/null +++ b/internal/interface/migration/tycovar.go @@ -0,0 +1,7 @@ +/* Package migration is used to migrate the database */ +package migration + +const ( + Main = "main" + SatuSehat = "satusehat" +)