using EgwCoreLib.Utils; using Microsoft.Extensions.Configuration; using MP.Data.DbModels.Utils; using MP.Data.Repository.Utils; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace MP.Data.Services.Utils { public class StatsDetailService : BaseServ, IStatsDetailService { #region Public Constructors public StatsDetailService( IConfiguration config, IConnectionMultiplexer redis, IStatsDetailRepository repo) : base(config, redis) { _className = "StatsDetail"; _repo = repo; } #endregion Public Constructors #region Public Methods /// public async Task> GetFiltAsync(DateTime dtStart, DateTime dtEnd, string sEnvir = "", string sType = "") { return await TraceAsync($"{_className}.GetFilt", async (activity) => { return await GetOrSetCacheAsync( $"{_redisBaseKey}:{_className}:DT:{dtStart:yyyyMMdd}:{dtEnd:yyyyMMdd}", async () => await _repo.GetFiltAsync(dtStart, dtEnd), UltraLongCache ); }); } /// public async Task GetRangeAsync(string sEnvir, string sType) { return await TraceAsync($"{_className}.GetRange", async (activity) => { return await GetOrSetCacheAsync( $"{_redisBaseKey}:{_className}:Range:{sEnvir}:{sType}", async () => await _repo.GetRangeAsync(sEnvir, sType), UltraFastCache ); }); } /// public async Task UpsertManyAsync(List listRecords, bool removeOld) { return await TraceAsync($"{_className}.UpsertMany", async (activity) => { string operation = "UpsertMany"; var success = await _repo.UpsertManyAsync(listRecords, removeOld); activity?.SetTag("db.operation", operation); if (success > 0) { await ClearCacheAsync($"{_redisBaseKey}:{_className}:*"); } return success; }); } #endregion Public Methods #region Private Fields private readonly string _className; private readonly IStatsDetailRepository _repo; #endregion Private Fields } }