feat(架构): 完善基础架构设计
This commit is contained in:
150
cmd/api/main.go
150
cmd/api/main.go
@@ -6,30 +6,72 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
_ "tyapi-server/docs" // docs is generated by Swag CLI, you have to import it.
|
||||
"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 /api/v1
|
||||
|
||||
// @securityDefinitions.apikey Bearer
|
||||
// @in header
|
||||
// @name Authorization
|
||||
// @description Type "Bearer" followed by a space and JWT token.
|
||||
|
||||
// 构建时注入的变量
|
||||
var (
|
||||
// 版本信息
|
||||
version = "1.0.0"
|
||||
commit = "unknown"
|
||||
version = "dev"
|
||||
commit = "none"
|
||||
date = "unknown"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 解析命令行参数
|
||||
// 命令行参数
|
||||
var (
|
||||
showVersion = flag.Bool("version", false, "显示版本信息")
|
||||
runMigrate = flag.Bool("migrate", false, "运行数据库迁移")
|
||||
healthCheck = flag.Bool("health", false, "执行健康检查")
|
||||
command = flag.String("cmd", "", "执行特定命令 (version|migrate|health)")
|
||||
migrate = flag.Bool("migrate", false, "运行数据库迁移")
|
||||
health = flag.Bool("health", false, "执行健康检查")
|
||||
env = flag.String("env", "", "指定运行环境 (development|production|testing)")
|
||||
)
|
||||
flag.Parse()
|
||||
|
||||
// 显示版本信息
|
||||
// 处理版本信息显示 (不需要初始化完整应用)
|
||||
if *showVersion {
|
||||
printVersion()
|
||||
return
|
||||
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")
|
||||
}
|
||||
|
||||
// 创建应用程序实例
|
||||
@@ -38,73 +80,53 @@ func main() {
|
||||
log.Fatalf("Failed to create application: %v", err)
|
||||
}
|
||||
|
||||
// 处理命令行命令
|
||||
if *command != "" {
|
||||
if err := application.RunCommand(*command); err != nil {
|
||||
log.Fatalf("Command '%s' failed: %v", *command, err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 运行数据库迁移
|
||||
if *runMigrate {
|
||||
if err := application.RunMigrations(); err != nil {
|
||||
// 处理命令行参数
|
||||
if *migrate {
|
||||
fmt.Println("Running database migrations...")
|
||||
if err := application.RunCommand("migrate"); err != nil {
|
||||
log.Fatalf("Migration failed: %v", err)
|
||||
}
|
||||
fmt.Println("Migration completed successfully")
|
||||
return
|
||||
fmt.Println("Database migrations completed successfully")
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// 执行健康检查
|
||||
if *healthCheck {
|
||||
if err := application.HealthCheck(); err != nil {
|
||||
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")
|
||||
return
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// 默认:启动应用程序服务器
|
||||
logger := application.GetLogger()
|
||||
logger.Info("Starting TYAPI Server...")
|
||||
|
||||
// 启动应用程序 (使用完整的架构)
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
// printVersion 打印版本信息
|
||||
func printVersion() {
|
||||
fmt.Printf("TYAPI Server\n")
|
||||
fmt.Printf("Version: %s\n", version)
|
||||
fmt.Printf("Commit: %s\n", commit)
|
||||
fmt.Printf("Built: %s\n", date)
|
||||
fmt.Printf("Go Version: %s\n", getGoVersion())
|
||||
}
|
||||
|
||||
// getGoVersion 获取Go版本
|
||||
func getGoVersion() string {
|
||||
return fmt.Sprintf("%s %s/%s",
|
||||
os.Getenv("GO_VERSION"),
|
||||
os.Getenv("GOOS"),
|
||||
os.Getenv("GOARCH"))
|
||||
}
|
||||
|
||||
// 信号处理相关的辅助函数
|
||||
|
||||
// handleSignals 处理系统信号(这个函数在app包中已经实现,这里只是示例)
|
||||
func handleSignals() {
|
||||
// 信号处理逻辑已经在 app.Application 中实现
|
||||
// 这里保留作为参考
|
||||
}
|
||||
|
||||
// init 初始化函数
|
||||
func init() {
|
||||
// 设置日志格式
|
||||
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||
|
||||
// 环境变量检查
|
||||
if os.Getenv("APP_ENV") == "" {
|
||||
os.Setenv("APP_ENV", "development")
|
||||
// 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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user