feat: add migration method

This commit is contained in:
Yanislav Igonin 2021-11-16 13:02:39 +02:00
parent 105c2afc13
commit 1fecae679a

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"log" "log"
"path/filepath" "path/filepath"
"strconv"
"strings" "strings"
Config "micrach/config" Config "micrach/config"
@ -14,6 +15,12 @@ import (
var Pool *pgxpool.Pool var Pool *pgxpool.Pool
type MigrationsMap map[int]string
type Migration struct {
ID int
Name string
}
func Init() { func Init() {
var err error var err error
Pool, err = pgxpool.Connect(context.TODO(), Config.Db.Url) Pool, err = pgxpool.Connect(context.TODO(), Config.Db.Url)
@ -26,14 +33,55 @@ func Init() {
} }
func Migrate() { func Migrate() {
migrations := Files.GetFullFilePathsInFolder("migrations") dbMigrations := getDbMigrations()
log.Println(migrations) sqlMigrations := Files.GetFullFilePathsInFolder("migrations")
for _, m := range migrations { for _, m := range sqlMigrations {
filename := filepath.Base(m) filename := filepath.Base(m)
splitted := strings.Split(filename, "-") splitted := strings.Split(filename, "-")
id, name := splitted[0], splitted[1] id, err := strconv.Atoi(splitted[0])
log.Println(id, name) if err != nil {
log.Println(Files.ReadFileText(m)) log.Panicln(err)
}
name := strings.Split(splitted[1], ".")[0]
if _, ok := dbMigrations[id]; !ok {
_, err = Pool.Query(context.TODO(), Files.ReadFileText(m))
if err != nil {
log.Panicln(err)
}
sql := `INSERT INTO migrations (id, name) VALUES ($1, $2)`
_, err = Pool.Query(context.TODO(), sql, id, name)
if err != nil {
log.Panicln(err)
}
}
} }
log.Println("database migrations - online") log.Println("database migrations - online")
} }
func getDbMigrations() MigrationsMap {
sql := `SELECT id, name FROM migrations`
rows, err := Pool.Query(context.TODO(), sql)
if err != nil {
log.Panicln(err)
}
if rows.Err() != nil {
log.Panicln(rows.Err())
}
migrationsMap := make(MigrationsMap)
for rows.Next() {
var m Migration
err = rows.Scan(&m.ID, &m.Name)
if err != nil {
log.Panicln(err)
}
migrationsMap[m.ID] = m.Name
}
return migrationsMap
}