private async Task <Guid> CreateOutlookMeeting( CreateInvitationCommand request, IReadOnlyCollection <BuilderParticipant> meetingParticipants, Invitation invitation) { foreach (var meetingParticipant in meetingParticipants) { _logger.LogInformation($"Adding {meetingParticipant.Person.AzureUniqueId} - {meetingParticipant.Person.Mail} to invitation {invitation.Id}"); } var organizer = await _personRepository.GetByOidAsync(_currentUserProvider.GetCurrentUserOid()); var meeting = await _meetingClient.CreateMeetingAsync(meetingBuilder => { var baseUrl = InvitationHelper.GetBaseUrl(_meetingOptions.CurrentValue.PcsBaseUrl, _plantProvider.Plant); meetingBuilder .StandaloneMeeting(InvitationHelper.GenerateMeetingTitle(invitation), request.Location) .StartsOn(request.StartTime, request.EndTime) .WithTimeZone("UTC") .WithParticipants(meetingParticipants) .WithClassification(MeetingClassification.Open) .EnableOutlookIntegration() .WithInviteBodyHtml(InvitationHelper.GenerateMeetingDescription(invitation, baseUrl, organizer)); }); return(meeting.Id); }
public async Task <Result <int> > Handle(CreateInvitationCommand request, CancellationToken cancellationToken) { var transaction = await _unitOfWork.BeginTransaction(cancellationToken); var meetingParticipants = new List <BuilderParticipant>(); var mcPkgs = new List <McPkg>(); var commPkgs = new List <CommPkg>(); if (request.CommPkgScope.Count > 0) { commPkgs = await GetCommPkgsToAddAsync(request.CommPkgScope, request.ProjectName); } if (request.McPkgScope.Count > 0) { mcPkgs = await GetMcPkgsToAddAsync(request.McPkgScope, request.ProjectName); } var invitation = new Invitation( _plantProvider.Plant, request.ProjectName, request.Title, request.Description, request.Type, request.StartTime, request.EndTime, request.Location, mcPkgs, commPkgs); _invitationRepository.Add(invitation); meetingParticipants = await AddParticipantsAsync(invitation, meetingParticipants, request.Participants.ToList()); await _unitOfWork.SaveChangesAsync(cancellationToken); try { invitation.MeetingId = await CreateOutlookMeeting(request, meetingParticipants, invitation); await _unitOfWork.SaveChangesAsync(cancellationToken); _unitOfWork.Commit(); return(new SuccessResult <int>(invitation.Id)); } catch (Exception e) { await transaction.RollbackAsync(cancellationToken); throw new Exception($"Error: User with oid {_currentUserProvider.GetCurrentUserOid()} could not create outlook meeting for invitation {invitation.Id}.", e); } }