94 lines
2.1 KiB
Go
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.")
|
|
}
|