package wire import ( "carrot_bbs/internal/cache" "carrot_bbs/internal/handler" "carrot_bbs/internal/pkg/sse" "carrot_bbs/internal/repository" "carrot_bbs/internal/service" "github.com/google/wire" ) // HandlerSet Handler 层 Provider Set var HandlerSet = wire.NewSet( // 直接使用构造函数的 Handler handler.NewCommentHandler, handler.NewNotificationHandler, handler.NewUploadHandler, handler.NewPushHandler, handler.NewStickerHandler, handler.NewVoteHandler, handler.NewChannelHandler, handler.NewRoleHandler, handler.NewAdminUserHandler, handler.NewAdminPostHandler, handler.NewAdminCommentHandler, handler.NewAdminGroupHandler, handler.NewAdminDashboardHandler, handler.NewAdminLogHandler, handler.NewQRCodeHandler, // 需要特殊处理的 Handler ProvideUserHandler, ProvidePostHandler, ProvideMessageHandler, ProvideSystemMessageHandler, ProvideGroupHandler, ProvideScheduleHandler, ) // ProvideUserHandler 提供用户处理器 func ProvideUserHandler( userService service.UserService, activityService service.UserActivityService, postService service.PostService, commentService *service.CommentService, logService *service.LogService, ) *handler.UserHandler { h := handler.NewUserHandler(userService, activityService) h.SetLogService(logService) // 同时设置到其他服务 if ps, ok := postService.(interface{ SetLogService(*service.LogService) }); ok { ps.SetLogService(logService) } if commentService != nil { commentService.SetLogService(logService) } return h } // ProvidePostHandler 提供帖子处理器 func ProvidePostHandler( postService service.PostService, userService service.UserService, logService *service.LogService, ) *handler.PostHandler { h := handler.NewPostHandler(postService, userService) if ps, ok := postService.(interface{ SetLogService(*service.LogService) }); ok { ps.SetLogService(logService) } return h } // ProvideAdminPostHandler 提供管理端帖子处理器 func ProvideAdminPostHandler( postService service.AdminPostService, logService *service.LogService, ) *handler.AdminPostHandler { h := handler.NewAdminPostHandler(postService) if ps, ok := postService.(interface{ SetLogService(*service.LogService) }); ok { ps.SetLogService(logService) } return h } // ProvideMessageHandler 提供消息处理器 func ProvideMessageHandler( chatService service.ChatService, messageService *service.MessageService, userService service.UserService, groupService service.GroupService, sseHub *sse.Hub, ) *handler.MessageHandler { return handler.NewMessageHandler(chatService, messageService, userService, groupService, sseHub) } // ProvideSystemMessageHandler 提供系统消息处理器 func ProvideSystemMessageHandler( systemMsgService service.SystemMessageService, systemNotificationRepo *repository.SystemNotificationRepository, cacheBackend cache.Cache, ) *handler.SystemMessageHandler { return handler.NewSystemMessageHandler(systemMsgService, systemNotificationRepo, cacheBackend) } // ProvideGroupHandler 提供群组处理器 func ProvideGroupHandler( groupService service.GroupService, userService service.UserService, ) *handler.GroupHandler { return handler.NewGroupHandler(groupService, userService) } // ProvideScheduleHandler 提供课表处理器 func ProvideScheduleHandler( scheduleService service.ScheduleService, scheduleSyncService service.ScheduleSyncService, ) *handler.ScheduleHandler { return handler.NewScheduleHandler(scheduleService, scheduleSyncService) }