Enhance notification system with in-app delivery support
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
- Added `DeliveryChannelInApp` to support in-app notifications. - Introduced `EventTypeInApp` constant for identifying in-app notifications. - Updated `AdminNotifications` and `CustomerNotifications` handlers to set the event type to `EventTypeInApp`. - Modified the `GetByUserID` repository method to handle filtering for in-app notifications, allowing for more flexible retrieval options. - Updated the `persistNotification` method to include in-app as a delivery method. This update improves the notification system by enabling in-app notifications, enhancing user engagement and notification management capabilities.
This commit is contained in:
@@ -119,13 +119,16 @@ func (r *notificationRepository) GetByID(ctx context.Context, id string) (*Notif
|
||||
// GetByUserID retrieves notifications with optional user filters
|
||||
func (r *notificationRepository) GetByUserID(ctx context.Context, userIDs []string, search, status string, seen *bool, priority, eventType, notificationType string, pagination *response.Pagination) (*orm.PaginatedResult[Notification], error) {
|
||||
filter := bson.M{}
|
||||
andConditions := bson.A{}
|
||||
|
||||
if q := strings.TrimSpace(search); q != "" {
|
||||
pattern := regexp.QuoteMeta(q)
|
||||
filter["$or"] = bson.A{
|
||||
bson.M{"title": bson.M{"$regex": pattern, "$options": "i"}},
|
||||
bson.M{"message": bson.M{"$regex": pattern, "$options": "i"}},
|
||||
}
|
||||
andConditions = append(andConditions, bson.M{
|
||||
"$or": bson.A{
|
||||
bson.M{"title": bson.M{"$regex": pattern, "$options": "i"}},
|
||||
bson.M{"message": bson.M{"$regex": pattern, "$options": "i"}},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if len(userIDs) == 1 {
|
||||
@@ -147,13 +150,31 @@ func (r *notificationRepository) GetByUserID(ctx context.Context, userIDs []stri
|
||||
}
|
||||
|
||||
if eventType != "" {
|
||||
filter["event_type"] = eventType
|
||||
if eventType == EventTypeInApp {
|
||||
andConditions = append(andConditions, bson.M{
|
||||
"$or": bson.A{
|
||||
bson.M{"event_type": EventTypeInApp},
|
||||
bson.M{"event_type": ""},
|
||||
bson.M{"event_type": bson.M{"$exists": false}},
|
||||
},
|
||||
})
|
||||
} else {
|
||||
filter["event_type"] = eventType
|
||||
}
|
||||
}
|
||||
|
||||
if notificationType != "" {
|
||||
filter["type"] = notificationType
|
||||
}
|
||||
|
||||
if len(andConditions) == 1 {
|
||||
for key, value := range andConditions[0].(bson.M) {
|
||||
filter[key] = value
|
||||
}
|
||||
} else if len(andConditions) > 1 {
|
||||
filter["$and"] = andConditions
|
||||
}
|
||||
|
||||
mongoPagination, err := orm.BuildListPagination(
|
||||
pagination.Limit,
|
||||
pagination.Offset,
|
||||
|
||||
Reference in New Issue
Block a user