real db migrations
This commit is contained in:
52
src/migrations/manager.go
Normal file
52
src/migrations/manager.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
|
||||
"github.com/golang-migrate/migrate/v4"
|
||||
"github.com/golang-migrate/migrate/v4/database/sqlite"
|
||||
_ "github.com/golang-migrate/migrate/v4/source/file"
|
||||
)
|
||||
|
||||
type MigrationManager struct {
|
||||
databases map[string]*sql.DB
|
||||
}
|
||||
|
||||
func NewMigrationManager() *MigrationManager {
|
||||
return &MigrationManager{
|
||||
databases: make(map[string]*sql.DB),
|
||||
}
|
||||
}
|
||||
|
||||
// RegisterDatabase registers a database connection for migrations
|
||||
func (mm *MigrationManager) RegisterDatabase(name string, db *sql.DB) {
|
||||
mm.databases[name] = db
|
||||
}
|
||||
|
||||
// RunMigrations runs migrations for a specific database
|
||||
func (mm *MigrationManager) RunMigrations(dbName string) error {
|
||||
db, exists := mm.databases[dbName]
|
||||
if !exists {
|
||||
return fmt.Errorf("database %s not registered", dbName)
|
||||
}
|
||||
|
||||
driver, err := sqlite.WithInstance(db, &sqlite.Config{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create database driver: %w", err)
|
||||
}
|
||||
|
||||
migrationPath := fmt.Sprintf("file://migrations/%s", dbName)
|
||||
m, err := migrate.NewWithDatabaseInstance(migrationPath, "sqlite", driver)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create migration instance: %w", err)
|
||||
}
|
||||
|
||||
// Run migrations
|
||||
if err := m.Up(); err != nil && err != migrate.ErrNoChange {
|
||||
return fmt.Errorf("failed to run migrations: %w", err)
|
||||
}
|
||||
|
||||
fmt.Printf("Migrations completed successfully for database: %s\n", dbName)
|
||||
return nil
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
"knet.sk/src/migrations"
|
||||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
@@ -43,9 +44,16 @@ func StartTrackingService() *TrackingService {
|
||||
db.SetMaxIdleConns(1)
|
||||
|
||||
trackingService = &TrackingService{db: db}
|
||||
err = trackingService.initDB()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
||||
// Run migrations instead of manual table creation
|
||||
migrationManager := migrations.NewMigrationManager()
|
||||
migrationManager.RegisterDatabase("tracking", db)
|
||||
if err := migrationManager.RunMigrations("tracking"); err != nil {
|
||||
println("Warning: Migration failed:", err.Error())
|
||||
// Fallback to manual table creation for backward compatibility
|
||||
if err := trackingService.initDB(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user