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; }
|
|
}
|