diff --git a/Calendula.Console/Program.cs b/Calendula.Console/Program.cs index 7cc27d1..5d507a5 100644 --- a/Calendula.Console/Program.cs +++ b/Calendula.Console/Program.cs @@ -54,7 +54,8 @@ var source = new SecondaryAccToPrimaryAccProfile(secondaryUsername, secondaryAccountSubjectPrefix); var dest = new PrimaryAccToSecondaryAccProfile(primaryUsername, primaryAccountSubjectPrefix); - var service = new CalendulaService(dest, source, logger, clientId, orgConnectionString); + var calendulaLogger = host.Services.GetRequiredService>(); + var service = new CalendulaService(dest, source, calendulaLogger, clientId, orgConnectionString); var startTime = DateTime.UtcNow; var endTime = startTime.AddDays(daysToSync); await service.SyncRangeBidirectionalAsync(startTime.ToString("O"), endTime.ToString("O")); diff --git a/Calendula/CalendarSyncService.cs b/Calendula/CalendulaService.cs similarity index 86% rename from Calendula/CalendarSyncService.cs rename to Calendula/CalendulaService.cs index e170a69..d106813 100644 --- a/Calendula/CalendarSyncService.cs +++ b/Calendula/CalendulaService.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Logging; using Microsoft.Graph; +using Microsoft.Graph.Extensions; namespace Calendula { @@ -48,7 +49,13 @@ public async Task SyncRangeBidirectionalAsync(string start, string end) public async Task SyncRangeAsync(string start, string end) { - Log.LogInformation($"Syncing from {start} to {end}."); + Log.LogInformation($@"Syncing calendar + from: {SourceProfile.Username} + to: {DestinationProfile.Username} + start: {DateTime.Parse(start):g} + end: {DateTime.Parse(end):g} +"); + await InitGraphClientsAsync(); // sync changes from source to dest @@ -69,6 +76,7 @@ public async Task SyncRangeAsync(string start, string end) var eventsToDelete = events.Where(e => e.Subject.StartsWith(SourceProfile.SubjectPrefix) && !destinationIds.Contains(e.Id)); foreach (var e in eventsToDelete) { + Log.LogInformation($"Deleting event on {e.Start.ToDateTimeOffset().ToLocalTime():g}"); await Dataverse.DeleteEventAsync(e.Id); await DestinationGraph.DeleteEventAsync(e.Id); } @@ -78,7 +86,7 @@ public async Task SyncEventAsync(Event e) { if (e.Subject.StartsWith(DestinationProfile.SubjectPrefix)) { - Log.LogInformation("Skipping event that originated in destination calendar."); + Log.LogDebug("Skipping event that originated in destination calendar."); return null; } @@ -89,8 +97,12 @@ public async Task SyncEventAsync(Event e) var mappedEvent = SourceProfile.MapEvent(e); var destEvent = record.DestinationKey != null ? await DestinationGraph.GetEventByIdAsync(record.DestinationKey) : null; + + if (destEvent == null) { + Log.LogInformation($"Creating new event on {e.Start.ToDateTimeOffset().ToLocalTime():g}"); + // create in dest var destKey = await DestinationGraph.CreateEventAsync(mappedEvent); @@ -103,6 +115,8 @@ public async Task SyncEventAsync(Event e) } else { + Log.LogInformation($"Updating event on {e.Start.ToDateTimeOffset().ToLocalTime():g}"); + // get event from dest var graphEvent = await DestinationGraph.GetEventByIdAsync(record.DestinationKey); mappedEvent.Id = graphEvent.Id; diff --git a/Calendula/DataverseService.cs b/Calendula/DataverseService.cs index fe2a11b..3468948 100644 --- a/Calendula/DataverseService.cs +++ b/Calendula/DataverseService.cs @@ -20,7 +20,7 @@ public DataverseService(ILogger logger, string orgConnectionString) public async Task GetOrCreateEventAsync(Event e, string sourceName) { - Log.LogInformation($"Querying Dataverse for calendar event {e.Id}"); + Log.LogDebug($"Querying Dataverse for calendar event {e.Id}"); var query = new QueryByAttribute("pl_calendarevent"); query.AddAttributeValue("pl_sourcekey", e.Id); @@ -29,7 +29,7 @@ public async Task GetOrCreateEventAsync(Event e, string var response = await Client.RetrieveMultipleAsync(query); if (response.Entities.Any()) { - Log.LogInformation("Found a matching calendar event in Dataverse."); + Log.LogDebug("Found a matching calendar event in Dataverse."); return new DataverseEventResponse(response.Entities.First()); } else @@ -42,7 +42,7 @@ public async Task GetOrCreateEventAsync(Event e, string ["pl_end"] = e.End.ToDateTime(), }; create.Id = await Client.CreateAsync(create); - Log.LogInformation("Created a new calendar event in Dataverse."); + Log.LogDebug("Created a new calendar event in Dataverse."); return new DataverseEventResponse(create); } } @@ -53,7 +53,7 @@ await Client.UpdateAsync(new Entity("pl_calendarevent", id) { ["pl_destinationkey"] = destinationKey, }); - Log.LogInformation("Updated destination key in Dataverse."); + Log.LogDebug("Updated destination key in Dataverse."); } public async Task UpdateEventTimeAsync(Guid id, Event e, string sourceName) @@ -64,7 +64,7 @@ await Client.UpdateAsync(new Entity("pl_calendarevent", id) ["pl_start"] = e.Start.ToDateTime(), ["pl_end"] = e.End.ToDateTime() }); - Log.LogInformation("Updated event time in Dataverse."); + Log.LogDebug("Updated event time in Dataverse."); } public async Task DeleteEventAsync(string destinationId) @@ -82,7 +82,7 @@ public async Task DeleteEventAsync(string destinationId) var e = response.Entities.First(); await Client.DeleteAsync(e.LogicalName, e.Id); - Log.LogInformation("Deleted calendar event in Dataverse."); + Log.LogDebug("Deleted calendar event in Dataverse."); } } diff --git a/Calendula/GraphService.cs b/Calendula/GraphService.cs index f833a4e..4054c6b 100644 --- a/Calendula/GraphService.cs +++ b/Calendula/GraphService.cs @@ -22,7 +22,9 @@ public async Task> GetEventsInRangeAsync(string start, string var queryOptions = new[] { new QueryOption("startDateTime", start), - new QueryOption("endDateTime", end) + new QueryOption("endDateTime", end), + new QueryOption("$select", "id,subject,start,end,bodypreview,isallday,showas,importance,sensitivity"), + new QueryOption("$orderby", $"start/datetime") }; var allEvents = new List(); var calendarEvents = await Client.Me.CalendarView.Request(queryOptions).GetAsync();