]>
Commit | Line | Data |
---|---|---|
7a9e5112 | 1 | package db |
2 | ||
3 | import ( | |
4215df47 | 4 | migrate "github.com/go-pg/migrations" |
7a9e5112 | 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 | ||
4215df47 | 26 | err = migratedb() |
7a9e5112 | 27 | if err != nil { |
4215df47 | 28 | log.Fatalf("cannot migratedb '%v'\n", err) |
7a9e5112 | 29 | } |
4215df47 | 30 | } |
7a9e5112 | 31 | |
4215df47 | 32 | func migratedb() error { |
33 | /* Remove after first MEP */ | |
34 | version, err := migrate.Version(DB) | |
7a9e5112 | 35 | if err != nil { |
4215df47 | 36 | return err |
37 | } | |
38 | ||
39 | if version == 0 { | |
40 | return migrate.SetVersion(DB, 1) | |
7a9e5112 | 41 | } |
4215df47 | 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 | |
7a9e5112 | 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 | } |