package main import ( "flag" "fmt" "log" "os" "time" "tyapi-server/internal/app" ) // @title TYAPI Server API // @version 1.0 // @description 基于DDD和Clean Architecture的企业级后端API服务 // @description 采用Gin框架构建,支持用户管理、JWT认证、事件驱动等功能 // @contact.name API Support // @contact.url https://github.com/your-org/tyapi-server-gin // @contact.email support@example.com // @license.name Apache 2.0 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html // @host localhost:8080 // @BasePath / // @securityDefinitions.apikey Bearer // @in header // @name Authorization // @description Type "Bearer" followed by a space and JWT token. // 构建时注入的变量 var ( version = "dev" commit = "none" date = "unknown" ) func main() { // 设置时区为北京时间 time.Local = time.FixedZone("CST", 8*3600) // 命令行参数 var ( showVersion = flag.Bool("version", false, "显示版本信息") migrate = flag.Bool("migrate", false, "运行数据库迁移") health = flag.Bool("health", false, "执行健康检查") env = flag.String("env", "", "指定运行环境 (development|production|testing)") ) flag.Parse() // 处理版本信息显示 (不需要初始化完整应用) if *showVersion { fmt.Printf("TYAPI Server\n") fmt.Printf("Version: %s\n", version) fmt.Printf("Commit: %s\n", commit) fmt.Printf("Build Date: %s\n", date) os.Exit(0) } // 设置环境变量(如果通过命令行指定) if *env != "" { if err := validateEnvironment(*env); err != nil { log.Fatalf("无效的环境参数: %v", err) } os.Setenv("ENV", *env) fmt.Printf("🌍 通过命令行设置环境: %s\n", *env) } // 显示当前环境 currentEnv := getCurrentEnvironment() fmt.Printf("🔧 当前运行环境: %s\n", currentEnv) // 生产环境安全提示 if currentEnv == "production" { fmt.Printf("⚠️ 生产环境模式 - 请确保配置正确\n") } // 创建应用程序实例 application, err := app.NewApplication() if err != nil { log.Fatalf("Failed to create application: %v", err) } // 处理命令行参数 if *migrate { fmt.Println("Running database migrations...") if err := application.RunCommand("migrate"); err != nil { log.Fatalf("Migration failed: %v", err) } fmt.Println("Database migrations completed successfully") os.Exit(0) } if *health { fmt.Println("Performing health check...") if err := application.RunCommand("health"); err != nil { log.Fatalf("Health check failed: %v", err) } fmt.Println("Health check passed") os.Exit(0) } // 启动应用程序 (使用完整的架构) fmt.Printf("🚀 Starting TYAPI Server v%s (%s)\n", version, commit) if err := application.Run(); err != nil { log.Fatalf("Application failed to start: %v", err) } } // validateEnvironment 验证环境参数 func validateEnvironment(env string) error { validEnvs := []string{"development", "production", "testing"} for _, validEnv := range validEnvs { if env == validEnv { return nil } } return fmt.Errorf("环境必须是以下之一: %v", validEnvs) } // getCurrentEnvironment 获取当前环境(与config包中的逻辑保持一致) func getCurrentEnvironment() string { if env := os.Getenv("CONFIG_ENV"); env != "" { return env } if env := os.Getenv("ENV"); env != "" { return env } if env := os.Getenv("APP_ENV"); env != "" { return env } return "development" }