gohorsejobs/backend/cmd/manual_migrate/main.go
2026-02-12 20:13:46 -03:00

94 lines
2.1 KiB
Go

package main
import (
"database/sql"
"fmt"
"log"
"os"
"strings"
"github.com/joho/godotenv"
_ "github.com/lib/pq"
)
func main() {
pwd, _ := os.Getwd()
log.Printf("Current Working Directory: %s", pwd)
if err := godotenv.Load(".env"); err != nil {
// Try loading from parent if not in root
if err := godotenv.Load("../.env"); err != nil {
log.Println("No .env file found")
}
}
dbURL := os.Getenv("DATABASE_URL")
if dbURL == "" {
log.Fatal("DATABASE_URL environment variable not set")
}
db, err := sql.Open("postgres", dbURL)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// List of migrations to run (in order)
migrations := []string{
"024_create_external_services_credentials.sql",
"025_create_chat_tables.sql",
"026_create_system_settings.sql",
"027_create_email_system.sql",
"028_add_avatar_url_to_users.sql",
}
for _, migFile := range migrations {
log.Printf("Processing migration: %s", migFile)
// Try multiple paths
paths := []string{
"migrations/" + migFile,
"backend/migrations/" + migFile,
"../migrations/" + migFile,
"/home/yamamoto/lab/gohorsejobs/backend/migrations/" + migFile,
}
var content []byte
var readErr error
for _, p := range paths {
content, readErr = os.ReadFile(p)
if readErr == nil {
log.Printf("Found migration at: %s", p)
break
}
}
if content == nil {
log.Fatalf("Could not find migration file %s. Last error: %v", migFile, readErr)
}
statements := strings.Split(string(content), ";")
for _, stmt := range statements {
trimmed := strings.TrimSpace(stmt)
if trimmed == "" {
continue
}
log.Printf("Executing: %s", trimmed)
_, err = db.Exec(trimmed)
if err != nil {
if strings.Contains(err.Error(), "already exists") {
log.Printf("Warning (ignored): %v", err)
} else {
log.Printf("FAILED executing: %s\nError: %v", trimmed, err)
// Verify if we should stop. For now, continue best effort or fail?
// Use fatal for critical schema errors not "already exists"
log.Fatal(err)
}
}
}
log.Printf("Migration %s applied successfully", migFile)
}
fmt.Println("All requested migrations applied.")
}