/// <summary> /// Check for all events sent and stored in DB and update if the the Start Time is change, /// Update the event in calendar and send a notification email. /// </summary> /// <returns>The created MS Graph event</returns> protected async Task <Event> UpdateEventAndSendEmail(EventModel curEvent, InfernoEventDTO infernoEvent) { var updatedEvent = infernoEvent.ToMSGraphEvent(); Event eventUpdated = null; try { GraphServiceClient graphClient = GetGraphServiceClient(_tenantID, _clientId, _clientSecret); if (graphClient == null) { return(null); } string eventId = curEvent.MSGraphEventId; //Only changes in Start and/or End Times Event eventToUpdate = new Event { Start = updatedEvent.Start, End = updatedEvent.End }; eventUpdated = await graphClient.Users[_defaultOrganizerUserId] .Events[eventId] .Request() .UpdateAsync(eventToUpdate); if (eventUpdated != null) { //Save Event in DB curEvent.StartTZ = eventUpdated.Start.DateTime; curEvent.EndTZ = eventUpdated.End.DateTime; curEvent.TimeZone = eventUpdated.Start.TimeZone; curEvent.Start = eventUpdated.Start.ToDateTime(); curEvent.End = eventUpdated.End.ToDateTime(); curEvent.ModifiedDate = DateTime.UtcNow; await _unitOfWork.EventRepository.UpdateAsync(curEvent); //string recipients = string.Join(";", eventUpdated.Attendees.Select(x => x.EmailAddress.Address).ToList()); //Create and send Email invitation using MSGraph API //await SendEmail(graphClient, _hostEnv, eventUpdated, _defaultOrganizerUserId, recipients, curEvent.OrganizerEmail); } } catch (Exception e) { _logger.LogError(e.ToString()); } return(eventUpdated); }
/// <summary> /// Create a MS Graph Event from Inferno Event in the current user's and recipient's calendar /// </summary> /// <param name="graphClient"></param> /// <param name="hostEnv"></param> /// <param name="infernoAPIKey"></param> /// <param name="eventId"></param> /// <param name="recipients"></param> /// <returns>The created MS Graph event</returns> private async Task <Event> CreateEvent( GraphServiceClient graphClient, IWebHostEnvironment hostEnv, string infernoAPIUrl, string infernoAPIKey, string defaultOrganizerUserId, string eventId, string recipients) { Event createdEvent = null; try { //TODO Check if the Event already exists in the DB for the recipients User me = await graphClient.Users[defaultOrganizerUserId].Request().GetAsync(); if (me == null) { throw new Exception("Unable to get the AzureAD User from the 'DefaultOrganizerUserId' declared in App Settings."); } // Get InfernoEvent info from Inferno WebAPI InfernoEventDTO infernoEvent = await GetInfernoEvent(infernoAPIUrl, infernoAPIKey, eventId); if (infernoEvent == null) { throw new Exception("Unable to get the Event from InfernoAPI with 'InfernoAPIKey' declared in App Settings."); } //Construct a MSGraph Event from InfernoEvent string tzName = infernoEvent.startTime.GetTimeZoneStandardName(); Event newEvent = infernoEvent.ToMSGraphEvent(); //Add default user and recipients as attendees to the MSGraph event newEvent = AddAttendees(newEvent, recipients, me); createdEvent = await graphClient.Users[defaultOrganizerUserId] .Events .Request() .Header("Prefer", $"outlook.timezone=\"{tzName}\"") .AddAsync(newEvent); } catch (Exception e) { _logger.LogError(e.ToString()); } return(createdEvent); }