public async Task CreateInvitationAsync(TestingPersonnelInvitationSpecDto specDto) { if (specDto == null) { throw new ArgumentNullException(nameof(specDto)); } var alreadySentInvitationForDate = await AnyAsync(x => x.InvitationForDate.Date == specDto.Date.Date) .ConfigureAwait(false); if (alreadySentInvitationForDate) { ValidationDictionary .AddModelError("Invitation for the date has already been sent", $"{specDto.Date.ToString(dateFormat, CultureInfo.InvariantCulture)}"); return; } var invitationDto = await AddAsync(specDto) .ConfigureAwait(false); var invitationReceivers = await _testingPersonnelsRepository .GetTestingPersonnelInvitationReceiversByWorkingAreaAsync(WorkingArea.Pooling, specDto.Date.DayOfWeek) .ConfigureAwait(false); foreach (var receiver in invitationReceivers) { var invitationConfirmationToken = await _invitationConfirmationTokensRepository .AddTestingPersonnelInvitationConfirmationTokenAsync(receiver.TestingPersonnelId, invitationDto.Id) .ConfigureAwait(false); await _mailSender.SendInvitationForPoolingAssignmentAsync(receiver.Email, invitationConfirmationToken, invitationDto.InvitationForDate) .ConfigureAwait(false); } }