diff --git a/cmd/server/main.go b/cmd/server/main.go index a78ad58..e09b0f8 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -17,56 +17,6 @@ import ( "malago/internal/templates" ) -func runMigrations(db *sql.DB) error { - // Create migration tracking table - _, err := db.Exec(` - CREATE TABLE IF NOT EXISTS migration_version ( - name TEXT PRIMARY KEY, - applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP - ) - `) - if err != nil { - return err - } - - migrations := []string{ - "migrations/001_init.sql", - "migrations/002_add_anime_titles.sql", - } - - for _, migrationFile := range migrations { - // Check if migration already applied - var exists int - err := db.QueryRow("SELECT COUNT(*) FROM migration_version WHERE name = ?", migrationFile).Scan(&exists) - if err != nil { - return err - } - if exists > 0 { - log.Printf("migration %s already applied, skipping", migrationFile) - continue - } - - // Read and execute migration - migrationSQL, err := os.ReadFile(migrationFile) - if err != nil { - return err - } - if _, err := db.Exec(string(migrationSQL)); err != nil { - return err - } - - // Mark as applied - _, err = db.Exec("INSERT INTO migration_version (name) VALUES (?)", migrationFile) - if err != nil { - return err - } - - log.Printf("migration %s applied successfully", migrationFile) - } - - return nil -} - func main() { dbFile := os.Getenv("DATABASE_FILE") if dbFile == "" { @@ -80,7 +30,7 @@ func main() { defer db.Close() // Run migrations with tracking - if err := runMigrations(db); err != nil { + if err := database.RunMigrations(db); err != nil { log.Fatalf("failed to run migrations: %v", err) } diff --git a/internal/database/migrate.go b/internal/database/migrate.go new file mode 100644 index 0000000..3856cdc --- /dev/null +++ b/internal/database/migrate.go @@ -0,0 +1,57 @@ +package database + +import ( + "database/sql" + "log" + "os" +) + +func RunMigrations(db *sql.DB) error { + // Create migration tracking table + _, err := db.Exec(` + CREATE TABLE IF NOT EXISTS migration_version ( + name TEXT PRIMARY KEY, + applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP + ) + `) + if err != nil { + return err + } + + migrations := []string{ + "migrations/001_init.sql", + "migrations/002_add_anime_titles.sql", + } + + for _, migrationFile := range migrations { + // Check if migration already applied + var exists int + err := db.QueryRow("SELECT COUNT(*) FROM migration_version WHERE name = ?", migrationFile).Scan(&exists) + if err != nil { + return err + } + if exists > 0 { + log.Printf("migration %s already applied, skipping", migrationFile) + continue + } + + // Read and execute migration + migrationSQL, err := os.ReadFile(migrationFile) + if err != nil { + return err + } + if _, err := db.Exec(string(migrationSQL)); err != nil { + return err + } + + // Mark as applied + _, err = db.Exec("INSERT INTO migration_version (name) VALUES (?)", migrationFile) + if err != nil { + return err + } + + log.Printf("migration %s applied successfully", migrationFile) + } + + return nil +}