public async Task <ActionResult> CreateInvitationsAsync([FromBody] TestingPersonnelInvitationSpecDto specDto) { if (specDto == null) { return(BadRequest()); } var loggedUserId = HttpContext.User.Claims.First(x => x.Type == JwtRegisteredClaimNames.Jti).Value; specDto.SentByUserId = Guid.Parse(loggedUserId); await _testingPersonnelInvitationsService .CreateInvitationAsync(specDto) .ConfigureAwait(false); if (!_testingPersonnelInvitationsService.ValidationDictionary.IsValid()) { return(BadRequest(new { errors = _testingPersonnelInvitationsService.ValidationDictionary.GetErrorMessages() })); } return(Ok()); }
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); } }