- 评论图片上传(LV4+,经验≥1500),JPEG/PNG 自动转 WebP,二进制搜索质量优化 - 后台评论管理页面,支持关键词搜索、分页、删除,侧边栏新增入口 - 通知跳转高亮:评论通知 RelatedID 改为 postID,消息页链接到 #comments,前端自动滚动 - 新增 adminCommentUseCase/commentStore 接口(遵循 ISP),AdminCommentRow 移至 model 层 - 前端 @mention 联想/图片上传光标插入/评论展开收起/内联回复交互完善
89 lines
3.4 KiB
Go
89 lines
3.4 KiB
Go
package router
|
||
|
||
import (
|
||
"log"
|
||
"time"
|
||
|
||
"metazone.cc/metalab/internal/config"
|
||
"metazone.cc/metalab/internal/controller"
|
||
adminCtrl "metazone.cc/metalab/internal/controller/admin"
|
||
"metazone.cc/metalab/internal/middleware"
|
||
"metazone.cc/metalab/internal/repository"
|
||
"metazone.cc/metalab/internal/service"
|
||
"metazone.cc/metalab/internal/session"
|
||
|
||
"github.com/redis/go-redis/v9"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
type dependencies struct {
|
||
authCtrl *controller.AuthController
|
||
authMdw *middleware.AuthMiddleware
|
||
maintenanceMdw *middleware.MaintenanceMiddleware
|
||
settingsCtrl *controller.SettingsController
|
||
messageCtrl *controller.MessageController
|
||
postCtrl *controller.PostController
|
||
postService *service.PostService
|
||
spaceCtrl *controller.SpaceController
|
||
studioCtrl *controller.StudioController
|
||
adminPostCtrl *adminCtrl.AdminPostController
|
||
adminCtrl *adminCtrl.AdminController
|
||
auditCtrl *adminCtrl.AuditController
|
||
siteSettingCtrl *adminCtrl.SiteSettingController
|
||
levelCtrl *controller.LevelController
|
||
energyCtrl *controller.EnergyController
|
||
adminEnergyCtrl *adminCtrl.AdminEnergyController
|
||
energyService *service.EnergyService
|
||
commentCtrl *controller.CommentController
|
||
commentService *service.CommentService
|
||
adminCommentCtrl *adminCtrl.AdminCommentController
|
||
}
|
||
|
||
func buildDepsCore(db *gorm.DB, cfg *config.Config, siteSettings *config.SiteSettings, redisClient *redis.Client) (
|
||
*repository.UserRepo, *session.Manager, *service.AuthService,
|
||
*middleware.RateLimiter, *controller.AuthController,
|
||
*service.AvatarService, *middleware.AuthMiddleware,
|
||
) {
|
||
userRepo := repository.NewUserRepo(db)
|
||
|
||
idleTimeout := time.Duration(cfg.Session.IdleTimeout) * time.Minute
|
||
rememberTimeout := time.Duration(cfg.Session.RememberTimeout) * time.Minute
|
||
cleanupInterval := time.Duration(cfg.Session.CleanupInterval) * time.Second
|
||
|
||
// 总是创建 MemoryStore 作为兜底
|
||
memStore := session.NewMemoryStore(idleTimeout, rememberTimeout)
|
||
memStore.StartCleanup(cleanupInterval)
|
||
|
||
var sessionStore session.Store
|
||
|
||
if cfg.Redis.Enabled && redisClient != nil {
|
||
// Redis 模式 + 自动降级保护
|
||
redisStore := session.NewRedisStore(redisClient, idleTimeout, rememberTimeout)
|
||
sessionStore = session.NewFallbackStore(redisStore, memStore)
|
||
log.Println("[Router] 会话存储: Redis(带内存降级保护)")
|
||
} else {
|
||
// 纯内存模式
|
||
sessionStore = memStore
|
||
log.Println("[Router] 会话存储: 内存")
|
||
}
|
||
|
||
sessionMgr := session.NewManager(sessionStore, userRepo, cfg)
|
||
authService := service.NewAuthService(userRepo, sessionMgr, cfg, siteSettings)
|
||
rateLimiter := middleware.NewRateLimiter()
|
||
authCtrl := controller.NewAuthController(authService, sessionMgr, rateLimiter, cfg)
|
||
avatarSvc := service.NewAvatarService(userRepo)
|
||
authMdw := middleware.NewAuthMiddleware(cfg, sessionMgr)
|
||
return userRepo, sessionMgr, authService, rateLimiter, authCtrl, avatarSvc, authMdw
|
||
}
|
||
|
||
// buildDepsLevel 构建等级/签到相关依赖
|
||
func buildDepsLevel(db *gorm.DB, notifSvc *service.NotificationService, authMdw *middleware.AuthMiddleware) (
|
||
*repository.LevelRepo, *service.LevelService, *controller.LevelController,
|
||
) {
|
||
levelRepo := repository.NewLevelRepo(db)
|
||
levelSvc := service.NewLevelService(levelRepo, levelRepo, levelRepo, notifSvc)
|
||
levelCtrl := controller.NewLevelController(levelSvc)
|
||
authMdw.WithLevelService(levelSvc)
|
||
return levelRepo, levelSvc, levelCtrl
|
||
}
|