From 42aacf497c644392f453dfe56aa14b2d20b57db7 Mon Sep 17 00:00:00 2001 From: Jeff Leung Date: Sat, 13 Jan 2024 17:10:18 -0800 Subject: [PATCH] Some minor housekeeping --- .../AppJsonSerializerContext.cs | 15 ++++ AS1024.GeoFeed.MinimalAPI/Program.cs | 86 +++++++++++-------- 2 files changed, 63 insertions(+), 38 deletions(-) create mode 100644 AS1024.GeoFeed.MinimalAPI/AppJsonSerializerContext.cs diff --git a/AS1024.GeoFeed.MinimalAPI/AppJsonSerializerContext.cs b/AS1024.GeoFeed.MinimalAPI/AppJsonSerializerContext.cs new file mode 100644 index 0000000..9243166 --- /dev/null +++ b/AS1024.GeoFeed.MinimalAPI/AppJsonSerializerContext.cs @@ -0,0 +1,15 @@ +using AS1024.GeoFeed.Models; +using System.Text.Json.Serialization; + +namespace AS1024.GeoFeed.MinimalAPI +{ + [JsonSerializable(typeof(NetboxData))] + [JsonSerializable(typeof(Result))] + [JsonSerializable(typeof(CustomFields))] + [JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.SnakeCaseLower)] + internal partial class AppJsonSerializerContext : JsonSerializerContext + { + + } + +} diff --git a/AS1024.GeoFeed.MinimalAPI/Program.cs b/AS1024.GeoFeed.MinimalAPI/Program.cs index a6cf784..01c98d9 100644 --- a/AS1024.GeoFeed.MinimalAPI/Program.cs +++ b/AS1024.GeoFeed.MinimalAPI/Program.cs @@ -6,8 +6,9 @@ using AS1024.GeoFeed.Models; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; using System; -using System.Text.Json.Serialization; namespace AS1024.GeoFeed.MinimalAPI { @@ -27,50 +28,59 @@ namespace AS1024.GeoFeed.MinimalAPI options.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default); }); var app = builder.Build(); - var geoFeed = app.Map("/geofeed.csv", async (IGeoFeedProvider provider, + + app.Map("/geofeed.csv", async (IGeoFeedProvider provider, ILogger logger, IGeoFeedPersistentCacheProvider cacheProvider, IMemoryCache memoryCache, IWebHostEnvironment environment) => { - try - { - if (!memoryCache.TryGetValue("Geofeed", out List? feed)) - { - feed = await provider.GetGeoFeedData(); - if (environment.IsProduction()) - { - MemoryCacheEntryOptions cacheEntryOptions = new MemoryCacheEntryOptions() - .SetSlidingExpiration(TimeSpan.FromMinutes(15)); - memoryCache.Set("Geofeed", feed, cacheEntryOptions); - } - } + return await GeoFeedDataRunner(provider, logger, cacheProvider, memoryCache, environment); + }); - return feed.ToGeoFeedCsv(); - } - catch (HttpRequestException ex) - { - logger.LogWarning($"Temporary failure of retrieving GeoData from upstream. {ex}"); - string geoFeedData = cacheProvider.GetGeoFeed(); - return geoFeedData; - } - catch (Exception ex) - { - logger.LogError($"Error: {ex}"); - } + app.Map("/geofeed", async (IGeoFeedProvider provider, + ILogger logger, + IGeoFeedPersistentCacheProvider cacheProvider, + IMemoryCache memoryCache, + IWebHostEnvironment environment) => { + return await GeoFeedDataRunner(provider, logger, cacheProvider, memoryCache, environment); + }); - return ""; - }); app.Run(); } + + protected static async Task GeoFeedDataRunner(IGeoFeedProvider provider, + ILogger logger, + IGeoFeedPersistentCacheProvider cacheProvider, + IMemoryCache memoryCache, + IWebHostEnvironment environment) + { + try + { + if (!memoryCache.TryGetValue("Geofeed", out List? feed)) + { + feed = await provider.GetGeoFeedData(); + if (environment.IsProduction()) + { + MemoryCacheEntryOptions cacheEntryOptions = new MemoryCacheEntryOptions() + .SetSlidingExpiration(TimeSpan.FromMinutes(15)); + memoryCache.Set("Geofeed", feed, cacheEntryOptions); + } + } + + return feed.ToGeoFeedCsv(); + } + catch (HttpRequestException ex) + { + logger.LogWarning($"Temporary failure of retrieving GeoData from upstream. {ex}"); + string geoFeedData = cacheProvider.GetGeoFeed(); + return geoFeedData; + } + catch (Exception ex) + { + logger.LogError($"Error: {ex}"); + } + + return ""; + } } - - [JsonSerializable(typeof(NetboxData))] - [JsonSerializable(typeof(Result))] - [JsonSerializable(typeof(CustomFields))] - [JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.SnakeCaseLower)] - internal partial class AppJsonSerializerContext : JsonSerializerContext - { - - } - }