package main import ( "context" "flag" "fmt" "log/slog" "os" "time" "git.sundynix.cn/Blizzard/Veyra/internal/config" "git.sundynix.cn/Blizzard/Veyra/internal/database" ) func main() { if err := run(); err != nil { slog.Error("database command failed", "error", err) os.Exit(1) } } func run() error { envFile := flag.String("env-file", "", "optional environment file") action := flag.String("action", "migrate", "create or migrate") flag.Parse() if *envFile != "" { if err := config.LoadEnvFile(*envFile); err != nil { return err } } c, err := config.Load() if err != nil { return err } ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() switch *action { case "create": created, err := database.Create(ctx, c) if err != nil { return err } slog.Info("database ready", "database", c.PGDatabase, "created", created) case "migrate": pool, err := database.Open(ctx, c) if err != nil { return err } defer pool.Close() if err := database.Migrate(ctx, pool); err != nil { return err } slog.Info("migrations applied", "database", c.PGDatabase) default: return fmt.Errorf("action must be create or migrate") } return nil }