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 GetFavoritedBy() => string.IsNullOrWhiteSpace(favoritedBy) ? new List() : favoritedBy.FromJson>() ?? new List(); public void SetFavoritedBy(IEnumerable playerIds) { favoritedBy = playerIds.Distinct().OrderBy(x => x).ToList().ToJson(); } public List? GetPlayerIds() { return playerIds.FromJson>(); } public List? GetMessages() { if (string.IsNullOrWhiteSpace(messages)) return new List(); if (messages.TrimStart().StartsWith("{", StringComparison.Ordinal)) { var message = messages.FromJson(); return message == null ? new List() : new List { message }; } return messages.FromJson>(); } public string AddMessage(ChatMessage message) { var messages = GetMessages() ?? new List(); messages.Add(message); return messages.ToJson(); } public string AddPlayer(long player) { var players = GetPlayerIds() ?? new List(); players.Add(player); return players.ToJson(); ; } } }