real db migrations

This commit is contained in:
JurajKubrican
2025-08-22 18:27:43 +02:00
parent 74669f15f7
commit 0323212d9d
6 changed files with 95 additions and 3 deletions

52
src/migrations/manager.go Normal file
View 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
}

View File

@@ -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)
}
}
}