migrations cmd parameter

This commit is contained in:
yequari 2026-01-03 13:14:24 -07:00
parent ebabd6c14d
commit efeda7662d
2 changed files with 15 additions and 16 deletions

View File

@ -11,6 +11,7 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"path/filepath"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@ -57,14 +58,16 @@ type application struct {
} }
type appInstaller struct { type appInstaller struct {
app *application app *application
srv *http.Server srv *http.Server
installModel models.InstallModelInterface installModel models.InstallModelInterface
migrationsPath string
} }
func main() { func main() {
addr := flag.String("addr", ":3000", "HTTP network address") addr := flag.String("addr", ":3000", "HTTP network address")
dsn := flag.String("dsn", "guestbook.db", "data source name") dsn := flag.String("dsn", "guestbook.db", "data source name")
migrations := flag.String("migrations", "migrations", "folder containing sql migrations")
debug := flag.Bool("debug", false, "enable debug mode") debug := flag.Bool("debug", false, "enable debug mode")
env := flag.String("env", ".env", ".env file path") env := flag.String("env", ".env", ".env file path")
flag.Parse() flag.Parse()
@ -113,8 +116,9 @@ func main() {
} }
installer := &appInstaller{ installer := &appInstaller{
app: app, app: app,
installModel: &models.InstallModel{DB: db}, installModel: &models.InstallModel{DB: db},
migrationsPath: filepath.Clean(*migrations),
} }
installer.srv = &http.Server{ installer.srv = &http.Server{
Addr: *addr, Addr: *addr,
@ -301,7 +305,7 @@ func walkTzDir(path string, zones []string) []string {
func runInstaller(i *appInstaller) error { func runInstaller(i *appInstaller) error {
i.app.logger.Info("Performing migrations") i.app.logger.Info("Performing migrations")
err := i.installModel.SetupDatabase() err := i.installModel.SetupDatabase(i.migrationsPath)
if err != nil { if err != nil {
return err return err
} }

View File

@ -4,7 +4,7 @@ import (
"database/sql" "database/sql"
"errors" "errors"
"fmt" "fmt"
"os" "path/filepath"
"time" "time"
"github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4"
@ -14,26 +14,21 @@ import (
) )
type InstallModel struct { type InstallModel struct {
DB *sql.DB DB *sql.DB
DBPath string
} }
type InstallModelInterface interface { type InstallModelInterface interface {
SetupDatabase() error SetupDatabase(migrations string) error
SetInstalledFlag() error SetInstalledFlag() error
GetInstalledFlag() (bool, error) GetInstalledFlag() (bool, error)
} }
func (m *InstallModel) SetupDatabase() error { func (m *InstallModel) SetupDatabase(migrations string) error {
driver, err := sqlite3.WithInstance(m.DB, &sqlite3.Config{}) driver, err := sqlite3.WithInstance(m.DB, &sqlite3.Config{})
if err != nil { if err != nil {
return err return err
} }
wd, err := os.Getwd() mFolder := fmt.Sprintf("file://%s", filepath.Clean(migrations))
if err != nil {
return err
}
mFolder := fmt.Sprintf("file://%s/migrations", wd)
fmt.Printf("migrations %s\n", mFolder) fmt.Printf("migrations %s\n", mFolder)
mi, err := migrate.NewWithDatabaseInstance(mFolder, "sqlite", driver) mi, err := migrate.NewWithDatabaseInstance(mFolder, "sqlite", driver)
if err != nil { if err != nil {