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)); } }
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); } }
/// <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); }