package migration import ( "fmt" "io" "os" "os/exec" eu "simrs-vx/internal/domain/main-entities/user" "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() { gormCfg := &gorm.Config{ NamingStrategy: schema.NamingStrategy{ SingularTable: true, NoLowerCase: true, }, } stmts, err := gormschema.New("postgres", gormschema.WithConfig(gormCfg)).Load(GetEntities()...) if err != nil { fmt.Fprintf(os.Stderr, "failed to load gorm schema: %v\n", err) os.Exit(1) } _, _ = io.WriteString(os.Stdout, stmts) } func GetEntities() []any { return []any{ &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") }