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" "github.com/gin-gonic/gin" "go.uber.org/zap" "gorm.io/gorm" ) 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) // 初始化服务层 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) // 认证路由 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{}, ) }