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.
 
 
 
 
 
 

85 lines
1.8 KiB

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{},
)
}