handle ss migration, tested
This commit is contained in:
@@ -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 . \" \" }}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,5 +5,5 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
m.Migrate()
|
||||
m.Migrate(m.Main)
|
||||
}
|
||||
@@ -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=
|
||||
@@ -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 . \" \" }}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 . \" \" }}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,9 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
m "simrs-vx/internal/interface/migration"
|
||||
)
|
||||
|
||||
func main() {
|
||||
m.Migrate(m.SatuSehat)
|
||||
}
|
||||
@@ -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
|
||||
);
|
||||
@@ -0,0 +1,2 @@
|
||||
h1:dPpFMJ+ZSlHizKRHShYcjJZJNZXi4UuZXZUHME8zPb4=
|
||||
20250911060006.sql h1:G3YiyY/tCTZijQWqyvyDAaMVCFkhh/gD3v/1gz/eBb8=
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
@@ -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"]
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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{},
|
||||
}
|
||||
}
|
||||
@@ -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))
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package migration
|
||||
|
||||
import (
|
||||
patient "simrs-vx/internal/domain/satusehat-entities/patient"
|
||||
)
|
||||
|
||||
func getSatuSehatEntities() []any {
|
||||
return []any{
|
||||
&patient.Patient{},
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
/* Package migration is used to migrate the database */
|
||||
package migration
|
||||
|
||||
const (
|
||||
Main = "main"
|
||||
SatuSehat = "satusehat"
|
||||
)
|
||||
Reference in New Issue
Block a user