done
This commit is contained in:
@@ -27,6 +27,7 @@ go.work.sum
|
|||||||
# env file
|
# env file
|
||||||
.env
|
.env
|
||||||
config.yml
|
config.yml
|
||||||
|
cmd/migration/atlas.hcl
|
||||||
|
|
||||||
# Editor/IDE
|
# Editor/IDE
|
||||||
# .idea/
|
# .idea/
|
||||||
|
|||||||
@@ -9,10 +9,11 @@ data "external_schema" "gorm" {
|
|||||||
|
|
||||||
env "gorm" {
|
env "gorm" {
|
||||||
src = data.external_schema.gorm.url
|
src = data.external_schema.gorm.url
|
||||||
dev = "postgres://moko:password@localhost:5432/simrs_vx1?sslmode=disable"
|
dev = "postgres://moko:password@localhost:5432/simrs_vx3?sslmode=disable"
|
||||||
migration {
|
migration {
|
||||||
dir = "file://migrations"
|
dir = "file://migrations"
|
||||||
}
|
}
|
||||||
|
url = "postgres://moko:password@localhost:5432/simrs_vx1?sslmode=disable"
|
||||||
format {
|
format {
|
||||||
migrate {
|
migrate {
|
||||||
diff = "{{ sql . \" \" }}"
|
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 . \" \" }}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,9 +4,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
eu "simrs-vx/internal/domain/main-entities/user"
|
eu "simrs-vx/internal/domain/main-entities/user"
|
||||||
|
|
||||||
"ariga.io/atlas-provider-gorm/gormschema"
|
"ariga.io/atlas-provider-gorm/gormschema"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"gorm.io/gorm/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
@@ -20,8 +23,14 @@ type DbConf struct {
|
|||||||
MaxIdleTime int `yaml:"maxIdleTime"`
|
MaxIdleTime int `yaml:"maxIdleTime"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func Migrate() {
|
func Loader() {
|
||||||
stmts, err := gormschema.New("postgres").Load(getEntities()...)
|
gormCfg := &gorm.Config{
|
||||||
|
NamingStrategy: schema.NamingStrategy{
|
||||||
|
SingularTable: true,
|
||||||
|
NoLowerCase: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
stmts, err := gormschema.New("postgres", gormschema.WithConfig(gormCfg)).Load(GetEntities()...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "failed to load gorm schema: %v\n", err)
|
fmt.Fprintf(os.Stderr, "failed to load gorm schema: %v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@@ -29,8 +38,36 @@ func Migrate() {
|
|||||||
_, _ = io.WriteString(os.Stdout, stmts)
|
_, _ = io.WriteString(os.Stdout, stmts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getEntities() []any {
|
func GetEntities() []any {
|
||||||
return []any{
|
return []any{
|
||||||
&eu.User{},
|
&eu.User{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func runAtlas(args ...string) error {
|
||||||
|
cmd := exec.Command("atlas", args...)
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
return cmd.Run()
|
||||||
|
}
|
||||||
|
|
||||||
|
func logMsg(msg string) {
|
||||||
|
fmt.Fprintln(os.Stderr, msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Migrate() {
|
||||||
|
Loader()
|
||||||
|
logMsg("Running atlas migrate diff...")
|
||||||
|
if err := runAtlas("migrate", "diff", "--env", "gorm"); err != nil {
|
||||||
|
logMsg(fmt.Sprintf("Failed to run diff: %v", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
logMsg("Running atlas migrate apply...")
|
||||||
|
if err := runAtlas("migrate", "apply", "--env", "gorm"); err != nil {
|
||||||
|
logMsg(fmt.Sprintf("Failed to run apply: %v", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
logMsg("Migration complete")
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user