feat(companies): add recruiter relationship history
This commit is contained in:
@@ -76,6 +76,31 @@ namespace JobTrackerApi.Controllers
|
||||
return Ok(company);
|
||||
}
|
||||
|
||||
public sealed record CompanyApplicationRelationshipDto(int Id, string JobTitle, string Status, DateTime? DateApplied, DateTime? FollowUpAt, int MessageCount, DateTime? LastContactAt);
|
||||
public sealed record CompanyContactDto(int Id, int JobApplicationId, string JobTitle, DateTime Date, string? Direction, string? Channel, string? Subject, string From);
|
||||
public sealed record CompanyRelationshipDto(Company Company, IReadOnlyList<CompanyApplicationRelationshipDto> Applications, IReadOnlyList<CompanyContactDto> RecentContacts);
|
||||
|
||||
[HttpGet("{id:int}/relationship")]
|
||||
public async Task<ActionResult<CompanyRelationshipDto>> GetRelationship([FromRoute] int id, CancellationToken cancellationToken)
|
||||
{
|
||||
var userId = CurrentUserId;
|
||||
if (string.IsNullOrWhiteSpace(userId)) return Unauthorized();
|
||||
var company = await _db.Companies.AsNoTracking().FirstOrDefaultAsync(c => c.Id == id && c.OwnerUserId == userId, cancellationToken);
|
||||
if (company is null) return NotFound();
|
||||
|
||||
var applications = await _db.JobApplications.AsNoTracking().Include(a => a.Messages)
|
||||
.Where(a => a.OwnerUserId == userId && a.CompanyId == id && !a.IsDeleted)
|
||||
.OrderByDescending(a => a.DateApplied ?? a.SavedAt)
|
||||
.ToListAsync(cancellationToken);
|
||||
var applicationRows = applications.Select(a => new CompanyApplicationRelationshipDto(
|
||||
a.Id, a.JobTitle, a.Status, a.DateApplied, a.FollowUpAt, a.Messages.Count,
|
||||
a.Messages.Count == 0 ? null : a.Messages.Max(m => (DateTime?)m.Date))).ToList();
|
||||
var contacts = applications.SelectMany(a => a.Messages.Select(m => new CompanyContactDto(
|
||||
m.Id, a.Id, a.JobTitle, m.Date, m.Direction, m.Channel, m.Subject, m.From)))
|
||||
.OrderByDescending(m => m.Date).Take(20).ToList();
|
||||
return Ok(new CompanyRelationshipDto(company, applicationRows, contacts));
|
||||
}
|
||||
|
||||
public sealed record CreateCompanyRequest(string Name, string? Location, string? Source);
|
||||
public sealed record UpdateCompanyRequest(
|
||||
string Name,
|
||||
|
||||
Reference in New Issue
Block a user