migrations

This commit is contained in:
Michael Thomson 2025-02-06 12:41:54 -05:00
parent 87f408efb5
commit b177e311e4
No known key found for this signature in database
GPG Key ID: 8EFECCD347C72F7D
4 changed files with 74 additions and 2 deletions

View File

@ -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();
} }

BIN
habits.db Normal file

Binary file not shown.

View 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
View File

@ -0,0 +1,4 @@
CREATE TABLE todo(
id INT PRIMARY KEY,
name VARCHAR(50)
);