]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git/blob - db/db.go
Databse migrations.
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git] / db / db.go
1 package db
2
3 import (
4 migrate "github.com/go-pg/migrations"
5 "github.com/go-pg/pg"
6 "github.com/go-pg/pg/orm"
7 "github.com/jloup/utils"
8 )
9
10 var DB *pg.DB
11
12 var log = utils.StandardL().WithField("module", "db")
13
14 type DBConfig struct {
15 Address string
16 Database string
17 User string
18 Password string
19 }
20
21 func Init(config DBConfig) {
22 var err error
23
24 DB = connect(config)
25
26 err = migratedb()
27 if err != nil {
28 log.Fatalf("cannot migratedb '%v'\n", err)
29 }
30 }
31
32 func migratedb() error {
33 /* Remove after first MEP */
34 version, err := migrate.Version(DB)
35 if err != nil {
36 return err
37 }
38
39 if version == 0 {
40 return migrate.SetVersion(DB, 1)
41 }
42 /***/
43
44 mig := make([]migrate.Migration, 0)
45
46 for _, migration := range migrations {
47 mig = append(mig, migrate.Migration{
48 Version: migration.Version,
49 Up: func(db orm.DB) error {
50 for _, query := range migration.Up {
51 _, err := db.Exec(query)
52 if err != nil {
53 return err
54 }
55 }
56
57 return nil
58 },
59 Down: func(db orm.DB) error {
60 for _, query := range migration.Down {
61 _, err := db.Exec(query)
62 if err != nil {
63 return err
64 }
65 }
66
67 return nil
68 },
69 })
70 }
71
72 oldVersion, newVersion, err := migrate.RunMigrations(DB, mig, "up")
73
74 if oldVersion != newVersion {
75 log.Infof("Migrate DB: %v -> %v", oldVersion, newVersion)
76 } else {
77 log.Infof("DB up-to-date: version '%v'", newVersion)
78 }
79 return err
80 }
81
82 func connect(config DBConfig) *pg.DB {
83 return pg.Connect(&pg.Options{
84 User: config.User,
85 Password: config.Password,
86 Database: config.Database,
87 Addr: config.Address,
88 })
89 }