refactor: introduce Wire dependency injection and interface-based architecture
- Add Google Wire for compile-time dependency injection - Replace concrete service types with interfaces across handlers - Remove global state (DB, cache) in favor of constructor injection - Split monolithic files into focused modules: - config: separate files for each config domain - dto: converters split by domain (user, post, message, group) - cache: separate metrics.go and redis_cache.go - Introduce unified apperrors package with string-based error codes - Add transaction support with context-aware repository methods - Upgrade golang.org/x/crypto from 0.17.0 to 0.26.0
This commit is contained in:
74
internal/wire/handler.go
Normal file
74
internal/wire/handler.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package wire
|
||||
|
||||
import (
|
||||
"carrot_bbs/internal/cache"
|
||||
"carrot_bbs/internal/config"
|
||||
"carrot_bbs/internal/handler"
|
||||
"carrot_bbs/internal/pkg/sse"
|
||||
"carrot_bbs/internal/repository"
|
||||
"carrot_bbs/internal/service"
|
||||
|
||||
"github.com/google/wire"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// HandlerSet Handler 层 Provider Set
|
||||
var HandlerSet = wire.NewSet(
|
||||
// 直接使用构造函数的 Handler
|
||||
handler.NewUserHandler,
|
||||
handler.NewCommentHandler,
|
||||
handler.NewNotificationHandler,
|
||||
handler.NewUploadHandler,
|
||||
handler.NewPushHandler,
|
||||
handler.NewStickerHandler,
|
||||
handler.NewVoteHandler,
|
||||
handler.NewScheduleHandler,
|
||||
|
||||
// 需要特殊处理的 Handler
|
||||
ProvidePostHandler,
|
||||
ProvideMessageHandler,
|
||||
ProvideSystemMessageHandler,
|
||||
ProvideGroupHandler,
|
||||
ProvideGorseHandler,
|
||||
)
|
||||
|
||||
// ProvidePostHandler 提供帖子处理器
|
||||
func ProvidePostHandler(
|
||||
postService service.PostService,
|
||||
userService service.UserService,
|
||||
) *handler.PostHandler {
|
||||
return handler.NewPostHandler(postService, userService)
|
||||
}
|
||||
|
||||
// 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)
|
||||
}
|
||||
|
||||
// ProvideGorseHandler 提供 Gorse 处理器
|
||||
func ProvideGorseHandler(cfg *config.Config, db *gorm.DB) *handler.GorseHandler {
|
||||
return handler.NewGorseHandler(cfg.Gorse, db)
|
||||
}
|
||||
Reference in New Issue
Block a user