feat: 实现域能系统
- 新增域能完整分层:EnergyLog/PostEnergizeLog/DailyExpSummary 模型、EnergyRepo、EnergyService、EnergyController/AdminEnergyController - 支持签到获取域能(+1)、帖子赋能(-1/-2)/被赋能(+1/+2)、改名扣能(-6)/退款(+6)、删帖扣能(-2) - 赋能单人单帖上限20域能,每日赋能获得经验上限50 - 管理员支持批量调整域能(owner)和查询域能日志(admin) - LV0用户(exp<1)禁止签到和发帖,余额为负可签到/被赋能/删帖但不能赋能/改名 - 首次改名免费(通过HasCompletedTask判重),改名扣能在提交审核时执行 - 移除导航栏手动签到按钮,签到融入域能系统(自动签到) - 新增个人中心域能TAB展示余额和流水日志(近7天) - 新增帖子详情页赋能按钮(轻赋/重赋) - 管理后台新增域能管理和域能日志页面
This commit is contained in:
@ -28,6 +28,8 @@ func setupAdminRoutes(r *gin.Engine, cfg *config.Config, d *dependencies) {
|
||||
adminPages.GET("/posts", d.adminPostCtrl.PostsPage)
|
||||
adminPages.GET("/site-settings", d.siteSettingCtrl.SiteSettingsPage,
|
||||
middleware.RequirePageRole(model.RoleOwner))
|
||||
adminPages.GET("/energy", d.adminEnergyCtrl.EnergyPage)
|
||||
adminPages.GET("/energy/logs", d.adminEnergyCtrl.EnergyLogPage)
|
||||
}
|
||||
|
||||
// --- 管理后台 API ---
|
||||
@ -71,4 +73,16 @@ func setupAdminRoutes(r *gin.Engine, cfg *config.Config, d *dependencies) {
|
||||
adminPostAPI.POST("/:id/unlock", d.adminPostCtrl.Unlock)
|
||||
adminPostAPI.POST("/:id/restore", d.adminPostCtrl.Restore)
|
||||
}
|
||||
|
||||
// --- 域能管理 API(admin+,调整需要 owner) ---
|
||||
adminEnergyAPI := r.Group("/api/admin/energy")
|
||||
adminEnergyAPI.Use(d.authMdw.Required())
|
||||
adminEnergyAPI.Use(middleware.RequireMinRole(model.RoleAdmin))
|
||||
adminEnergyAPI.Use(d.authMdw.BannedWriteGuard())
|
||||
adminEnergyAPI.Use(middleware.CSRF(cfg))
|
||||
{
|
||||
adminEnergyAPI.POST("/adjust", d.adminEnergyCtrl.AdjustEnergy,
|
||||
middleware.RequireMinRole(model.RoleOwner))
|
||||
adminEnergyAPI.GET("/logs", d.adminEnergyCtrl.ListEnergyLogs)
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,4 +87,15 @@ func setupAPIRoutes(r *gin.Engine, cfg *config.Config, d *dependencies) {
|
||||
studioAPI.DELETE("/posts/:id", d.studioCtrl.Delete)
|
||||
studioAPI.POST("/posts/:id/submit", d.studioCtrl.Submit)
|
||||
}
|
||||
|
||||
// --- 域能 API(需登录) ---
|
||||
energyAPI := r.Group("/api/energy")
|
||||
energyAPI.Use(d.authMdw.Required())
|
||||
energyAPI.Use(d.authMdw.BannedWriteGuard())
|
||||
energyAPI.Use(middleware.CSRF(cfg))
|
||||
{
|
||||
energyAPI.POST("/energize", d.energyCtrl.Energize)
|
||||
energyAPI.GET("/info", d.energyCtrl.GetEnergyInfo)
|
||||
energyAPI.GET("/logs", d.energyCtrl.GetEnergyLogs)
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,6 +31,9 @@ type dependencies struct {
|
||||
auditCtrl *adminCtrl.AuditController
|
||||
siteSettingCtrl *adminCtrl.SiteSettingController
|
||||
levelCtrl *controller.LevelController
|
||||
energyCtrl *controller.EnergyController
|
||||
adminEnergyCtrl *adminCtrl.AdminEnergyController
|
||||
energyService *service.EnergyService
|
||||
}
|
||||
|
||||
func buildDepsCore(db *gorm.DB, cfg *config.Config, siteSettings *config.SiteSettings, redisClient *redis.Client) (
|
||||
|
||||
@ -19,15 +19,25 @@ func buildDeps(db *gorm.DB, cfg *config.Config, siteSettings *config.SiteSetting
|
||||
notificationRepo := repository.NewNotificationRepo(db)
|
||||
notificationService := service.NewNotificationService(notificationRepo)
|
||||
|
||||
// 等级/签到/任务系统
|
||||
// 域能系统
|
||||
energyRepo := repository.NewEnergyRepo(db)
|
||||
energyService := service.NewEnergyService(db, energyRepo, nil, notificationService)
|
||||
|
||||
// 等级/签到/任务系统(链式注入域能服务)
|
||||
_, levelSvc, levelCtrl := buildDepsLevel(db, notificationService, authMdw)
|
||||
levelSvc.WithEnergyService(energyService)
|
||||
|
||||
// EnergyService 也需要 LevelService(用于赋能获得经验),通过 setter 注入
|
||||
energyService.SetExpAdder(levelSvc)
|
||||
|
||||
auditService := service.NewAuditService(auditRepo, userRepo, siteSettings, cfg.Audit, notificationService, levelSvc)
|
||||
auditService.WithEnergyRefundService(energyService)
|
||||
auditController := adminCtrl.NewAuditController(auditService, userRepo)
|
||||
|
||||
messageController := controller.NewMessageController(notificationService)
|
||||
|
||||
settingsCtrl := controller.NewSettingsController(authService, avatarSvc, auditService, sessionMgr, cfg, levelSvc)
|
||||
settingsCtrl.WithEnergyService(energyService)
|
||||
siteSettingController := adminCtrl.NewSiteSettingController(
|
||||
service.NewSiteSettingService(siteSettings),
|
||||
&service.AuditDefaults{
|
||||
@ -43,6 +53,11 @@ func buildDeps(db *gorm.DB, cfg *config.Config, siteSettings *config.SiteSetting
|
||||
adminPostCtrl := adminCtrl.NewAdminPostController(postService)
|
||||
adminController := adminCtrl.NewAdminController(service.NewAdminService(userRepo, postRepo, sessionMgr))
|
||||
studioCtrl := controller.NewStudioController(postService)
|
||||
studioCtrl.WithEnergyService(energyService)
|
||||
|
||||
// 域能控制器
|
||||
energyCtrl := controller.NewEnergyController(energyService)
|
||||
adminEnergyCtrl := adminCtrl.NewAdminEnergyController(energyService)
|
||||
|
||||
// 用户空间
|
||||
spaceService := service.NewSpaceService(userRepo, postRepo)
|
||||
@ -59,5 +74,8 @@ func buildDeps(db *gorm.DB, cfg *config.Config, siteSettings *config.SiteSetting
|
||||
adminCtrl: adminController, auditCtrl: auditController,
|
||||
siteSettingCtrl: siteSettingController,
|
||||
levelCtrl: levelCtrl,
|
||||
energyCtrl: energyCtrl,
|
||||
adminEnergyCtrl: adminEnergyCtrl,
|
||||
energyService: energyService,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user