move classes around, name caches more consistently, add more caches
This commit is contained in:
parent
e86b37ce2a
commit
e17dcf90a1
30 changed files with 443 additions and 51 deletions
|
|
@ -0,0 +1,46 @@
|
|||
using System.Collections.Concurrent;
|
||||
using Remora.Discord.API.Abstractions.Objects;
|
||||
using Remora.Rest.Core;
|
||||
|
||||
namespace Catalogger.Backend.Cache.InMemoryCache;
|
||||
|
||||
public class InMemoryMemberCache : IMemberCache
|
||||
{
|
||||
private readonly ConcurrentDictionary<(Snowflake, Snowflake), IGuildMember> _members = new();
|
||||
private readonly ConcurrentDictionary<Snowflake, byte> _guilds = new();
|
||||
|
||||
#pragma warning disable CS8619 // Nullability of reference types in value doesn't match target type.
|
||||
public Task<IGuildMember?> TryGetAsync(Snowflake guildId, Snowflake userId) =>
|
||||
_members.TryGetValue((guildId, userId), out var member)
|
||||
? Task.FromResult(member)
|
||||
: Task.FromResult<IGuildMember?>(null);
|
||||
#pragma warning restore CS8619 // Nullability of reference types in value doesn't match target type.
|
||||
|
||||
public Task SetAsync(Snowflake guildId, IGuildMember member)
|
||||
{
|
||||
if (!member.User.IsDefined())
|
||||
throw new CataloggerError("Member with undefined User passed to RedisMemberCache.SetAsync");
|
||||
_members[(guildId, member.User.Value.ID)] = member;
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public async Task SetManyAsync(Snowflake guildId, IReadOnlyList<IGuildMember> members)
|
||||
{
|
||||
foreach (var member in members)
|
||||
await SetAsync(guildId, member);
|
||||
}
|
||||
|
||||
public Task<bool> IsGuildCachedAsync(Snowflake guildId) => Task.FromResult(_guilds.ContainsKey(guildId));
|
||||
|
||||
public Task MarkAsCachedAsync(Snowflake guildId)
|
||||
{
|
||||
_guilds[guildId] = 1;
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task MarkAsUncachedAsync(Snowflake guildId)
|
||||
{
|
||||
_guilds.Remove(guildId, out _);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue