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"
|
||||
"log"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
Config "micrach/config"
|
||||
@ -14,6 +15,12 @@ import (
|
||||
|
||||
var Pool *pgxpool.Pool
|
||||
|
||||
type MigrationsMap map[int]string
|
||||
type Migration struct {
|
||||
ID int
|
||||
Name string
|
||||
}
|
||||
|
||||
func Init() {
|
||||
var err error
|
||||
Pool, err = pgxpool.Connect(context.TODO(), Config.Db.Url)
|
||||
@ -26,14 +33,55 @@ func Init() {
|
||||
}
|
||||
|
||||
func Migrate() {
|
||||
migrations := Files.GetFullFilePathsInFolder("migrations")
|
||||
log.Println(migrations)
|
||||
for _, m := range migrations {
|
||||
dbMigrations := getDbMigrations()
|
||||
sqlMigrations := Files.GetFullFilePathsInFolder("migrations")
|
||||
for _, m := range sqlMigrations {
|
||||
filename := filepath.Base(m)
|
||||
splitted := strings.Split(filename, "-")
|
||||
id, name := splitted[0], splitted[1]
|
||||
log.Println(id, name)
|
||||
log.Println(Files.ReadFileText(m))
|
||||
id, err := strconv.Atoi(splitted[0])
|
||||
if err != nil {
|
||||
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")
|
||||
}
|
||||
|
||||
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