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.
 
 
 
 
 
 

109 lines
2.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 (
"gofaster/internal/config"
"gofaster/internal/controller"
"gofaster/internal/middleware"
"gofaster/internal/model"
"gofaster/internal/repository"
"gofaster/internal/service"
"gofaster/pkg/database"
"gofaster/pkg/logger"
"gofaster/routes" // 添加routes导入
"github.com/gin-gonic/gin"
ginSwagger "github.com/swaggo/gin-swagger"
"go.uber.org/zap"
"gorm.io/gorm"
_ "gofaster/docs" // 确保这个路径是你的项目文档路径
swaggerFiles "github.com/swaggo/files"
)
func main() {
// 加载配置
cfg := config.LoadConfig()
// 初始化日志
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))
}
// 自动迁移
if err := autoMigrate(db); err != nil {
log.Fatal("Failed to migrate database", zap.Error(err))
}
// 初始化Redis
redisClient := database.NewRedisClient(&cfg.Redis)
defer redisClient.Close() // 确保程序退出时关闭Redis连接
// 初始化服务层
userRepo := repository.NewUserRepo(db)
userService := service.NewUserService(userRepo)
// 初始化控制器
userCtrl := controller.NewUserController(userService)
// 初始化Gin
app := gin.New()
// 中间件
app.Use(middleware.LoggerMiddleware(log, db))
app.Use(middleware.RecoveryMiddleware(log))
app.Use(middleware.CORSMiddleware())
// 路由
api := app.Group("/api")
routes.RegisterUserRoutes(api, userCtrl)
// 添加Swagger路由
app.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
// 认证路由
authApi := api.Group("")
authApi.Use(middleware.AuthMiddleware(cfg.JWT.Secret))
{
// 需要认证的路由
}
// 启动服务器
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))
}
}
func autoMigrate(db *gorm.DB) error {
return db.AutoMigrate(
&model.User{},
&model.Role{},
&model.Permission{},
&model.ActionLog{},
&model.Workflow{},
&model.WorkflowNode{},
&model.WorkflowInstance{},
&model.WorkflowTask{},
)
}