using System; using System.Collections.Generic; namespace Knot.Modules.Chats.Domain; public class MediaMessage : Message { public override string Type => MediaType.ToString().ToLower(); public override string? Content { get; protected set; } // Map to Caption public string? Caption { get => Content; private set => Content = value; } public MediaType MediaType { get; private set; } // image, video, file, voice private readonly List _media = new(); public override IReadOnlyCollection Media => _media.AsReadOnly(); private MediaMessage() : base() { MediaType = MediaType.File; } public MediaMessage( Guid id, Guid chatId, Guid senderId, MediaType mediaType, string? caption, Guid? replyToId, Guid? forwardedFromId, DateTime createdAt, bool isImported) : base(id, chatId, senderId, replyToId, forwardedFromId, createdAt, isImported) { MediaType = mediaType; Caption = caption; if (!isImported) { RaiseDomainEvent(new MessageSentDomainEvent(Id, ChatId, SenderId, Caption)); } } public void AddMedia(MediaType type, string url, string? filename, long? size) { _media.Add(new Domain.Media(Id, type.ToString().ToLower(), url, filename, size)); } public void Edit(string newCaption) { Caption = newCaption; AddState(MessageState.IsEdited); } public override void Delete() { Caption = null; base.Delete(); } }