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.

120 lines
3.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
1 month ago
package main
import (
1 month ago
"gofaster/internal/auth/controller"
authModel "gofaster/internal/auth/model"
1 month ago
"gofaster/internal/auth/repository"
"gofaster/internal/auth/service"
"gofaster/internal/shared/config"
"gofaster/internal/shared/middleware"
baseModel "gofaster/internal/shared/model"
"gofaster/internal/shared/pkg/database"
"gofaster/internal/shared/pkg/logger"
"gofaster/internal/shared/routes" // 添加routes导入
workflowModel "gofaster/internal/workflow/model"
1 month ago
"github.com/gin-gonic/gin"
ginSwagger "github.com/swaggo/gin-swagger"
1 month ago
"go.uber.org/zap"
"gorm.io/gorm"
_ "gofaster/docs" // 确保这个路径是你的项目文档路径
swaggerFiles "github.com/swaggo/files"
1 month ago
)
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连接
1 month ago
// 初始化服务层
userRepo := repository.NewUserRepo(db)
roleRepo := repository.NewRoleRepo(db)
permissionRepo := repository.NewPermissionRepo(db)
1 month ago
userService := service.NewUserService(userRepo)
// 初始化控制器
userCtrl := controller.NewUserController(userService)
// 添加系统初始化
initService := service.NewInitService(db, userRepo, roleRepo, permissionRepo)
if err := initService.InitSystem(); err != nil {
log.Fatal("Failed to initialize system", zap.Error(err))
}
1 month ago
// 初始化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))
1 month ago
// 认证路由
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(
&authModel.User{},
&authModel.Role{},
&authModel.Permission{},
1 month ago
&baseModel.ActionLog{},
&workflowModel.Workflow{},
&workflowModel.WorkflowNode{},
&workflowModel.WorkflowInstance{},
&workflowModel.WorkflowTask{},
1 month ago
)
}