using Microsoft.Extensions.Logging; namespace BlueMine.Redmine { class RedmineCache : IRedmineCache { private List Items { get; set; } = []; public DateTime LastUpdated { get; set; } = DateTime.MinValue; private readonly ILogger _logger; private readonly TimeSpan _cacheDuration; private readonly object _lock = new(); public RedmineCache(TimeSpan cacheDuration, ILogger> logger) { _logger = logger; _cacheDuration = cacheDuration; } public RedmineCache(int cacheDurationSec, ILogger> logger) { _logger = logger; _cacheDuration = new TimeSpan(0, 0, cacheDurationSec); } public void RefreshCache(List newItems) { _logger.LogDebug($"Refreshing cache with {newItems.Count} items"); lock (_lock) { Items = newItems; LastUpdated = DateTime.UtcNow; _logger.LogDebug("Cache refreshed"); } } public void InvalidateCache() { _logger.LogDebug("Invalidating cache"); lock (_lock) { LastUpdated = DateTime.MinValue; _logger.LogDebug("Cache invalidated"); } } public bool IsCacheValid() { lock (_lock) { bool valid = DateTime.UtcNow - LastUpdated <= _cacheDuration; _logger.LogDebug($"Cache valid: {valid}"); return valid; } } public List GetItems() { lock (_lock) { _logger.LogDebug($"Returning {Items.Count} cached items"); return Items; } } } }