summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
Diffstat (limited to 'storage')
-rw-r--r--storage/migrate.go7
-rw-r--r--storage/storage.go5
2 files changed, 9 insertions, 3 deletions
diff --git a/storage/migrate.go b/storage/migrate.go
index decfe9c..38f9854 100644
--- a/storage/migrate.go
+++ b/storage/migrate.go
@@ -10,16 +10,18 @@ import (
//go:embed migrations/*
var migrationsFS embed.FS
-func (p *ProviderSQL) Migrate() {
+func (p *ProviderSQL) Migrate() error {
// Get the embedded filesystem
migrationsDir, err := fs.Sub(migrationsFS, "migrations")
if err != nil {
p.logger.Error("Failed to get embedded migrations directory;", "error", err)
+ return fmt.Errorf("failed to get embedded migrations directory: %w", err)
}
// List all .up.sql files
files, err := migrationsFS.ReadDir("migrations")
if err != nil {
p.logger.Error("Failed to read migrations directory;", "error", err)
+ return fmt.Errorf("failed to read migrations directory: %w", err)
}
// Execute each .up.sql file
for _, file := range files {
@@ -27,11 +29,12 @@ func (p *ProviderSQL) Migrate() {
err := p.executeMigration(migrationsDir, file.Name())
if err != nil {
p.logger.Error("Failed to execute migration %s: %v", file.Name(), err)
- panic(err)
+ return fmt.Errorf("failed to execute migration %s: %w", file.Name(), err)
}
}
}
p.logger.Debug("All migrations executed successfully!")
+ return nil
}
func (p *ProviderSQL) executeMigration(migrationsDir fs.FS, fileName string) error {
diff --git a/storage/storage.go b/storage/storage.go
index 7294261..9ad9745 100644
--- a/storage/storage.go
+++ b/storage/storage.go
@@ -103,7 +103,10 @@ func NewProviderSQL(dbPath string, logger *slog.Logger) FullRepo {
return nil
}
p := ProviderSQL{db: db, logger: logger}
- p.Migrate()
+ if err := p.Migrate(); err != nil {
+ logger.Error("migration failed, app cannot start", "error", err)
+ return nil
+ }
return p
}