in internal/service/notification_common/notification.go [355:431]
func (ns *NotificationCommon) syncNotificationToPlugin(ctx context.Context, objInfo *schema.SimpleObjectInfo,
msg *schema.NotificationMsg) {
siteInfo, err := ns.siteInfoService.GetSiteGeneral(ctx)
if err != nil {
log.Errorf("get site general info failed: %v", err)
return
}
seoInfo, err := ns.siteInfoService.GetSiteSeo(ctx)
if err != nil {
log.Errorf("get site seo info failed: %v", err)
return
}
interfaceInfo, err := ns.siteInfoService.GetSiteInterface(ctx)
if err != nil {
log.Errorf("get site interface info failed: %v", err)
return
}
objInfo.QuestionID = uid.DeShortID(objInfo.QuestionID)
objInfo.AnswerID = uid.DeShortID(objInfo.AnswerID)
pluginNotificationMsg := plugin.NotificationMessage{
Type: plugin.NotificationType(msg.NotificationAction),
ReceiverUserID: msg.ReceiverUserID,
TriggerUserID: msg.TriggerUserID,
QuestionTitle: objInfo.Title,
}
if len(objInfo.QuestionID) > 0 {
pluginNotificationMsg.QuestionUrl =
display.QuestionURL(seoInfo.Permalink, siteInfo.SiteUrl, objInfo.QuestionID, objInfo.Title)
}
if len(objInfo.AnswerID) > 0 {
pluginNotificationMsg.AnswerUrl =
display.AnswerURL(seoInfo.Permalink, siteInfo.SiteUrl, objInfo.QuestionID, objInfo.Title, objInfo.AnswerID)
}
if len(objInfo.CommentID) > 0 {
pluginNotificationMsg.CommentUrl =
display.CommentURL(seoInfo.Permalink, siteInfo.SiteUrl, objInfo.QuestionID, objInfo.Title, objInfo.AnswerID, objInfo.CommentID)
}
if len(msg.TriggerUserID) > 0 {
triggerUser, exist, err := ns.userCommon.GetUserBasicInfoByID(ctx, msg.TriggerUserID)
if err != nil {
log.Errorf("get trigger user basic info failed: %v", err)
return
}
if exist {
pluginNotificationMsg.TriggerUserID = triggerUser.ID
pluginNotificationMsg.TriggerUserDisplayName = triggerUser.DisplayName
pluginNotificationMsg.TriggerUserUrl = display.UserURL(siteInfo.SiteUrl, triggerUser.Username)
}
}
if len(pluginNotificationMsg.ReceiverLang) == 0 && len(msg.ReceiverUserID) > 0 {
userInfo, _, _ := ns.userCommon.GetUserBasicInfoByID(ctx, msg.ReceiverUserID)
if userInfo != nil {
pluginNotificationMsg.ReceiverLang = userInfo.Language
}
// If receiver not set language, use site default language.
if len(pluginNotificationMsg.ReceiverLang) == 0 || pluginNotificationMsg.ReceiverLang == translator.DefaultLangOption {
pluginNotificationMsg.ReceiverLang = interfaceInfo.Language
}
}
_ = plugin.CallNotification(func(fn plugin.Notification) error {
userInfo, exist, err := ns.userExternalLoginRepo.GetByUserID(ctx, fn.Info().SlugName, msg.ReceiverUserID)
if err != nil {
log.Errorf("get user external login info failed: %v", err)
return nil
}
if exist {
pluginNotificationMsg.ReceiverExternalID = userInfo.ExternalID
}
fn.Notify(pluginNotificationMsg)
return nil
})
}