Files
Novault-backend/cmd/migrate/main.go
2026-01-25 21:59:00 +08:00

70 lines
1.7 KiB
Go

package main
import (
"log"
"path/filepath"
"accounting-app/internal/config"
"accounting-app/internal/database"
"accounting-app/internal/models"
"github.com/joho/godotenv"
)
func main() {
// Load .env file from project root (try multiple locations)
envPaths := []string{
".env", // Current directory
"../.env", // Parent directory (when running from backend/)
"../../.env", // Two levels up (when running from backend/cmd/migrate/)
filepath.Join("..", "..", ".env"), // Explicit path
}
for _, envPath := range envPaths {
if err := godotenv.Load(envPath); err == nil {
log.Printf("Loaded environment from: %s", envPath)
break
}
}
// Load configuration
cfg := config.Load()
// Initialize database connection
db, err := database.Initialize(
cfg.DBHost,
cfg.DBPort,
cfg.DBUser,
cfg.DBPassword,
cfg.DBName,
cfg.DBCharset,
)
if err != nil {
log.Fatalf("Failed to connect to database: %v", err)
}
// Get underlying SQL DB for cleanup
sqlDB, err := db.DB()
if err != nil {
log.Fatalf("Failed to get underlying database: %v", err)
}
defer sqlDB.Close()
log.Println("Starting database migration...")
// Run auto migration for all models
if err := db.AutoMigrate(models.AllModels()...); err != nil {
log.Fatalf("Failed to run migrations: %v", err)
}
log.Println("Database migration completed successfully!")
// Initialize system categories (refund and reimbursement)
log.Println("Initializing system categories...")
if err := models.InitSystemCategories(db); err != nil {
log.Fatalf("Failed to initialize system categories: %v", err)
}
log.Println("System categories initialized successfully!")
}