migrations
This commit is contained in:
parent
87f408efb5
commit
b177e311e4
@ -1,7 +1,11 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"gitea.michaelthomson.dev/mthomson/habits/internal/migrate"
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Println("Hello, world")
|
migrate.Migrate();
|
||||||
}
|
}
|
||||||
|
64
internal/migrate/migrate.go
Normal file
64
internal/migrate/migrate.go
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
package migrate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
_ "github.com/mattn/go-sqlite3"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Migration struct {
|
||||||
|
Version int
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
func Migrate() {
|
||||||
|
db, err := sql.Open("sqlite3", "./habits.db")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Failed to open db pool")
|
||||||
|
}
|
||||||
|
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
migrationTableSql := `
|
||||||
|
CREATE TABLE IF NOT EXISTS migrations(
|
||||||
|
version INTEGER PRIMARY KEY,
|
||||||
|
name VARCHAR(50)
|
||||||
|
);`
|
||||||
|
|
||||||
|
_, err = db.Exec(migrationTableSql)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
files, err := os.ReadDir("./migrations")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Failed to read migrations directory")
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, file := range files {
|
||||||
|
fmt.Printf("Checking file: %s\n", file.Name())
|
||||||
|
var migration Migration
|
||||||
|
row := db.QueryRow("SELECT * FROM migrations WHERE name = ?;", file.Name())
|
||||||
|
err = row.Scan(&migration.Version, &migration.Name)
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
fmt.Printf("Running migration: %s\n", file.Name())
|
||||||
|
migrationSql, err := os.ReadFile(fmt.Sprintf("./migrations/%s", file.Name()))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = db.Exec(string(migrationSql))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = db.Exec("INSERT INTO migrations(name) VALUES(?);", file.Name())
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
4
migrations/1-init_db.sql
Normal file
4
migrations/1-init_db.sql
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
CREATE TABLE todo(
|
||||||
|
id INT PRIMARY KEY,
|
||||||
|
name VARCHAR(50)
|
||||||
|
);
|
Loading…
x
Reference in New Issue
Block a user