80 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.ComponentModel.DataAnnotations;
 | 
						|
using System.ComponentModel.DataAnnotations.Schema;
 | 
						|
using System.Text.Json.Serialization;
 | 
						|
using NodaTime;
 | 
						|
 | 
						|
namespace DysonNetwork.Shared.Models;
 | 
						|
 | 
						|
public class SnChatMessage : ModelBase, IIdentifiedResource
 | 
						|
{
 | 
						|
    public Guid Id { get; set; } = Guid.NewGuid();
 | 
						|
    [MaxLength(1024)] public string Type { get; set; } = null!;
 | 
						|
    [MaxLength(4096)] public string? Content { get; set; }
 | 
						|
    [Column(TypeName = "jsonb")] public Dictionary<string, object>? Meta { get; set; }
 | 
						|
    [Column(TypeName = "jsonb")] public List<Guid>? MembersMentioned { get; set; }
 | 
						|
    [MaxLength(36)] public string Nonce { get; set; } = null!;
 | 
						|
    public Instant? EditedAt { get; set; }
 | 
						|
    
 | 
						|
    [Column(TypeName = "jsonb")] public List<SnCloudFileReferenceObject> Attachments { get; set; } = []; 
 | 
						|
 | 
						|
    public ICollection<SnChatMessageReaction> Reactions { get; set; } = new List<SnChatMessageReaction>();
 | 
						|
 | 
						|
    public Guid? RepliedMessageId { get; set; }
 | 
						|
    public SnChatMessage? RepliedMessage { get; set; }
 | 
						|
    public Guid? ForwardedMessageId { get; set; }
 | 
						|
    public SnChatMessage? ForwardedMessage { get; set; }
 | 
						|
 | 
						|
    public Guid SenderId { get; set; }
 | 
						|
    public SnChatMember Sender { get; set; } = null!;
 | 
						|
    public Guid ChatRoomId { get; set; }
 | 
						|
    [JsonIgnore] public SnChatRoom ChatRoom { get; set; } = null!;
 | 
						|
 | 
						|
    public string ResourceIdentifier => $"message:{Id}";
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Creates a shallow clone of this message for sync operations
 | 
						|
    /// </summary>
 | 
						|
    /// <returns>A new Message instance with copied properties</returns>
 | 
						|
    public SnChatMessage Clone()
 | 
						|
    {
 | 
						|
        return new SnChatMessage
 | 
						|
        {
 | 
						|
            Id = Id,
 | 
						|
            Type = Type,
 | 
						|
            Content = Content,
 | 
						|
            Meta = Meta,
 | 
						|
            MembersMentioned = MembersMentioned,
 | 
						|
            Nonce = Nonce,
 | 
						|
            EditedAt = EditedAt,
 | 
						|
            Attachments = Attachments,
 | 
						|
            RepliedMessageId = RepliedMessageId,
 | 
						|
            ForwardedMessageId = ForwardedMessageId,
 | 
						|
            SenderId = SenderId,
 | 
						|
            Sender = Sender,
 | 
						|
            ChatRoomId = ChatRoomId,
 | 
						|
            ChatRoom = ChatRoom,
 | 
						|
            CreatedAt = CreatedAt,
 | 
						|
            UpdatedAt = UpdatedAt
 | 
						|
        };
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
public enum MessageReactionAttitude
 | 
						|
{
 | 
						|
    Positive,
 | 
						|
    Neutral,
 | 
						|
    Negative,
 | 
						|
}
 | 
						|
 | 
						|
public class SnChatMessageReaction : ModelBase
 | 
						|
{
 | 
						|
    public Guid Id { get; set; } = Guid.NewGuid();
 | 
						|
    public Guid MessageId { get; set; }
 | 
						|
    [JsonIgnore] public SnChatMessage Message { get; set; } = null!;
 | 
						|
    public Guid SenderId { get; set; }
 | 
						|
    public SnChatMember Sender { get; set; } = null!;
 | 
						|
 | 
						|
    [MaxLength(256)] public string Symbol { get; set; } = null!;
 | 
						|
    public MessageReactionAttitude Attitude { get; set; }
 | 
						|
}
 |