diff --git a/internal/database/database.go b/internal/database/database.go new file mode 100644 index 0000000..dacd5c1 --- /dev/null +++ b/internal/database/database.go @@ -0,0 +1,38 @@ +package database + +import ( + "embed" + "fmt" + + "github.com/jmoiron/sqlx" + _ "github.com/mattn/go-sqlite3" + migrate "github.com/rubenv/sql-migrate" +) + +var DB *sqlx.DB + +//go:embed migrations/* +var dbMigrations embed.FS + +func Connect(filename string) error { + DB, err := sqlx.Open("sqlite3", filename) + + if err != nil { + return err + } + + migrations := migrate.EmbedFileSystemMigrationSource{ + FileSystem: dbMigrations, + Root: "migrations", + } + + n, err := migrate.Exec(DB.DB, "sqlite3", migrations, migrate.Up) + + if err != nil { + return err + } + + fmt.Printf("Applied %d migrations - Database is ready!\n", n) + + return nil +} diff --git a/internal/database/migrations/1_initial.sql b/internal/database/migrations/1_initial.sql new file mode 100644 index 0000000..b544f21 --- /dev/null +++ b/internal/database/migrations/1_initial.sql @@ -0,0 +1,8 @@ +-- +migrate Up +CREATE table users ( + id INTEGER PRIMARY KEY, + name text NOT NULL +); + +-- +migrate Down +DROP TABLE users;