From 3035ec7e9ce785585c91fc9b1f1ec24c46cfb165 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Thu, 8 May 2025 11:30:46 +0200 Subject: [PATCH] Add memory caching support in HistoryController - Updated `EnvelopeGenerator.Extensions.csproj` to include `Microsoft.Extensions.Caching.Memory` package. - Refactored `HistoryController` to use `IMemoryCache` for caching functionality. - Replaced manual dictionary creation in `GetReferenceTypes` with a call to `GetEnumAsDictionary()`. - Changed enum type in `GetEnvelopeStatus` to `ReferenceType` for consistency. - Introduced `MemoryCacheExtensions` class with `GetEnumAsDictionary` method for efficient enum to dictionary conversion. --- .../EnvelopeGenerator.Extensions.csproj | 1 + .../MemoryCacheExtensions.cs | 21 +++++++++++++++ .../Controllers/HistoryController.cs | 26 +++++++------------ 3 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 EnvelopeGenerator.Extensions/MemoryCacheExtensions.cs diff --git a/EnvelopeGenerator.Extensions/EnvelopeGenerator.Extensions.csproj b/EnvelopeGenerator.Extensions/EnvelopeGenerator.Extensions.csproj index cb187fa2..dbaad97c 100644 --- a/EnvelopeGenerator.Extensions/EnvelopeGenerator.Extensions.csproj +++ b/EnvelopeGenerator.Extensions/EnvelopeGenerator.Extensions.csproj @@ -13,6 +13,7 @@ + diff --git a/EnvelopeGenerator.Extensions/MemoryCacheExtensions.cs b/EnvelopeGenerator.Extensions/MemoryCacheExtensions.cs new file mode 100644 index 00000000..21b60956 --- /dev/null +++ b/EnvelopeGenerator.Extensions/MemoryCacheExtensions.cs @@ -0,0 +1,21 @@ +using Microsoft.Extensions.Caching.Memory; + +namespace EnvelopeGenerator.Extensions; + +public static class MemoryCacheExtensions +{ + public static IDictionary GetEnumAsDictionary(this IMemoryCache memoryCache) + where TEnum : Enum + { + var referenceTypes = Enum.GetValues(typeof(TEnum)) + .Cast() + .ToDictionary(rt => + { + var key = rt.ToString(); + var keyAsCamelCase = char.ToLowerInvariant(key[0]) + key[1..]; + return keyAsCamelCase; + }, rt => Convert.ToInt32(rt)); + + return referenceTypes; + } +} diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs index 8c934f3e..236ffee5 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs @@ -1,8 +1,9 @@ -using DigitalData.EmailProfilerDispatcher.Abstraction.Entities; -using EnvelopeGenerator.Application.Contracts.Services; +using EnvelopeGenerator.Application.Contracts.Services; using EnvelopeGenerator.Application.Histories.Queries.Read; +using EnvelopeGenerator.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Caching.Memory; using static EnvelopeGenerator.Common.Constants; @@ -20,15 +21,18 @@ public class HistoryController : ControllerBase private readonly IEnvelopeHistoryService _service; + private readonly IMemoryCache _memoryCache; + /// /// Konstruktor für den HistoryController. /// /// Der Logger, der für das Protokollieren von Informationen verwendet wird. /// Der Dienst, der für die Verarbeitung der Umschlaghistorie verantwortlich ist. - public HistoryController(ILogger logger, IEnvelopeHistoryService service) + public HistoryController(ILogger logger, IEnvelopeHistoryService service, IMemoryCache memoryCache) { _logger = logger; _service = service; + _memoryCache = memoryCache; } /// @@ -49,17 +53,7 @@ public class HistoryController : ControllerBase [Authorize] public IActionResult GetReferenceTypes() { - // Enum zu Schlüssel-Wert-Paar - var referenceTypes = Enum.GetValues(typeof(ReferenceType)) - .Cast() - .ToDictionary(rt => - { - var key = rt.ToString(); - var keyAsCamelCase = char.ToLower(key[0]) + key[1..]; - return keyAsCamelCase; - }, rt => (int)rt); - - return Ok(referenceTypes); + return Ok(_memoryCache.GetEnumAsDictionary()); } /// @@ -105,8 +99,8 @@ public class HistoryController : ControllerBase public IActionResult GetEnvelopeStatus([FromQuery] ReferenceType? related = null) { // Enum zu Schlüssel-Wert-Paar - var referenceTypes = Enum.GetValues(typeof(EnvelopeStatus)) - .Cast() + var referenceTypes = Enum.GetValues(typeof(ReferenceType)) + .Cast() .ToDictionary(rt => { var key = rt.ToString();