diff --git a/internal/service/comment/comment_service.go b/internal/service/comment/comment_service.go index 0caa2a14..f9e3a56f 100644 --- a/internal/service/comment/comment_service.go +++ b/internal/service/comment/comment_service.go @@ -21,6 +21,8 @@ package comment import ( "context" + "time" + "github.com/apache/incubator-answer/internal/base/constant" "github.com/apache/incubator-answer/internal/base/pager" "github.com/apache/incubator-answer/internal/base/reason" @@ -40,7 +42,6 @@ import ( "github.com/jinzhu/copier" "github.com/segmentfault/pacman/errors" "github.com/segmentfault/pacman/log" - "time" ) // CommentRepo comment repository @@ -211,7 +212,8 @@ func (cs *CommentService) addCommentNotification( resp.ReplyUserDisplayName = replyUser.DisplayName resp.ReplyUserStatus = replyUser.Status } - cs.notificationCommentReply(ctx, replyUser.ID, comment.ID, req.UserID) + cs.notificationCommentReply(ctx, replyUser.ID, comment.ID, req.UserID, + objInfo.QuestionID, objInfo.Title, comment.OriginalText) alreadyNotifiedUserID[replyUser.ID] = true return nil, nil } @@ -579,7 +581,8 @@ func (cs *CommentService) notificationAnswerComment(ctx context.Context, cs.externalNotificationQueueService.Send(ctx, externalNotificationMsg) } -func (cs *CommentService) notificationCommentReply(ctx context.Context, replyUserID, commentID, commentUserID string) { +func (cs *CommentService) notificationCommentReply(ctx context.Context, replyUserID, commentID, commentUserID, + questionID, questionTitle, commentSummary string) { msg := &schema.NotificationMsg{ ReceiverUserID: replyUserID, TriggerUserID: commentUserID, @@ -589,6 +592,35 @@ func (cs *CommentService) notificationCommentReply(ctx context.Context, replyUse msg.ObjectType = constant.CommentObjectType msg.NotificationAction = constant.NotificationReplyToYou cs.notificationQueueService.Send(ctx, msg) + + // Send external notification. + receiverUserInfo, exist, err := cs.userRepo.GetByUserID(ctx, replyUserID) + if err != nil { + log.Error(err) + return + } + if !exist { + log.Warnf("user %s not found", replyUserID) + return + } + externalNotificationMsg := &schema.ExternalNotificationMsg{ + ReceiverUserID: receiverUserInfo.ID, + ReceiverEmail: receiverUserInfo.EMail, + ReceiverLang: receiverUserInfo.Language, + } + rawData := &schema.NewCommentTemplateRawData{ + QuestionTitle: questionTitle, + QuestionID: questionID, + CommentID: commentID, + CommentSummary: commentSummary, + UnsubscribeCode: token.GenerateToken(), + } + commentUser, _, _ := cs.userCommon.GetUserBasicInfoByID(ctx, commentUserID) + if commentUser != nil { + rawData.CommentUserDisplayName = commentUser.DisplayName + } + externalNotificationMsg.NewCommentTemplateRawData = rawData + cs.externalNotificationQueueService.Send(ctx, externalNotificationMsg) } func (cs *CommentService) notificationMention(