using System.Text.Json; namespace SharpChat.Messages; public class VirtualMessageStorage : MessageStorage { private readonly Dictionary<long, Message> Messages = []; public Task LogMessage( long id, string type, string channelName, string senderId, string senderName, ColourInheritable senderColour, int senderRank, string senderNick, UserPermissions senderPerms, object? data = null ) { Messages.Add( id, new( id, type, long.TryParse(senderId, out long senderId64) && senderId64 > 0 ? senderId : null, senderName, senderColour, senderRank, senderPerms, senderNick, DateTimeOffset.Now, null, channelName, JsonDocument.Parse(data == null ? "{}" : JsonSerializer.Serialize(data)) ) ); return Task.CompletedTask; } public Task<Message?> GetMessage(long seqId) { return Task.FromResult(Messages.TryGetValue(seqId, out Message? evt) ? evt : null); } public Task DeleteMessage(Message evt) { Messages.Remove(evt.Id); return Task.CompletedTask; } public Task<IEnumerable<Message>> GetMessages(string channelName, int amount = 20, int offset = 0) { IEnumerable<Message> subset = Messages.Values.Where(ev => ev.ChannelName == channelName); int start = subset.Count() - offset - amount; if(start < 0) { amount += start; start = 0; } return Task.FromResult(subset.Skip(start).Take(amount).ToArray() as IEnumerable<Message>); } }