send notification to mention user
This commit is contained in:
parent
e4946d6e05
commit
cf6708899d
@ -510,7 +510,6 @@ func (s *LetterServiceImpl) CreateDiscussion(ctx context.Context, letterID uuid.
|
|||||||
|
|
||||||
// Log activity for discussion creation
|
// Log activity for discussion creation
|
||||||
if s.activityLogger != nil && result != nil {
|
if s.activityLogger != nil && result != nil {
|
||||||
// Create a simple activity log
|
|
||||||
if err := s.activityLogger.LogLetterDispositionStatusUpdate(txCtx, letterID, userID, "discussion_created"); err != nil {
|
if err := s.activityLogger.LogLetterDispositionStatusUpdate(txCtx, letterID, userID, "discussion_created"); err != nil {
|
||||||
// Don't fail the transaction for logging errors
|
// Don't fail the transaction for logging errors
|
||||||
}
|
}
|
||||||
@ -523,6 +522,11 @@ func (s *LetterServiceImpl) CreateDiscussion(ctx context.Context, letterID uuid.
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Send notifications to mentioned users asynchronously
|
||||||
|
if s.notificationProcessor != nil && req.Mentions != nil {
|
||||||
|
go s.sendDiscussionMentionNotifications(context.Background(), letterID, userID, req.Mentions, req.Message)
|
||||||
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -590,3 +594,68 @@ func (s *LetterServiceImpl) BulkArchiveIncomingLetters(ctx context.Context, lett
|
|||||||
ArchivedCount: int(archivedCount),
|
ArchivedCount: int(archivedCount),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *LetterServiceImpl) sendDiscussionMentionNotifications(ctx context.Context, letterID uuid.UUID, senderUserID uuid.UUID, mentions map[string]interface{}, message string) {
|
||||||
|
// Extract user_ids from mentions
|
||||||
|
userIDs := s.extractUserIDsFromMentions(mentions)
|
||||||
|
if len(userIDs) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get letter details for notification
|
||||||
|
letter, err := s.processor.GetIncomingLetterByID(ctx, letterID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get sender user name (you might need to implement this)
|
||||||
|
appContext := appcontext.FromGinContext(ctx)
|
||||||
|
senderName := appContext.UserName // or get from user service
|
||||||
|
|
||||||
|
// Send notification to each mentioned user
|
||||||
|
for _, mentionedUserID := range userIDs {
|
||||||
|
// Don't send notification to the sender themselves
|
||||||
|
if mentionedUserID == senderUserID {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
subject := "Anda Disebutkan dalam Diskusi"
|
||||||
|
notificationMessage := fmt.Sprintf("%s menyebutkan Anda dalam diskusi surat: %s", senderName, letter.Subject)
|
||||||
|
|
||||||
|
err := s.notificationProcessor.SendIncomingLetterNotification(
|
||||||
|
ctx,
|
||||||
|
letterID,
|
||||||
|
mentionedUserID,
|
||||||
|
subject,
|
||||||
|
notificationMessage)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
// Log error but continue with other notifications
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *LetterServiceImpl) extractUserIDsFromMentions(mentions map[string]interface{}) []uuid.UUID {
|
||||||
|
userIDs := make([]uuid.UUID, 0)
|
||||||
|
|
||||||
|
if userIDsInterface, exists := mentions["user_ids"]; exists {
|
||||||
|
switch userIDsValue := userIDsInterface.(type) {
|
||||||
|
case []interface{}:
|
||||||
|
for _, userIDInterface := range userIDsValue {
|
||||||
|
if userIDStr, ok := userIDInterface.(string); ok {
|
||||||
|
if userID, err := uuid.Parse(userIDStr); err == nil {
|
||||||
|
userIDs = append(userIDs, userID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case []string:
|
||||||
|
for _, userIDStr := range userIDsValue {
|
||||||
|
if userID, err := uuid.Parse(userIDStr); err == nil {
|
||||||
|
userIDs = append(userIDs, userID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return userIDs
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user