LANCommander/LANCommander.Server.Services/Extensions/CacheExtensions.cs

61 lines
2.2 KiB
C#
Raw Permalink Normal View History

using LANCommander.SDK.Models;
using ZiggyCreatures.Caching.Fusion;
namespace LANCommander.Server.Services.Extensions;
public static class CacheExtensions
{
private static string GetThreadParticipantCacheKey(Guid threadId) => $"Chat/Thread/{threadId}/Participants";
private static string GetThreadCacheKey(Guid threadId) => $"Chat/Thread/{threadId}";
2025-02-23 08:49:43 -06:00
public static async Task ExpireGameCacheAsync(this IFusionCache cache)
{
await cache.RemoveByTagAsync(["Games", "Depot"]);
}
public static async Task ExpireGameCacheAsync(this IFusionCache cache, Guid? gameId)
{
if (gameId.HasValue)
await cache.RemoveByTagAsync([
$"Games/{gameId}",
"Games",
"Depot",
$"Games/{gameId}/Archives",
]);
2025-02-22 00:26:54 -06:00
else
await cache.RemoveByTagAsync(["Games", "Depot"]);
}
public static Task ExpireArchiveCacheAsync(this IFusionCache cache)
{
return ExpireArchiveCacheAsync(cache, archiveId: null);
}
public static async Task ExpireArchiveCacheAsync(this IFusionCache cache, Guid? archiveId)
{
if (archiveId.HasValue)
await cache.RemoveByTagAsync([$"Archives/{archiveId}"]);
else
await cache.RemoveByTagAsync(["Archives"]);
}
public static async Task<ChatThread?> GetChatThreadAsync(this IFusionCache cache, Guid threadId)
{
var thread = await cache.TryGetAsync<ChatThread>(GetThreadCacheKey(threadId));
return thread.GetValueOrDefault();
}
public static async Task SetChatThreadAsync(this IFusionCache cache, Guid threadId, ChatThread thread)
=> await cache.SetAsync(GetThreadCacheKey(threadId), thread);
public static async Task<List<string>> GetChatThreadParticipants(this IFusionCache cache, Guid threadId)
{
var participants = await cache.TryGetAsync<List<string>>(GetThreadParticipantCacheKey(threadId));
return participants.HasValue ? participants.Value : [];
}
public static async Task SetChatThreadParticipants(this IFusionCache cache, Guid threadId,
List<string> participants)
=> await cache.SetAsync(GetThreadParticipantCacheKey(threadId), participants);
}