mirror of
https://github.com/yanislav-igonin/micrach
synced 2025-07-01 17:01:14 +03:00
feat: add migration method
This commit is contained in:
parent
105c2afc13
commit
1fecae679a
60
db/db.go
60
db/db.go
@ -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
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user