feat(companies): add recruiter relationship history

This commit is contained in:
cesnimda
2026-08-31 17:25:31 +02:00
parent 7d5a78ad5d
commit f3569d05a9
6 changed files with 201 additions and 1 deletions
@@ -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,