X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=db%2Fdb.go;h=7f87201a354abb1d7a64a0e1166972ea758fa83f;hb=4215df47c93c6ea26f21c74a9d52f78d1d103dde;hp=bc4b8b3f4e5a16d345849b3972e563b7e629f5ba;hpb=7a9e5112eaaea58d55f181d3e5296e4ff839921c;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FFront.git diff --git a/db/db.go b/db/db.go index bc4b8b3..7f87201 100644 --- a/db/db.go +++ b/db/db.go @@ -1,9 +1,7 @@ package db import ( - "fmt" - "strings" - + migrate "github.com/go-pg/migrations" "github.com/go-pg/pg" "github.com/go-pg/pg/orm" "github.com/jloup/utils" @@ -25,15 +23,60 @@ func Init(config DBConfig) { DB = connect(config) - err = createSchema(DB) + err = migratedb() if err != nil { - log.Errorf("cannot create schemas %v\n", err) + log.Fatalf("cannot migratedb '%v'\n", err) } +} - err = createIndexes(DB) +func migratedb() error { + /* Remove after first MEP */ + version, err := migrate.Version(DB) if err != nil { - log.Errorf("cannot create indexes %v\n", err) + return err + } + + if version == 0 { + return migrate.SetVersion(DB, 1) } + /***/ + + mig := make([]migrate.Migration, 0) + + for _, migration := range migrations { + mig = append(mig, migrate.Migration{ + Version: migration.Version, + Up: func(db orm.DB) error { + for _, query := range migration.Up { + _, err := db.Exec(query) + if err != nil { + return err + } + } + + return nil + }, + Down: func(db orm.DB) error { + for _, query := range migration.Down { + _, err := db.Exec(query) + if err != nil { + return err + } + } + + return nil + }, + }) + } + + oldVersion, newVersion, err := migrate.RunMigrations(DB, mig, "up") + + if oldVersion != newVersion { + log.Infof("Migrate DB: %v -> %v", oldVersion, newVersion) + } else { + log.Infof("DB up-to-date: version '%v'", newVersion) + } + return err } func connect(config DBConfig) *pg.DB { @@ -44,32 +87,3 @@ func connect(config DBConfig) *pg.DB { Addr: config.Address, }) } - -func createSchema(db *pg.DB) error { - for _, model := range []interface{}{&User{}, &MarketConfig{}} { - err := db.CreateTable(model, &orm.CreateTableOptions{IfNotExists: true}) - if err != nil { - return err - } - } - return nil -} - -func createIndexes(db *pg.DB) error { - indexes := []struct { - TableName string - Name string - Columns []string - }{ - {"market_configs", "market_name_user_id_idx", []string{"user_id", "market_name"}}, - } - - for _, index := range indexes { - _, err := db.Exec(fmt.Sprintf("CREATE UNIQUE INDEX IF NOT EXISTS %s ON %s (%s)", index.Name, index.TableName, strings.Join(index.Columns, ","))) - if err != nil { - return err - } - } - - return nil -}