Skip to content

Commit

Permalink
refactor: filter for distinct handles in PushService instead of in th…
Browse files Browse the repository at this point in the history
…e repository
  • Loading branch information
tnotheis committed Jan 28, 2025
1 parent e04ee3d commit 2e69771
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public interface IPnsRegistrationsRepository
Task Add(PnsRegistration registration, CancellationToken cancellationToken);
Task Update(PnsRegistration registration, CancellationToken cancellationToken);
Task<PnsRegistration?> FindByDeviceId(DeviceId deviceId, CancellationToken cancellationToken, bool track = false);
Task<List<PnsRegistration>> FindDistinctByDeviceIds(DeviceId[] deviceIds, CancellationToken cancellationToken, bool track = false);
Task<PnsRegistration[]> FindByDeviceIds(DeviceId[] deviceIds, CancellationToken cancellationToken, bool track = false);
Task<int> Delete(List<DeviceId> deviceIds, CancellationToken cancellationToken);
Task Delete(Expression<Func<PnsRegistration, bool>> filter, CancellationToken cancellationToken);
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,11 @@ public async Task Add(PnsRegistration registration, CancellationToken cancellati
.FirstOrDefaultAsync(registration => registration.DeviceId == deviceId, cancellationToken);
}

public async Task<List<PnsRegistration>> FindDistinctByDeviceIds(DeviceId[] deviceIds, CancellationToken cancellationToken, bool track = false)
public async Task<PnsRegistration[]> FindByDeviceIds(DeviceId[] deviceIds, CancellationToken cancellationToken, bool track = false)
{
return await (track ? _registrations : _readonlyRegistrations)
.Where(r => deviceIds.Contains(r.DeviceId))
.GroupBy(r => r.Handle)
.Select(g => g.First())
.ToListAsync(cancellationToken);
.ToArrayAsync(cancellationToken);
}

public async Task<int> Delete(List<DeviceId> deviceIds, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,11 @@ private async Task SendNotificationInternal(IPushNotification notification, Devi
{
var deviceIds = devices.Select(d => d.Id).ToArray();

var registrations = await _pnsRegistrationsRepository.FindDistinctByDeviceIds(deviceIds, cancellationToken);
var registrations = await _pnsRegistrationsRepository.FindByDeviceIds(deviceIds, cancellationToken);

var groups = registrations.GroupBy(registration => registration.Handle.Platform);
var groups = registrations
.DistinctBy(r => r.Handle) // Since there can be multiple registrations with the same handle, we should make sure we send the same push notification only once per handle
.GroupBy(r => r.Handle.Platform);

foreach (var group in groups)
{
Expand Down

0 comments on commit 2e69771

Please sign in to comment.