feat(discovery): schedule saved-search alerts
This commit is contained in:
@@ -16,13 +16,28 @@ public sealed class BackgroundTenantRunner(
|
||||
string worker,
|
||||
Func<IServiceProvider, CancellationToken, Task> work,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
return await RunForOwnersAsync(worker, async db => await db.JobApplications.IgnoreQueryFilters().AsNoTracking()
|
||||
.Where(job => job.OwnerUserId != null).Select(job => job.OwnerUserId!).ToListAsync(cancellationToken), work, cancellationToken);
|
||||
}
|
||||
|
||||
public async Task<BackgroundWorkerRunResult> RunForSavedSearchOwnersAsync(
|
||||
string worker,
|
||||
Func<IServiceProvider, CancellationToken, Task> work,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
return await RunForOwnersAsync(worker, async db => await db.SavedJobSearches.IgnoreQueryFilters().AsNoTracking()
|
||||
.Where(search => search.IsActive).Select(search => search.OwnerUserId).ToListAsync(cancellationToken), work, cancellationToken);
|
||||
}
|
||||
|
||||
private async Task<BackgroundWorkerRunResult> RunForOwnersAsync(
|
||||
string worker,
|
||||
Func<JobTrackerContext, Task<List<string>>> findOwners,
|
||||
Func<IServiceProvider, CancellationToken, Task> work,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
await using var enumerationScope = scopes.CreateAsyncScope();
|
||||
var ownerIds = await enumerationScope.ServiceProvider.GetRequiredService<JobTrackerContext>()
|
||||
.JobApplications.IgnoreQueryFilters().AsNoTracking()
|
||||
.Where(job => job.OwnerUserId != null)
|
||||
.Select(job => job.OwnerUserId!)
|
||||
.ToListAsync(cancellationToken);
|
||||
var ownerIds = await findOwners(enumerationScope.ServiceProvider.GetRequiredService<JobTrackerContext>());
|
||||
var owners = ownerIds.Where(owner => !string.IsNullOrWhiteSpace(owner))
|
||||
.Distinct(StringComparer.Ordinal)
|
||||
.Order(StringComparer.Ordinal)
|
||||
|
||||
Reference in New Issue
Block a user