Пример #1
0
        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);
            }
        }