Files
unified-media-manager/cmd/migrate/main.go
2026-04-24 10:45:19 -07:00

74 lines
2.1 KiB
Go

package main
import (
"context"
"flag"
"fmt"
"log/slog"
"os"
"time"
"github.com/TopherMayor/unified-media-manager/internal/db"
"github.com/TopherMayor/unified-media-manager/internal/migrate"
)
func main() {
// Flags for each arr database path
sonarr := flag.String("sonarr", "", "Path to Sonarr SQLite database")
radarr := flag.String("radarr", "", "Path to Radarr SQLite database")
sonarrAnime := flag.String("sonarr-anime", "", "Path to Sonarr-anime SQLite database")
radarrAnime := flag.String("radarr-anime", "", "Path to Radarr-anime SQLite database")
lidarr := flag.String("lidarr", "", "Path to Lidarr SQLite database")
readarr := flag.String("readarr", "", "Path to Readarr SQLite database")
prowlarr := flag.String("prowlarr", "", "Path to Prowlarr SQLite database")
databaseURL := flag.String("database-url", "", "PostgreSQL connection string (or set DATABASE_URL env)")
flag.Parse()
if *databaseURL == "" {
*databaseURL = os.Getenv("DATABASE_URL")
}
if *databaseURL == "" {
*databaseURL = "postgres://bear:bear123@postgres-shared:5432/umm?sslmode=disable"
}
slog.Info("starting UMM arr data migration tool")
// Connect to PostgreSQL
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
database, err := db.New(ctx, *databaseURL)
cancel()
if err != nil {
slog.Error("failed to connect to database", "error", err)
os.Exit(1)
}
defer database.Close()
// Run schema migrations to ensure tables exist
if err := database.RunMigrations(context.Background(), db.MigrationsFS); err != nil {
slog.Error("failed to run migrations", "error", err)
os.Exit(1)
}
sources := migrate.ArrSources{
Sonarr: *sonarr,
Radarr: *radarr,
SonarrAnime: *sonarrAnime,
RadarrAnime: *radarrAnime,
Lidarr: *lidarr,
Readarr: *readarr,
Prowlarr: *prowlarr,
}
m := migrate.NewMigrator(database, sources)
report, err := m.Run(context.Background())
if err != nil {
slog.Error("migration failed", "error", err)
fmt.Println()
fmt.Println(report.String())
os.Exit(1)
}
fmt.Println()
fmt.Println(report.String())
}