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.
 
 
 
 
 
 

117 lines
3.5 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"
// 导入各模块
_ "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()
// 初始化配置
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.LoggerMiddleware(log, db),
middleware.RecoveryMiddleware(log),
middleware.CORSMiddleware(),
)
// 注册路由
api := app.Group("/api")
moduleManager.RegisterRoutes(api)
fmt.Printf("✅ 路由注册完成\n")
// 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()
}
func printBanner() {
fmt.Print("\033[92m")
fmt.Println(`
██████╗ ██████╗ ███████╗ █████╗ ███████╗████████╗███████╗██████╗
██╔════╝ ██╔═══██╗██╔════╝██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗
██║ ███╗██║ ██║█████╗ ███████║███████╗ ██║ █████╗ ██████╔╝
██║ ██║██║ ██║██╔══╝ ██╔══██║ ██║ ██║ ██╔══╝ ██╔══██╗
╚██████╔╝╚██████╔╝██║ ██║ ██║███████║ ██║ ███████╗██║ ██║
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝
`)
fmt.Print("\033[0m")
}