50 lines
1.6 KiB
C#
50 lines
1.6 KiB
C#
using AS1024.GeoFeed.Core.Interfaces;
|
|
using AS1024.GeoFeed.Core.Tools;
|
|
using AS1024.GeoFeed.Models;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace AS1024.GeoFeed.Core.CacheService
|
|
{
|
|
public class GeoFeedLocalFileCache : IGeoFeedPersistentCacheProvider
|
|
{
|
|
private readonly IConfiguration configuration;
|
|
private readonly ILogger<GeoFeedLocalFileCache> logger;
|
|
|
|
public GeoFeedLocalFileCache(IConfiguration _configuration,
|
|
ILogger<GeoFeedLocalFileCache> logger)
|
|
{
|
|
configuration = _configuration;
|
|
this.logger = logger;
|
|
}
|
|
|
|
string IGeoFeedPersistentCacheProvider.ProviderName => "file";
|
|
|
|
Task<bool> IGeoFeedPersistentCacheProvider.CacheGeoFeed(IList<IPGeoFeed> pGeoFeeds)
|
|
{
|
|
string? tempPath = GetTempPath();
|
|
logger.LogInformation($"Writing geofeed data to: {tempPath}");
|
|
File.WriteAllText(tempPath, pGeoFeeds.ToList().
|
|
ToGeoFeedCsv());
|
|
|
|
return Task.FromResult(true);
|
|
}
|
|
|
|
private string GetTempPath()
|
|
{
|
|
string? tempPath = Path.Combine(Path.GetTempPath(), "geoFeedCache.csv");
|
|
|
|
logger.LogInformation($"Getting GeoFeed data from: {tempPath}");
|
|
|
|
if (!string.IsNullOrEmpty(configuration["TempCache"]))
|
|
tempPath = configuration["TempCache"];
|
|
return tempPath;
|
|
}
|
|
|
|
string IGeoFeedPersistentCacheProvider.GetGeoFeed()
|
|
{
|
|
return File.ReadAllText(GetTempPath());
|
|
}
|
|
}
|
|
}
|