diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoSpiralAbyssService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoSpiralAbyssService.cs index dd6f5874..163e9c9d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoSpiralAbyssService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/HutaoSpiralAbyssService.cs @@ -24,51 +24,52 @@ internal sealed partial class HutaoSpiralAbyssService : IHutaoSpiralAbyssService private readonly IMemoryCache memoryCache; /// - public ValueTask GetOverviewAsync() + public ValueTask GetOverviewAsync(bool last = false) { - return FromCacheOrWebAsync(nameof(Overview), homaClient.GetOverviewAsync); + return FromCacheOrWebAsync(nameof(Overview), last, homaClient.GetOverviewAsync); } /// - public ValueTask> GetAvatarAppearanceRanksAsync() + public ValueTask> GetAvatarAppearanceRanksAsync(bool last = false) { - return FromCacheOrWebAsync(nameof(AvatarAppearanceRank), homaClient.GetAvatarAttendanceRatesAsync); + return FromCacheOrWebAsync(nameof(AvatarAppearanceRank), last, homaClient.GetAvatarAttendanceRatesAsync); } /// - public ValueTask> GetAvatarUsageRanksAsync() + public ValueTask> GetAvatarUsageRanksAsync(bool last = false) { - return FromCacheOrWebAsync(nameof(AvatarUsageRank), homaClient.GetAvatarUtilizationRatesAsync); + return FromCacheOrWebAsync(nameof(AvatarUsageRank), last, homaClient.GetAvatarUtilizationRatesAsync); } /// - public ValueTask> GetAvatarConstellationInfosAsync() + public ValueTask> GetAvatarConstellationInfosAsync(bool last = false) { - return FromCacheOrWebAsync(nameof(AvatarConstellationInfo), homaClient.GetAvatarHoldingRatesAsync); + return FromCacheOrWebAsync(nameof(AvatarConstellationInfo), last, homaClient.GetAvatarHoldingRatesAsync); } /// - public ValueTask> GetAvatarCollocationsAsync() + public ValueTask> GetAvatarCollocationsAsync(bool last = false) { - return FromCacheOrWebAsync(nameof(AvatarCollocation), homaClient.GetAvatarCollocationsAsync); + return FromCacheOrWebAsync(nameof(AvatarCollocation), last, homaClient.GetAvatarCollocationsAsync); } /// - public ValueTask> GetWeaponCollocationsAsync() + public ValueTask> GetWeaponCollocationsAsync(bool last = false) { - return FromCacheOrWebAsync(nameof(WeaponCollocation), homaClient.GetWeaponCollocationsAsync); + return FromCacheOrWebAsync(nameof(WeaponCollocation), last, homaClient.GetWeaponCollocationsAsync); } /// - public ValueTask> GetTeamAppearancesAsync() + public ValueTask> GetTeamAppearancesAsync(bool last = false) { - return FromCacheOrWebAsync(nameof(TeamAppearance), homaClient.GetTeamCombinationsAsync); + return FromCacheOrWebAsync(nameof(TeamAppearance), last, homaClient.GetTeamCombinationsAsync); } - private async ValueTask FromCacheOrWebAsync(string typeName, Func>> taskFunc) + private async ValueTask FromCacheOrWebAsync(string typeName, bool last, Func>> taskFunc) where T : class, new() { - string key = $"{nameof(HutaoSpiralAbyssService)}.Cache.{typeName}"; + string kind = last ? "Last" : "Current"; + string key = $"{nameof(HutaoSpiralAbyssService)}.Cache.{typeName}.{kind}"; if (memoryCache.TryGetValue(key, out object? cache)) { T? t = cache as T; @@ -81,7 +82,7 @@ internal sealed partial class HutaoSpiralAbyssService : IHutaoSpiralAbyssService return memoryCache.Set(key, value, cacheExpireTime); } - Response webResponse = await taskFunc(default).ConfigureAwait(false); + Response webResponse = await taskFunc(last, default).ConfigureAwait(false); T? data = webResponse.Data; if (data is not null) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoSpiralAbyssService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoSpiralAbyssService.cs index 959c6a3a..fea4fa5d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoSpiralAbyssService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Hutao/IHutaoSpiralAbyssService.cs @@ -15,41 +15,41 @@ internal interface IHutaoSpiralAbyssService /// 异步获取角色上场率 /// /// 角色上场率 - ValueTask> GetAvatarAppearanceRanksAsync(); + ValueTask> GetAvatarAppearanceRanksAsync(bool last = false); /// /// 异步获取角色搭配 /// /// 角色搭配 - ValueTask> GetAvatarCollocationsAsync(); + ValueTask> GetAvatarCollocationsAsync(bool last = false); /// /// 异步获取角色持有率信息 /// /// 角色持有率信息 - ValueTask> GetAvatarConstellationInfosAsync(); + ValueTask> GetAvatarConstellationInfosAsync(bool last = false); /// /// 异步获取角色使用率 /// /// 角色使用率 - ValueTask> GetAvatarUsageRanksAsync(); + ValueTask> GetAvatarUsageRanksAsync(bool last = false); /// /// 异步获取统计数据 /// /// 统计数据 - ValueTask GetOverviewAsync(); + ValueTask GetOverviewAsync(bool last = false); /// /// 异步获取队伍上场 /// /// 队伍上场 - ValueTask> GetTeamAppearancesAsync(); + ValueTask> GetTeamAppearancesAsync(bool last = false); /// /// 异步获取武器搭配 /// /// 武器搭配 - ValueTask> GetWeaponCollocationsAsync(); + ValueTask> GetWeaponCollocationsAsync(bool last = false); } \ No newline at end of file