You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.1 KiB
138 lines
4.1 KiB
// @title GoFaster API |
|
// @version 1.0 |
|
// @description GoFaster项目API文档 |
|
// @termsOfService http://swagger.io/terms/ |
|
|
|
// @contact.name API支持 |
|
// @contact.url http://www.gofaster.com/support |
|
// @contact.email support@gofaster.com |
|
|
|
// @license.name Apache 2.0 |
|
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html |
|
|
|
// @host localhost:8080 |
|
// @BasePath /api |
|
// @schemes http |
|
package main |
|
|
|
import ( |
|
"fmt" |
|
"gofaster/internal/core" |
|
"gofaster/internal/shared/config" |
|
"gofaster/internal/shared/database" |
|
"gofaster/internal/shared/logger" |
|
"gofaster/internal/shared/middleware" |
|
"time" |
|
|
|
// 导入各模块 |
|
_ "gofaster/internal/auth" |
|
_ "gofaster/internal/workflow" |
|
|
|
"github.com/gin-gonic/gin" |
|
ginSwagger "github.com/swaggo/gin-swagger" |
|
"go.uber.org/zap" |
|
|
|
_ "gofaster/docs" |
|
|
|
swaggerFiles "github.com/swaggo/files" |
|
) |
|
|
|
func main() { |
|
printBanner() |
|
|
|
loc, err := time.LoadLocation("Asia/Shanghai") |
|
if err != nil { |
|
fmt.Printf("时区加载失败: %v\n", err) |
|
} else { |
|
fmt.Printf("时区加载成功: %v\n", loc) |
|
} |
|
|
|
// 列出可用时区(部分) |
|
fmt.Println("当前时间:", time.Now()) |
|
fmt.Println("UTC时间:", time.Now().UTC()) |
|
|
|
// 初始化配置 |
|
cfg, err := config.LoadConfig() |
|
if err != nil { |
|
panic(fmt.Sprintf("配置加载错误: %v\n", err)) |
|
} |
|
|
|
// 初始化日志 |
|
log := logger.NewLogger(cfg.Log.Level, cfg.Log.Path) |
|
defer log.Sync() |
|
|
|
// 初始化数据库 |
|
db, err := database.NewDB(&cfg.DB) |
|
if err != nil { |
|
log.Fatal("Failed to connect database", zap.Error(err)) |
|
} |
|
|
|
// 初始化Redis |
|
redisClient := database.NewRedisClient(&cfg.Redis, log) |
|
defer redisClient.Close() |
|
|
|
// 创建模块管理器 |
|
moduleManager := core.NewModuleManager(log) |
|
|
|
// 自动发现并注册模块 |
|
|
|
if err := core.DiscoverModules(moduleManager); err != nil { |
|
log.Fatal("Failed to discover modules", zap.Error(err)) |
|
} |
|
fmt.Printf("✅ 模块发现完成\n") |
|
|
|
// 初始化所有模块 |
|
|
|
if err := moduleManager.InitModules(cfg, db, redisClient); err != nil { |
|
log.Fatal("Failed to initialize modules", zap.Error(err)) |
|
} |
|
fmt.Printf("✅ 模块初始化完成\n") |
|
|
|
// 创建Gin应用 |
|
app := gin.New() |
|
app.Use( |
|
middleware.Logger(log), |
|
middleware.RecoveryMiddleware(log), |
|
middleware.CORSMiddleware(), |
|
) |
|
|
|
// 注册路由 |
|
|
|
api := app.Group("/api") |
|
moduleManager.RegisterRoutes(api) |
|
fmt.Printf("✅ 路由注册完成\n") |
|
|
|
// 健康检查端点 |
|
app.GET("/health", func(c *gin.Context) { |
|
c.JSON(200, gin.H{ |
|
"status": "ok", |
|
"message": "GoFaster API is running", |
|
"timestamp": "2024-01-01T00:00:00Z", |
|
}) |
|
}) |
|
|
|
// Swagger路由 |
|
app.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) |
|
|
|
// 启动服务器 |
|
log.Info("Starting server", zap.String("port", cfg.Server.Port)) |
|
if err := app.Run(":" + cfg.Server.Port); err != nil { |
|
log.Fatal("Failed to start server", zap.Error(err)) |
|
} |
|
|
|
// 清理模块资源 |
|
// moduleManager.Cleanup() // 暂时注释掉,因为ModuleManager没有这个方法 |
|
} |
|
|
|
func printBanner() { |
|
fmt.Print("\033[92m") |
|
fmt.Println(` |
|
██████╗ ██████╗ ███████╗ █████╗ ███████╗████████╗███████╗██████╗ |
|
██╔════╝ ██╔═══██╗██╔════╝██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗ |
|
██║ ███╗██║ ██║█████╗ ███████║███████╗ ██║ █████╗ ██████╔╝ |
|
██║ ██║██║ ██║██╔══╝ ██╔══██║ ██║ ██║ ██╔══╝ ██╔══██╗ |
|
╚██████╔╝╚██████╔╝██║ ██║ ██║███████║ ██║ ███████╗██║ ██║ |
|
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ |
|
`) |
|
fmt.Print("\033[0m") |
|
}
|
|
|