From cc63cc5fefa5cd90446d09df673d9d4af756da06 Mon Sep 17 00:00:00 2001 From: Yuval Ziv <44985263+yuval-ziv@users.noreply.github.com> Date: Mon, 22 Jul 2024 00:46:32 +0300 Subject: [PATCH] added test api for recently added items --- Announcarr/Program.cs | 4 ++++ Announcarr/Services/CalendarService.cs | 29 +++++++++++++++++++++++++ Announcarr/Services/ICalendarService.cs | 1 + 3 files changed, 34 insertions(+) diff --git a/Announcarr/Program.cs b/Announcarr/Program.cs index 721566e..f5e2d95 100644 --- a/Announcarr/Program.cs +++ b/Announcarr/Program.cs @@ -47,6 +47,10 @@ async (ICalendarService calendarService, [FromQuery(Name = "start")] DateTimeOffset? start, [FromQuery(Name = "end")] DateTimeOffset? end) => Results.Ok((object?)await calendarService.GetAllCalendarItemsAsync(start, end))); +app.MapGet("/recentlyAdded", + async (ICalendarService calendarService, [FromQuery(Name = "start")] DateTimeOffset? start, [FromQuery(Name = "end")] DateTimeOffset? end) => + Results.Ok((object?)await calendarService.GetAllRecentlyAddedItemsAsync(start, end))); + app.MapGet("/testExporters", async (IEnumerable exporterServices) => await Task.WhenAll(exporterServices.Select(exporterService => exporterService.TestExporterAsync()))); app.Run(); \ No newline at end of file diff --git a/Announcarr/Services/CalendarService.cs b/Announcarr/Services/CalendarService.cs index 4383dbf..76c06fe 100644 --- a/Announcarr/Services/CalendarService.cs +++ b/Announcarr/Services/CalendarService.cs @@ -31,6 +31,21 @@ public async Task GetAllCalendarItemsAsync(DateTimeOffset? sta return calendarResponse; } + public async Task GetAllRecentlyAddedItemsAsync(DateTimeOffset? start, DateTimeOffset? end, CancellationToken cancellationToken = default) + { + start ??= DateTimeOffset.Now.AddDays(-7); + end ??= start.Value.AddDays(7); + + RecentlyAddedResponse[] recentlyAddedResponses = await Task.WhenAll(_integrationServices.Where(integration => integration.IsEnabled()) + .Select(async serviceIntegration => await GetRecentlyAddedItemsAsync(serviceIntegration, start.Value, end.Value, cancellationToken))); + RecentlyAddedResponse recentlyAddedResponse = recentlyAddedResponses.Length != 0 ? recentlyAddedResponses.Aggregate(RecentlyAddedResponse.Merge) : new RecentlyAddedResponse(); + + await Task.WhenAll(_exporterServices.Where(exporter => exporter.IsEnabled()) + .Select(exporter => exporter.ExportRecentlyAddedAsync(recentlyAddedResponse, start.Value, end.Value, cancellationToken))); + + return recentlyAddedResponse; + } + private async Task GetCalendarResponseAsync(IIntegrationService integrationService, DateTimeOffset start, DateTimeOffset end, CancellationToken cancellationToken = default) { try @@ -43,4 +58,18 @@ private async Task GetCalendarResponseAsync(IIntegrationServic return new CalendarResponse(); } } + + private async Task GetRecentlyAddedItemsAsync(IIntegrationService integrationService, DateTimeOffset start, DateTimeOffset end, + CancellationToken cancellationToken = default) + { + try + { + return await integrationService.GetRecentlyAddedAsync(start, end, cancellationToken); + } + catch (Exception e) + { + _logger.LogError(e, "Unable to get recently added items from {IntegrationServiceName}", integrationService.GetName()); + return new RecentlyAddedResponse(); + } + } } \ No newline at end of file diff --git a/Announcarr/Services/ICalendarService.cs b/Announcarr/Services/ICalendarService.cs index 6b15e1e..74f4536 100644 --- a/Announcarr/Services/ICalendarService.cs +++ b/Announcarr/Services/ICalendarService.cs @@ -5,4 +5,5 @@ namespace Announcarr.Services; public interface ICalendarService { Task GetAllCalendarItemsAsync(DateTimeOffset? start, DateTimeOffset? end, CancellationToken cancellationToken = default); + Task GetAllRecentlyAddedItemsAsync(DateTimeOffset? start, DateTimeOffset? end, CancellationToken cancellationToken = default); } \ No newline at end of file