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