Commit 12129cb

mo khan <mo@mokhan.ca>
2022-05-15 20:48:52
refactor: tidy up migrate up/down
1 parent d1d6297
Changed files (2)
cmd/migrate/main.go
@@ -2,6 +2,8 @@ package main
 
 import (
 	"log"
+	"os"
+	"strings"
 
 	"github.com/golang-migrate/migrate/v4"
 	"github.com/golang-migrate/migrate/v4/database/sqlite3"
@@ -9,29 +11,30 @@ import (
 	"mokhan.ca/xlgmokha/idp/pkg/db"
 )
 
-func main() {
-	db, err := db.New("file:db/development.db")
+func Check(err error) {
 	if err != nil {
 		log.Fatal(err)
 	}
-	defer db.Close()
+}
 
-	instance, err := sqlite3.WithInstance(db, &sqlite3.Config{})
-	if err != nil {
-		log.Fatal(err)
-	}
+func Must[T any](item T, err error) T {
+	Check(err)
+	return item
+}
 
-	files, err := (&file.File{}).Open("./db/migrate")
-	if err != nil {
-		log.Fatal(err)
-	}
+func main() {
+	db := Must(db.New("file:db/development.db"))
+	defer db.Close()
 
-	m, err := migrate.NewWithInstance("file", files, "sqlite3", instance)
-	if err != nil {
-		log.Fatal(err)
-	}
+	instance := Must(sqlite3.WithInstance(db, &sqlite3.Config{}))
+	files := Must((&file.File{}).Open("./db/migrate"))
+	defer files.Close()
 
-	if err := m.Up(); err != nil {
-		log.Fatal(err)
+	migrations := Must(migrate.NewWithInstance("file", files, "sqlite3", instance))
+
+	if len(os.Args) == 2 && strings.ToLower(os.Args[1]) == "down" {
+		Check(migrations.Down())
+	} else {
+		Check(migrations.Up())
 	}
 }
Makefile
@@ -25,9 +25,13 @@ test: ## Run tests
 	go test -v -race $(PACKAGES)
 
 .PHONY: migrate
-migrate: ## Run db migrations
+migrate: ## Run db migrate:up
 	go run ./cmd/migrate/main.go
 
+.PHONY: migrate/down
+migrate_down: ## Run db migrate:down
+	go run ./cmd/migrate/main.go down
+
 .PHONY: help
 help:
 	@echo "Valid targets:"