65 lines
1.8 KiB
C#
65 lines
1.8 KiB
C#
using Microsoft.Extensions.Logging;
|
|
|
|
namespace BlueMine.Redmine
|
|
{
|
|
class RedmineCache<T> : IRedmineCache<T>
|
|
{
|
|
private List<T> 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<RedmineCache<T>> logger)
|
|
{
|
|
_logger = logger;
|
|
_cacheDuration = cacheDuration;
|
|
}
|
|
public RedmineCache(int cacheDurationSec, ILogger<RedmineCache<T>> logger)
|
|
{
|
|
_logger = logger;
|
|
_cacheDuration = new TimeSpan(0, 0, cacheDurationSec);
|
|
}
|
|
|
|
public void RefreshCache(List<T> 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<T> GetItems()
|
|
{
|
|
lock (_lock)
|
|
{
|
|
_logger.LogDebug($"Returning {Items.Count} cached items");
|
|
return Items;
|
|
}
|
|
}
|
|
}
|
|
}
|