summaryrefslogtreecommitdiffstats
path: root/pkg/database/database.go
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.net>2025-09-09 22:44:09 +0100
committerLeonardo Bishop <me@leonardobishop.net>2025-09-09 22:44:09 +0100
commitf1741a7faa9538e9b12ac60e0fbf6c7721a36059 (patch)
tree2b70b14fc20a8520718910a0cd2e0134790c6f53 /pkg/database/database.go
Initial commit
Diffstat (limited to 'pkg/database/database.go')
-rw-r--r--pkg/database/database.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/pkg/database/database.go b/pkg/database/database.go
new file mode 100644
index 0000000..b236d2d
--- /dev/null
+++ b/pkg/database/database.go
@@ -0,0 +1,31 @@
+package database
+
+import (
+ "database/sql"
+ "embed"
+ "fmt"
+
+ _ "github.com/mattn/go-sqlite3"
+ "github.com/pressly/goose/v3"
+)
+
+//go:embed migrations/*.sql
+var embedMigrations embed.FS
+
+func Connect(path string) (*sql.DB, error) {
+ return sql.Open("sqlite3", path+"?_foreign_keys=on")
+}
+
+func Migrate(db *sql.DB) error {
+ goose.SetBaseFS(embedMigrations)
+
+ if err := goose.SetDialect("sqlite3"); err != nil {
+ return fmt.Errorf("could not set dialect: %w", err)
+ }
+
+ if err := goose.Up(db, "migrations"); err != nil {
+ return fmt.Errorf("could not apply migrations: %w", err)
+ }
+
+ return nil
+}