From 4b78e489ef806ebba23700f1914b1e018ff35f36 Mon Sep 17 00:00:00 2001 From: vanilia Date: Thu, 13 Nov 2025 10:33:37 +0700 Subject: [PATCH 1/5] add instalation entity --- cmd/simgos-sync-migration/Makefile | 18 ++++++ cmd/simgos-sync-migration/README-ATLAS.MD | 59 +++++++++++++++++++ cmd/simgos-sync-migration/atlas.hcl.example | 22 +++++++ cmd/simgos-sync-migration/migration.go | 9 +++ internal/domain/references/common/common.go | 4 ++ .../simgos-entities/installation/entity.go | 12 ++++ internal/domain/simgos-sync-entities/.keep | 0 .../sync-entities/installation/entity.go | 29 +++++++++ internal/interface/migration/migration.go | 2 + .../migration/simgossync-entities.go | 9 +++ internal/interface/migration/tycovar.go | 5 +- 11 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 cmd/simgos-sync-migration/Makefile create mode 100644 cmd/simgos-sync-migration/README-ATLAS.MD create mode 100644 cmd/simgos-sync-migration/atlas.hcl.example create mode 100644 cmd/simgos-sync-migration/migration.go create mode 100644 internal/domain/simgos-entities/installation/entity.go delete mode 100644 internal/domain/simgos-sync-entities/.keep create mode 100644 internal/domain/sync-entities/installation/entity.go create mode 100644 internal/interface/migration/simgossync-entities.go diff --git a/cmd/simgos-sync-migration/Makefile b/cmd/simgos-sync-migration/Makefile new file mode 100644 index 00000000..e83356e5 --- /dev/null +++ b/cmd/simgos-sync-migration/Makefile @@ -0,0 +1,18 @@ +# Makefile for Atlas migrations + +# Default environment +ENV ?= gorm + +.PHONY: diff apply hash + +## Generate a new migration diff +diff: + atlas migrate diff --env $(ENV) + +## Apply migrations to the database +apply: + atlas migrate apply --env $(ENV) + +## Calculate the schema hash +hash: + atlas migrate hash diff --git a/cmd/simgos-sync-migration/README-ATLAS.MD b/cmd/simgos-sync-migration/README-ATLAS.MD new file mode 100644 index 00000000..da249823 --- /dev/null +++ b/cmd/simgos-sync-migration/README-ATLAS.MD @@ -0,0 +1,59 @@ +# Database Migration with Atlas + +This project uses [Atlas](https://atlasgo.io/) for database schema management and migrations. + +## 📋 Prerequisites + +1. **Download and Install Atlas CLI** + Run the following command in PowerShell or Git Bash: + + ```sh + curl -sSf https://atlasgo.sh | sh + ``` + Verify installation: + + ```sh + atlas version + ``` + +2. Install GORM Provider + Run inside your Go project: + + ```sh + go get -u ariga.io/atlas-provider-gorm + ``` + +3. Create atlas.hcl configuration file + Just create an atlas.hcl file in your project root as example given at atlas.hcl.example +4. Create migrations folder + ```sh + mkdir migrations + ``` +5. Usage +You can use the provided Makefile for common commands: + + Generate a migration diff + ```sh + make diff + ``` + + Apply migrations + ```sh + make apply + ``` + + Compute schema hash + ```sh + make hash + ``` + + If you don’t have make installed, you can run the Atlas commands directly: + ```sh + atlas migrate diff --env gorm + ``` + ```sh + atlas migrate apply --env gorm + ``` + ```sh + atlas migrate hash + ``` \ No newline at end of file diff --git a/cmd/simgos-sync-migration/atlas.hcl.example b/cmd/simgos-sync-migration/atlas.hcl.example new file mode 100644 index 00000000..857d1352 --- /dev/null +++ b/cmd/simgos-sync-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/simgos-sync-migration/migration.go b/cmd/simgos-sync-migration/migration.go new file mode 100644 index 00000000..fdd2c995 --- /dev/null +++ b/cmd/simgos-sync-migration/migration.go @@ -0,0 +1,9 @@ +package main + +import ( + m "simrs-vx/internal/interface/migration" +) + +func main() { + m.Migrate(m.SimgosSync) +} diff --git a/internal/domain/references/common/common.go b/internal/domain/references/common/common.go index 2941049c..71396f2a 100644 --- a/internal/domain/references/common/common.go +++ b/internal/domain/references/common/common.go @@ -16,6 +16,7 @@ type ( DataVerifiedCode string CrudCode string DataApprovalCode string + ProcessStatusCode string ) const ( @@ -101,6 +102,9 @@ const ( DACNew DataApprovalCode = "new" DACApproved DataApprovalCode = "approved" DACRejected DataApprovalCode = "rejected" + + PSCSuccess ProcessStatusCode = "success" + PSCFailed ProcessStatusCode = "failed" ) func GetDayCodes() map[DayCode]string { diff --git a/internal/domain/simgos-entities/installation/entity.go b/internal/domain/simgos-entities/installation/entity.go new file mode 100644 index 00000000..88028fc4 --- /dev/null +++ b/internal/domain/simgos-entities/installation/entity.go @@ -0,0 +1,12 @@ +package installation + +type MInstalasi struct { + NoInstalasi uint `json:"no_instalasi"` + NamaInstalasi string `json:"nama_instalasi"` + StatusRawatInap *uint `json:"status_rawat_inap"` + StAktif *uint64 `json:"st_aktif"` +} + +func (MInstalasi) TableName() string { + return "m_instalasi" +} diff --git a/internal/domain/simgos-sync-entities/.keep b/internal/domain/simgos-sync-entities/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/internal/domain/sync-entities/installation/entity.go b/internal/domain/sync-entities/installation/entity.go new file mode 100644 index 00000000..46ffe71b --- /dev/null +++ b/internal/domain/sync-entities/installation/entity.go @@ -0,0 +1,29 @@ +package installation + +import ( + ecore "simrs-vx/internal/domain/base-entities/core" + erc "simrs-vx/internal/domain/references/common" + "time" +) + +type InstallationLink struct { + ecore.Main + Simx_Id string `json:"simx_id" gorm:"unique"` + Simgos_Id uint64 `json:"simgos_id" gorm:"unique"` +} + +type InstallationSimxLog struct { + ecore.Main + Value *string `json:"value"` + Date *time.Time `json:"date"` + Status erc.ProcessStatusCode `json:"status"` + ErrMessage *string `json:"errMessage"` +} + +type InstallationSimgosLog struct { + ecore.Main + Value *string `json:"value"` + Date *time.Time `json:"date"` + Status erc.ProcessStatusCode `json:"status"` + ErrMessage *string `json:"errMessage"` +} diff --git a/internal/interface/migration/migration.go b/internal/interface/migration/migration.go index 6cec68dc..31ec1840 100644 --- a/internal/interface/migration/migration.go +++ b/internal/interface/migration/migration.go @@ -31,6 +31,8 @@ func getEntities(input string) []any { return getMainEntities() case "satusehat": return getSatuSehatEntities() + case "simgossync": + return getSimgosSyncEntities() } return nil } diff --git a/internal/interface/migration/simgossync-entities.go b/internal/interface/migration/simgossync-entities.go new file mode 100644 index 00000000..175a0ba9 --- /dev/null +++ b/internal/interface/migration/simgossync-entities.go @@ -0,0 +1,9 @@ +package migration + +func getSimgosSyncEntities() []any { + return []any{ + //&installation.InstallationLink{}, + //&installation.InstallationSimxLog{}, + //&installation.InstallationSimgosLog{}, + } +} diff --git a/internal/interface/migration/tycovar.go b/internal/interface/migration/tycovar.go index f86f855d..f6c57b4b 100644 --- a/internal/interface/migration/tycovar.go +++ b/internal/interface/migration/tycovar.go @@ -2,6 +2,7 @@ package migration const ( - Main = "main" - SatuSehat = "satusehat" + Main = "main" + SatuSehat = "satusehat" + SimgosSync = "simgossync" ) From 8cfd561a6cc328983a741f3d435a0d4c32d0deb1 Mon Sep 17 00:00:00 2001 From: vanilia Date: Thu, 13 Nov 2025 10:57:53 +0700 Subject: [PATCH 2/5] add migration sync --- .../migrations/20251113035508.sql | 36 +++++++++++++++++++ .../migrations/atlas.sum | 2 ++ .../sync-entities/installation/entity.go | 4 +-- .../migration/simgossync-entities.go | 11 ++++-- 4 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 cmd/simgos-sync-migration/migrations/20251113035508.sql create mode 100644 cmd/simgos-sync-migration/migrations/atlas.sum diff --git a/cmd/simgos-sync-migration/migrations/20251113035508.sql b/cmd/simgos-sync-migration/migrations/20251113035508.sql new file mode 100644 index 00000000..5dddf417 --- /dev/null +++ b/cmd/simgos-sync-migration/migrations/20251113035508.sql @@ -0,0 +1,36 @@ +-- Create "InstallationLink" table +CREATE TABLE "public"."InstallationLink" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Simx_Id" bigint NULL, + "Simgos_Id" bigint NULL, + PRIMARY KEY ("Id"), + CONSTRAINT "uni_InstallationLink_Simgos_Id" UNIQUE ("Simgos_Id"), + CONSTRAINT "uni_InstallationLink_Simx_Id" UNIQUE ("Simx_Id") +); +-- Create "InstallationSimgosLog" table +CREATE TABLE "public"."InstallationSimgosLog" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Value" text NULL, + "Date" timestamptz NULL, + "Status" text NULL, + "ErrMessage" text NULL, + PRIMARY KEY ("Id") +); +-- Create "InstallationSimxLog" table +CREATE TABLE "public"."InstallationSimxLog" ( + "Id" bigserial NOT NULL, + "CreatedAt" timestamptz NULL, + "UpdatedAt" timestamptz NULL, + "DeletedAt" timestamptz NULL, + "Value" text NULL, + "Date" timestamptz NULL, + "Status" text NULL, + "ErrMessage" text NULL, + PRIMARY KEY ("Id") +); diff --git a/cmd/simgos-sync-migration/migrations/atlas.sum b/cmd/simgos-sync-migration/migrations/atlas.sum new file mode 100644 index 00000000..50f3c7d3 --- /dev/null +++ b/cmd/simgos-sync-migration/migrations/atlas.sum @@ -0,0 +1,2 @@ +h1:OaRZyFJMii/8wQ0XLWEpF9MIL8IXblx3IYvB7LN2XQ4= +20251113035508.sql h1:p/FKefphuiBjEND87ChQLS/lcZcnvn0aT5tRV43Dn5o= diff --git a/internal/domain/sync-entities/installation/entity.go b/internal/domain/sync-entities/installation/entity.go index 46ffe71b..a7818f3f 100644 --- a/internal/domain/sync-entities/installation/entity.go +++ b/internal/domain/sync-entities/installation/entity.go @@ -8,8 +8,8 @@ import ( type InstallationLink struct { ecore.Main - Simx_Id string `json:"simx_id" gorm:"unique"` - Simgos_Id uint64 `json:"simgos_id" gorm:"unique"` + Simx_Id uint `json:"simx_id" gorm:"unique"` + Simgos_Id uint `json:"simgos_id" gorm:"unique"` } type InstallationSimxLog struct { diff --git a/internal/interface/migration/simgossync-entities.go b/internal/interface/migration/simgossync-entities.go index 175a0ba9..3b67265f 100644 --- a/internal/interface/migration/simgossync-entities.go +++ b/internal/interface/migration/simgossync-entities.go @@ -1,9 +1,14 @@ package migration +import ( + /************** Source ***************/ + installation "simrs-vx/internal/domain/sync-entities/installation" +) + func getSimgosSyncEntities() []any { return []any{ - //&installation.InstallationLink{}, - //&installation.InstallationSimxLog{}, - //&installation.InstallationSimgosLog{}, + &installation.InstallationLink{}, + &installation.InstallationSimxLog{}, + &installation.InstallationSimgosLog{}, } } From 4f9663d98ae9ed0c696b695c9b76c072475b690f Mon Sep 17 00:00:00 2001 From: vanilia Date: Thu, 13 Nov 2025 11:41:29 +0700 Subject: [PATCH 3/5] update m_installation --- internal/domain/simgos-entities/installation/entity.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/domain/simgos-entities/installation/entity.go b/internal/domain/simgos-entities/installation/entity.go index 88028fc4..d620af5e 100644 --- a/internal/domain/simgos-entities/installation/entity.go +++ b/internal/domain/simgos-entities/installation/entity.go @@ -1,10 +1,10 @@ package installation type MInstalasi struct { - NoInstalasi uint `json:"no_instalasi"` - NamaInstalasi string `json:"nama_instalasi"` - StatusRawatInap *uint `json:"status_rawat_inap"` - StAktif *uint64 `json:"st_aktif"` + NoInstalasi uint `json:"no_instalasi"` + NamaInstalasi string `json:"nama_instalasi"` + StatusRawatInap uint `json:"status_rawat_inap"` + StAktif uint `json:"st_aktif"` } func (MInstalasi) TableName() string { From 403c085d56fa209ddb34ac0f5993ca1c028d5d62 Mon Sep 17 00:00:00 2001 From: vanilia Date: Thu, 13 Nov 2025 17:31:49 +0700 Subject: [PATCH 4/5] revise m_instalasi --- internal/domain/simgos-entities/installation/entity.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/domain/simgos-entities/installation/entity.go b/internal/domain/simgos-entities/installation/entity.go index d620af5e..faf2786e 100644 --- a/internal/domain/simgos-entities/installation/entity.go +++ b/internal/domain/simgos-entities/installation/entity.go @@ -1,10 +1,10 @@ package installation type MInstalasi struct { - NoInstalasi uint `json:"no_instalasi"` - NamaInstalasi string `json:"nama_instalasi"` - StatusRawatInap uint `json:"status_rawat_inap"` - StAktif uint `json:"st_aktif"` + No_Instalasi uint `json:"no_instalasi" gorm:"primaryKey;autoIncrement"` + Nama_Instalasi string `json:"nama_instalasi"` + Status_Rawat_Inap uint `json:"status_rawat_inap"` + St_Aktif uint `json:"st_aktif"` } func (MInstalasi) TableName() string { From 435d3512fe93319d8b22c12743c4567efdef4d30 Mon Sep 17 00:00:00 2001 From: vanilia Date: Thu, 13 Nov 2025 21:01:03 +0700 Subject: [PATCH 5/5] revise instalasi entity --- cmd/simgos-sync-migration/migrations/atlas.sum | 4 ++-- internal/domain/simgos-entities/installation/entity.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/simgos-sync-migration/migrations/atlas.sum b/cmd/simgos-sync-migration/migrations/atlas.sum index 50f3c7d3..f1405dd2 100644 --- a/cmd/simgos-sync-migration/migrations/atlas.sum +++ b/cmd/simgos-sync-migration/migrations/atlas.sum @@ -1,2 +1,2 @@ -h1:OaRZyFJMii/8wQ0XLWEpF9MIL8IXblx3IYvB7LN2XQ4= -20251113035508.sql h1:p/FKefphuiBjEND87ChQLS/lcZcnvn0aT5tRV43Dn5o= +h1:8jMmMBxSEls9jaOUrpQQV0wUPlORRwJWd5g9742Z2fQ= +20251113035508.sql h1:rjDlu6yDdy5xv6nrCOr7NialrLSLT23pzduYNq29Hf0= diff --git a/internal/domain/simgos-entities/installation/entity.go b/internal/domain/simgos-entities/installation/entity.go index faf2786e..f2b291f5 100644 --- a/internal/domain/simgos-entities/installation/entity.go +++ b/internal/domain/simgos-entities/installation/entity.go @@ -1,10 +1,10 @@ package installation type MInstalasi struct { - No_Instalasi uint `json:"no_instalasi" gorm:"primaryKey;autoIncrement"` - Nama_Instalasi string `json:"nama_instalasi"` - Status_Rawat_Inap uint `json:"status_rawat_inap"` - St_Aktif uint `json:"st_aktif"` + No_Instalasi uint `json:"no_instalasi" gorm:"primaryKey;autoIncrement;column:no_instalasi"` + Nama_Instalasi string `json:"nama_instalasi" gorm:"column:nama_instalasi"` + Status_Rawat_Inap uint `json:"status_rawat_inap" gorm:"column:status_rawat_inap"` + St_Aktif uint `json:"st_aktif" gorm:"column:st_aktif"` } func (MInstalasi) TableName() string {