예제 #1
0
 public async Task <ActionResult <InviteViewModel> > Post([FromBody] InvitePayload value)
 {
     try
     {
         return(Ok(await inviteService.CreateInvite(value, this.UserId)));
     }
     catch (InviteException ex)
     {
         return(BadRequest(ex.Message));
     }
 }
예제 #2
0
        public async Task <InviteViewModel> CreateInvite(InvitePayload payload, Guid userId)
        {
            try
            {
                var rsp = await Task.Run(() => repository.CreateInvite(new Invite {
                    Email = payload.Email
                }, payload.ProjectId, userId));

                return(FromInviteItem(rsp));
            }
            catch (ArgumentException ex)
            {
                throw new InviteException(ex.Message, 0);
            }
            catch (InvalidOperationException ex)
            {
                throw new InviteException(ex.Message, 1);
            }
        }
예제 #3
0
        /// <inheritdoc/>
        public async Task <ResponseData <string> > UpdateMeetingInvite(AuthenticationHeaderValue authenticationHeaderValue, InvitePayload payLoad, string notificationId, string eventId)
        {
            this.logger.TraceInformation($"Started {nameof(this.UpdateMeetingInvite)} method of {nameof(MSGraphProvider)}.");
            this.httpClient.DefaultRequestHeaders.Authorization = authenticationHeaderValue;
            var requestPayLoad           = JsonConvert.SerializeObject(payLoad, this.jsonSerializerSettings);
            HttpResponseMessage response = null;

            response = await this.httpClient.PatchAsync(
                $"{this.mSGraphSetting.BaseUrl}/{this.mSGraphSetting.GraphAPIVersion}/{this.mSGraphSetting.SendInviteUrl}/{eventId}",
                new StringContent(requestPayLoad, Encoding.UTF8, ApplicationConstants.JsonMIMEType)).ConfigureAwait(false);

            this.logger.TraceInformation($"Method {nameof(this.UpdateMeetingInvite)}: Completed Graph Update Meeting Invite Call for notificationId {notificationId}");

            var responseData = await GetResponseData(response).ConfigureAwait(false);

            if (responseData == null || (!responseData.Status && !(responseData.StatusCode == HttpStatusCode.TooManyRequests || responseData.StatusCode == HttpStatusCode.RequestTimeout)))
            {
                throw new System.Exception($"An error occurred while sending notification id: {notificationId}. Details: {responseData?.Result}");
            }

            this.logger.TraceInformation($"Finished {nameof(this.UpdateMeetingInvite)} method of {nameof(MSGraphProvider)}.");
            return(responseData);
        }
        /// <summary>
        /// create Payload for Meeting Invite to be set to Graph API.
        /// </summary>
        /// <param name="meetingNotificationEntity"> MeetingNotification Entity Object.</param>
        /// <param name="applicationName">Application Name for the Meeting Invite.</param>
        /// <returns>A <see cref="Task"/> representing the result of the asynchronous operation.</returns>
        private async Task <InvitePayload> CreateInvitePayload(MeetingNotificationItemEntity meetingNotificationEntity, string applicationName)
        {
            if (meetingNotificationEntity == null)
            {
                return(null);
            }

            var payload = new InvitePayload();

            var requiredAttendees = meetingNotificationEntity.RequiredAttendees.Split(Common.ApplicationConstants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries).Select(e => new Attendee()
            {
                EmailAddress = new EmailAddress()
                {
                    Address = e,
                },
                Type = AttendeeType.Required,
            });
            var optionalAttendees = meetingNotificationEntity.OptionalAttendees?.Split(Common.ApplicationConstants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries).Select(e => new Attendee()
            {
                EmailAddress = new EmailAddress()
                {
                    Address = e,
                },
                Type = AttendeeType.Optional,
            });

            payload.Attendees = (optionalAttendees != null ? requiredAttendees.Union(optionalAttendees) : requiredAttendees).ToList();
            payload.Body      = await this.emailManager.GetMeetingInviteBodyAsync(applicationName, meetingNotificationEntity).ConfigureAwait(false);

            payload.End = new InviteDateTime()
            {
                DateTime = meetingNotificationEntity.End.FormatDate(ApplicationConstants.GraphMeetingInviteDateTimeFormatter),
            };
            payload.Importance      = (ImportanceType)Enum.Parse(typeof(ImportanceType), meetingNotificationEntity.Priority.ToString());
            payload.IsCancelled     = meetingNotificationEntity.IsCancel;
            payload.IsOnlineMeeting = meetingNotificationEntity.IsOnlineMeeting;
            payload.IsAllDay        = meetingNotificationEntity.IsAllDayEvent;
            payload.Location        = new Location()
            {
                DisplayName = meetingNotificationEntity.Location,
            };
            payload.Organizer = new Organizer()
            {
                EmailAddress = new EmailAddress()
                {
                    Address = meetingNotificationEntity.From,
                },
            };

            if (meetingNotificationEntity.RecurrencePattern != MeetingRecurrencePattern.None)
            {
                var recurrencePattern = new RecurrencePattern()
                {
                    Type       = (RecurrencePatternType)Enum.Parse(typeof(RecurrencePatternType), meetingNotificationEntity.RecurrencePattern.ToString()),
                    Interval   = meetingNotificationEntity.Interval,
                    DaysOfWeek = meetingNotificationEntity.DaysOfWeek.GetListFromString <Contracts.Models.Graph.Invite.DayOfTheWeek>(','),
                    DayOfMonth = meetingNotificationEntity.DayofMonth,
                    Month      = meetingNotificationEntity.MonthOfYear,
                };
                var recurrenceRangeType = meetingNotificationEntity.EndDate.HasValue ? RecurrenceRangeType.EndDate : meetingNotificationEntity.Ocurrences.HasValue ? RecurrenceRangeType.Numbered : RecurrenceRangeType.NoEnd;
                var recurrenceRange     = new RecurrenceRange()
                {
                    NumberOfOccurences = meetingNotificationEntity.Ocurrences,
                    EndDate            = meetingNotificationEntity.EndDate.HasValue ? meetingNotificationEntity.EndDate?.FormatDate(ApplicationConstants.GraphMeetingInviteRecurrenceRangeDateFormatter) : null,
                    StartDate          = meetingNotificationEntity.Start.FormatDate(ApplicationConstants.GraphMeetingInviteRecurrenceRangeDateFormatter),
                    Type = recurrenceRangeType,
                };
                payload.Recurrence = new Recurrence()
                {
                    Pattern = recurrencePattern,
                    Range   = recurrenceRange,
                };
            }

            payload.ReminderMinutesBeforeStart = Convert.ToInt32(meetingNotificationEntity.ReminderMinutesBeforeStart, CultureInfo.InvariantCulture);
            payload.Start = new InviteDateTime()
            {
                DateTime = meetingNotificationEntity.Start.FormatDate(ApplicationConstants.GraphMeetingInviteDateTimeFormatter),
            };

            payload.Subject        = meetingNotificationEntity.Subject;
            payload.TransactionId  = meetingNotificationEntity.NotificationId;
            payload.HasAttachments = meetingNotificationEntity.Attachments != null && meetingNotificationEntity.Attachments.Any() ? true : false;
            payload.ICallUid       = meetingNotificationEntity.ICalUid;
            payload.ShowAs         = meetingNotificationEntity.ShowAs ?? ApplicationConstants.DefaultInviteStatus;
            return(payload);
        }