From 4b78e489ef806ebba23700f1914b1e018ff35f36 Mon Sep 17 00:00:00 2001 From: vanilia Date: Thu, 13 Nov 2025 10:33:37 +0700 Subject: [PATCH] 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" )