Refactor Notification Sending Logic to Include Channel Checks
- Updated the Send method in the notification service to check for specified delivery channels (Push and Email) before sending notifications, enhancing the flexibility of the notification system. - Utilized the slices package to streamline the channel checking process, improving code readability and maintainability. - Ensured that notifications are only sent to recipients based on the selected channels, promoting more efficient notification delivery.
This commit is contained in:
@@ -3,6 +3,7 @@ package notification
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"slices"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -60,6 +61,7 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
|
||||
return err
|
||||
}
|
||||
for _, recipient := range recipients {
|
||||
if slices.Contains(req.Channels, DeliveryChannelPush) {
|
||||
for _, v := range recipient.DeviceTokens {
|
||||
s.sdk.SendNotification(ctx, ¬ification.NotificationRequest{
|
||||
UserID: recipient.UserID,
|
||||
@@ -78,7 +80,9 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
|
||||
ScheduledAt: req.ScheduleAt,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if slices.Contains(req.Channels, DeliveryChannelEmail) {
|
||||
if recipient.Email != "" {
|
||||
s.sdk.SendNotification(ctx, ¬ification.NotificationRequest{
|
||||
UserID: recipient.UserID,
|
||||
@@ -97,12 +101,14 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
recipients, err := s.getCustomers(ctx, req.Recipient, string(req.Target))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, recipient := range recipients {
|
||||
if slices.Contains(req.Channels, DeliveryChannelPush) {
|
||||
for _, v := range recipient.DeviceTokens {
|
||||
s.sdk.SendNotification(ctx, ¬ification.NotificationRequest{
|
||||
UserID: recipient.UserID,
|
||||
@@ -120,7 +126,9 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if slices.Contains(req.Channels, DeliveryChannelEmail) {
|
||||
if recipient.Email != "" {
|
||||
s.sdk.SendNotification(ctx, ¬ification.NotificationRequest{
|
||||
UserID: recipient.UserID,
|
||||
@@ -139,6 +147,7 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
s.logger.Info("Notification sent", map[string]interface{}{
|
||||
"recipient": req.Recipient,
|
||||
"channels": req.Channels,
|
||||
|
||||
Reference in New Issue
Block a user