feat: Enhance dependency injection and service integration

- Updated main.go to initialize email service and include it in the dependency injection container.
- Refactored handlers to utilize context in service method calls, improving consistency and error handling.
- Introduced new service options for upload, security, and captcha services, enhancing modularity and testability.
- Removed unused repository implementations to streamline the codebase.

This commit continues the effort to improve the architecture by ensuring all services are properly injected and utilized across the application.
This commit is contained in:
lan
2025-12-02 22:52:33 +08:00
parent 792e96b238
commit 034e02e93a
54 changed files with 2305 additions and 2708 deletions

View File

@@ -30,7 +30,7 @@ func (h *UserHandler) GetProfile(c *gin.Context) {
return
}
user, err := h.container.UserService.GetByID(userID)
user, err := h.container.UserService.GetByID(c.Request.Context(), userID)
if err != nil || user == nil {
h.logger.Error("获取用户信息失败",
zap.Int64("user_id", userID),
@@ -56,7 +56,7 @@ func (h *UserHandler) UpdateProfile(c *gin.Context) {
return
}
user, err := h.container.UserService.GetByID(userID)
user, err := h.container.UserService.GetByID(c.Request.Context(), userID)
if err != nil || user == nil {
RespondNotFound(c, "用户不存在")
return
@@ -69,7 +69,7 @@ func (h *UserHandler) UpdateProfile(c *gin.Context) {
return
}
if err := h.container.UserService.ChangePassword(userID, req.OldPassword, req.NewPassword); err != nil {
if err := h.container.UserService.ChangePassword(c.Request.Context(), userID, req.OldPassword, req.NewPassword); err != nil {
h.logger.Error("修改密码失败", zap.Int64("user_id", userID), zap.Error(err))
RespondBadRequest(c, err.Error(), nil)
return
@@ -80,12 +80,12 @@ func (h *UserHandler) UpdateProfile(c *gin.Context) {
// 更新头像
if req.Avatar != "" {
if err := h.container.UserService.ValidateAvatarURL(req.Avatar); err != nil {
if err := h.container.UserService.ValidateAvatarURL(c.Request.Context(), req.Avatar); err != nil {
RespondBadRequest(c, err.Error(), nil)
return
}
user.Avatar = req.Avatar
if err := h.container.UserService.UpdateInfo(user); err != nil {
if err := h.container.UserService.UpdateInfo(c.Request.Context(), user); err != nil {
h.logger.Error("更新用户信息失败", zap.Int64("user_id", user.ID), zap.Error(err))
RespondServerError(c, "更新失败", err)
return
@@ -93,7 +93,7 @@ func (h *UserHandler) UpdateProfile(c *gin.Context) {
}
// 重新获取更新后的用户信息
updatedUser, err := h.container.UserService.GetByID(userID)
updatedUser, err := h.container.UserService.GetByID(c.Request.Context(), userID)
if err != nil || updatedUser == nil {
RespondNotFound(c, "用户不存在")
return
@@ -120,7 +120,7 @@ func (h *UserHandler) GenerateAvatarUploadURL(c *gin.Context) {
return
}
result, err := service.GenerateAvatarUploadURL(c.Request.Context(), h.container.Storage, userID, req.FileName)
result, err := h.container.UploadService.GenerateAvatarUploadURL(c.Request.Context(), userID, req.FileName)
if err != nil {
h.logger.Error("生成头像上传URL失败",
zap.Int64("user_id", userID),
@@ -152,12 +152,12 @@ func (h *UserHandler) UpdateAvatar(c *gin.Context) {
return
}
if err := h.container.UserService.ValidateAvatarURL(avatarURL); err != nil {
if err := h.container.UserService.ValidateAvatarURL(c.Request.Context(), avatarURL); err != nil {
RespondBadRequest(c, err.Error(), nil)
return
}
if err := h.container.UserService.UpdateAvatar(userID, avatarURL); err != nil {
if err := h.container.UserService.UpdateAvatar(c.Request.Context(), userID, avatarURL); err != nil {
h.logger.Error("更新头像失败",
zap.Int64("user_id", userID),
zap.String("avatar_url", avatarURL),
@@ -167,7 +167,7 @@ func (h *UserHandler) UpdateAvatar(c *gin.Context) {
return
}
user, err := h.container.UserService.GetByID(userID)
user, err := h.container.UserService.GetByID(c.Request.Context(), userID)
if err != nil || user == nil {
RespondNotFound(c, "用户不存在")
return
@@ -189,13 +189,13 @@ func (h *UserHandler) ChangeEmail(c *gin.Context) {
return
}
if err := service.VerifyCode(c.Request.Context(), h.container.Redis, req.NewEmail, req.VerificationCode, service.VerificationTypeChangeEmail); err != nil {
if err := h.container.VerificationService.VerifyCode(c.Request.Context(), req.NewEmail, req.VerificationCode, service.VerificationTypeChangeEmail); err != nil {
h.logger.Warn("验证码验证失败", zap.String("new_email", req.NewEmail), zap.Error(err))
RespondBadRequest(c, err.Error(), nil)
return
}
if err := h.container.UserService.ChangeEmail(userID, req.NewEmail); err != nil {
if err := h.container.UserService.ChangeEmail(c.Request.Context(), userID, req.NewEmail); err != nil {
h.logger.Error("更换邮箱失败",
zap.Int64("user_id", userID),
zap.String("new_email", req.NewEmail),
@@ -205,7 +205,7 @@ func (h *UserHandler) ChangeEmail(c *gin.Context) {
return
}
user, err := h.container.UserService.GetByID(userID)
user, err := h.container.UserService.GetByID(c.Request.Context(), userID)
if err != nil || user == nil {
RespondNotFound(c, "用户不存在")
return
@@ -221,7 +221,7 @@ func (h *UserHandler) ResetYggdrasilPassword(c *gin.Context) {
return
}
newPassword, err := service.ResetYggdrasilPassword(h.container.DB, userID)
newPassword, err := h.container.YggdrasilService.ResetYggdrasilPassword(c.Request.Context(), userID)
if err != nil {
h.logger.Error("重置Yggdrasil密码失败", zap.Error(err), zap.Int64("userId", userID))
RespondServerError(c, "重置Yggdrasil密码失败", nil)