Files
forkmessager/backend/src/Modules/Chats/Domain/MediaMessage.cs
2026-03-19 22:22:45 +03:00

59 lines
1.6 KiB
C#

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> _media = new();
public override IReadOnlyCollection<Media> 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();
}
}