Files
2026-10-16 23:33:13 -07:00

55 lines
1.7 KiB
C#

using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Text.Json;
using RadicadeServer.Extensions;
namespace RadicadeServer.RecNet.Messages
{
public class ChatThread
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long chatThreadId { get; set; }
public string chatThreadName { get; set; } = null!;
public long lastReadMessageId { get; set; }
public string messages { get; set; } = null!;
public string playerIds { get; set; } = null!;
public string? favoritedBy { get; set; }
public List<long> GetFavoritedBy() =>
string.IsNullOrWhiteSpace(favoritedBy) ? new List<long>() : favoritedBy.FromJson<List<long>>() ?? new List<long>();
public void SetFavoritedBy(IEnumerable<long> playerIds)
{
favoritedBy = playerIds.Distinct().OrderBy(x => x).ToList().ToJson();
}
public List<long>? GetPlayerIds()
{
return playerIds.FromJson<List<long>>();
}
public List<ChatMessage>? GetMessages()
{
if (string.IsNullOrWhiteSpace(messages)) return new List<ChatMessage>();
if (messages.TrimStart().StartsWith("{", StringComparison.Ordinal))
{
var message = messages.FromJson<ChatMessage>();
return message == null ? new List<ChatMessage>() : new List<ChatMessage> { message };
}
return messages.FromJson<List<ChatMessage>>();
}
public string AddMessage(ChatMessage message)
{
var messages = GetMessages() ?? new List<ChatMessage>();
messages.Add(message);
return messages.ToJson();
}
public string AddPlayer(long player)
{
var players = GetPlayerIds() ?? new List<long>();
players.Add(player);
return players.ToJson(); ;
}
}
}