public async Task <ICollection <Event> > RegisterCandidateUpdate(Candidate newCandidate, int userId) { return(await Task.Run ( async() => { var oldCandidate = await Task.Run(() => candidateRepository.Read(newCandidate.Id)); var eventsList = new List <Event>(); if (!comparer.IsEqual(oldCandidate.CandidatePrimarySkill, newCandidate.CandidatePrimarySkill)) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = stringifier.GetStr(newCandidate.CandidatePrimarySkill), OldValue = stringifier.GetStr(oldCandidate.CandidatePrimarySkill), Property = "primary skill", User = userId }); } foreach (var oldSkill in oldCandidate.CandidateSecondarySkills) { var changed = true; foreach (var newSkill in newCandidate.CandidateSecondarySkills) { if (comparer.IsEqual(oldSkill, newSkill)) { changed = false; break; } } if (changed) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, OldValue = stringifier.GetStr(oldSkill), Property = "secondary skill", User = userId }); } } foreach (var newSkill in newCandidate.CandidateSecondarySkills) { var added = true; foreach (var oldSkill in oldCandidate.CandidateSecondarySkills) { if (comparer.IsEqual(oldSkill, newSkill)) { added = false; break; } } if (added) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = stringifier.GetStr(newSkill), Property = "secondary skill", User = userId }); } } if (oldCandidate.City != newCandidate.City) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.City.HasValue ? newCandidate.City.Value.ToString() : null, OldValue = oldCandidate.City.HasValue ? oldCandidate.City.Value.ToString() : null, Property = "city", User = userId }); } if (!comparer.IsEqual(oldCandidate.Contact, newCandidate.Contact)) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = stringifier.GetStr(newCandidate.Contact), OldValue = stringifier.GetStr(oldCandidate.Contact), Property = "contacts", User = userId }); } if (oldCandidate.CustomerInterviewDate != newCandidate.CustomerInterviewDate) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.CustomerInterviewDate.HasValue ? newCandidate.CustomerInterviewDate.Value.ToString() : null, OldValue = oldCandidate.CustomerInterviewDate.HasValue ? oldCandidate.CustomerInterviewDate.Value.ToString() : null, Property = "customer interview date", User = userId }); } if (oldCandidate.CustomerInterviewStatus != newCandidate.CustomerInterviewStatus) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.CustomerInterviewStatus.HasValue ? newCandidate.CustomerInterviewStatus.Value.ToString() : null, OldValue = oldCandidate.CustomerInterviewStatus.HasValue ? oldCandidate.CustomerInterviewStatus.Value.ToString() : null, Property = "customer interview status", User = userId }); } if (oldCandidate.DesiredSalary != newCandidate.DesiredSalary) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.DesiredSalary.HasValue ? newCandidate.DesiredSalary.Value.ToString() : null, OldValue = oldCandidate.DesiredSalary.HasValue ? oldCandidate.DesiredSalary.Value.ToString() : null, Property = "desired salary", User = userId }); } if (oldCandidate.EngLevel != newCandidate.EngLevel) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.EngLevel.HasValue ? newCandidate.EngLevel.Value.ToString() : null, OldValue = oldCandidate.EngLevel.HasValue ? oldCandidate.EngLevel.Value.ToString() : null, Property = "english level", User = userId }); } if (string.Compare(oldCandidate.FirstNameEng, newCandidate.FirstNameEng, StringComparison.Ordinal) != 0) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.FirstNameEng, OldValue = oldCandidate.FirstNameEng, Property = "first name english", User = userId }); } if (string.Compare(oldCandidate.FirstNameRus, newCandidate.FirstNameRus, StringComparison.Ordinal) != 0) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.FirstNameRus, OldValue = oldCandidate.FirstNameRus, Property = "first name russiasn", User = userId }); } if (string.Compare(oldCandidate.LastNameEng, newCandidate.LastNameEng, StringComparison.Ordinal) != 0) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.LastNameEng, OldValue = oldCandidate.LastNameEng, Property = "last name english", User = userId }); } if (string.Compare(oldCandidate.LastNameRus, newCandidate.LastNameRus, StringComparison.Ordinal) != 0) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.LastNameRus, OldValue = oldCandidate.LastNameRus, Property = "last name russsian", User = userId }); } if (string.Compare(oldCandidate.Picture, newCandidate.Picture, StringComparison.Ordinal) != 0) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.Picture, OldValue = oldCandidate.Picture, Property = "picture", User = userId }); } if (oldCandidate.PSExperience != newCandidate.PSExperience) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.PSExperience.HasValue ? newCandidate.PSExperience.Value.ToString() : null, OldValue = oldCandidate.PSExperience.HasValue ? oldCandidate.PSExperience.Value.ToString() : null, Property = "primary skill experience", User = userId }); } if (string.Compare(oldCandidate.Resume, newCandidate.Resume, StringComparison.Ordinal) != 0) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.Resume, OldValue = oldCandidate.Resume, Property = "resume", User = userId }); } if (oldCandidate.Status != newCandidate.Status) { eventsList.Add(new Event { Candidate = oldCandidate.Id, Date = DateTime.UtcNow, Event1 = EventIds.Candidate, EventType = EventTypes.Edit, NewValue = newCandidate.Status.ToString(), OldValue = oldCandidate.Status.ToString(), Property = "status", User = userId }); } var result = await Task.Run(() => eventRepository.AddRange(eventsList)); return result.ToList(); } )); }