Tighten Gmail and export hot paths
This commit is contained in:
@@ -75,22 +75,22 @@ namespace JobTrackerApi.Services
|
||||
|
||||
using var scope = _sp.CreateScope();
|
||||
var db = scope.ServiceProvider.GetRequiredService<JobTrackerContext>();
|
||||
|
||||
var companies = await db.Companies.AsNoTracking().OrderBy(c => c.Name).ToListAsync(ct);
|
||||
var jobs = await db.JobApplications.AsNoTracking().OrderByDescending(j => j.DateApplied).ToListAsync(ct);
|
||||
var correspondence = await db.Correspondences.AsNoTracking().OrderBy(c => c.Date).ToListAsync(ct);
|
||||
var attachments = await db.Attachments.AsNoTracking().OrderBy(a => a.UploadDate).ToListAsync(ct);
|
||||
var events = await db.JobEvents.AsNoTracking().OrderBy(e => e.At).ToListAsync(ct);
|
||||
var rules = await db.RuleSettings.AsNoTracking().FirstOrDefaultAsync(ct);
|
||||
|
||||
// If multi-user ownership is present, write one export per owner.
|
||||
var owners = jobs
|
||||
.Select(j => j.OwnerUserId)
|
||||
var owners = await db.JobApplications
|
||||
.AsNoTracking()
|
||||
.OrderByDescending(job => job.DateApplied)
|
||||
.Select(job => job.OwnerUserId)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
.ToListAsync(ct);
|
||||
|
||||
if (owners.Count <= 1)
|
||||
{
|
||||
var companies = await db.Companies.AsNoTracking().OrderBy(c => c.Name).ToListAsync(ct);
|
||||
var jobs = await db.JobApplications.AsNoTracking().OrderByDescending(j => j.DateApplied).ToListAsync(ct);
|
||||
var correspondence = await db.Correspondences.AsNoTracking().OrderBy(c => c.Date).ToListAsync(ct);
|
||||
var attachments = await db.Attachments.AsNoTracking().OrderBy(a => a.UploadDate).ToListAsync(ct);
|
||||
var events = await db.JobEvents.AsNoTracking().OrderBy(e => e.At).ToListAsync(ct);
|
||||
|
||||
var export = new
|
||||
{
|
||||
Version = "dailyexport.v1",
|
||||
@@ -114,19 +114,23 @@ namespace JobTrackerApi.Services
|
||||
foreach (var owner in owners)
|
||||
{
|
||||
var ownerKey = string.IsNullOrWhiteSpace(owner) ? "_unassigned" : owner;
|
||||
var ownerJobs = jobs.Where(j => j.OwnerUserId == owner).ToList();
|
||||
var ownerJobIds = ownerJobs.Select(j => j.Id).ToHashSet();
|
||||
var ownerJobs = await db.JobApplications
|
||||
.AsNoTracking()
|
||||
.Where(job => job.OwnerUserId == owner)
|
||||
.OrderByDescending(job => job.DateApplied)
|
||||
.ToListAsync(ct);
|
||||
var ownerJobIds = ownerJobs.Select(job => job.Id).ToList();
|
||||
|
||||
var export = new
|
||||
{
|
||||
Version = "dailyexport.v2",
|
||||
CreatedAt = DateTime.Now,
|
||||
OwnerUserId = owner,
|
||||
Companies = companies.Where(c => c.OwnerUserId == owner).ToList(),
|
||||
Companies = await db.Companies.AsNoTracking().Where(company => company.OwnerUserId == owner).OrderBy(company => company.Name).ToListAsync(ct),
|
||||
JobApplications = ownerJobs,
|
||||
Correspondence = correspondence.Where(c => ownerJobIds.Contains(c.JobApplicationId)).ToList(),
|
||||
Attachments = attachments.Where(a => ownerJobIds.Contains(a.JobApplicationId)).ToList(),
|
||||
Events = events.Where(e => ownerJobIds.Contains(e.JobApplicationId)).ToList(),
|
||||
Correspondence = await db.Correspondences.AsNoTracking().Where(message => ownerJobIds.Contains(message.JobApplicationId)).OrderBy(message => message.Date).ToListAsync(ct),
|
||||
Attachments = await db.Attachments.AsNoTracking().Where(attachment => ownerJobIds.Contains(attachment.JobApplicationId)).OrderBy(attachment => attachment.UploadDate).ToListAsync(ct),
|
||||
Events = await db.JobEvents.AsNoTracking().Where(jobEvent => ownerJobIds.Contains(jobEvent.JobApplicationId)).OrderBy(jobEvent => jobEvent.At).ToListAsync(ct),
|
||||
Rules = rules
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user