|
|
|
// @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/auth/controller"
|
|
|
|
authModel "gofaster/internal/auth/model"
|
|
|
|
"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"
|
|
|
|
|
|
|
|
"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)
|
|
|
|
roleRepo := repository.NewRoleRepo(db)
|
|
|
|
permissionRepo := repository.NewPermissionRepo(db)
|
|
|
|
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))
|
|
|
|
}
|
|
|
|
|
|
|
|
// 初始化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(
|
|
|
|
&authModel.User{},
|
|
|
|
&authModel.Role{},
|
|
|
|
&authModel.Permission{},
|
|
|
|
&baseModel.ActionLog{},
|
|
|
|
&workflowModel.Workflow{},
|
|
|
|
&workflowModel.WorkflowNode{},
|
|
|
|
&workflowModel.WorkflowInstance{},
|
|
|
|
&workflowModel.WorkflowTask{},
|
|
|
|
)
|
|
|
|
}
|