99 lines
2.9 KiB
C#
99 lines
2.9 KiB
C#
using IM.DomainCommons;
|
|
using MessageService.Domain.Enums;
|
|
using MessageService.Domain.Events;
|
|
using MessageService.Domain.Tools;
|
|
|
|
namespace MessageService.Domain.Entities
|
|
{
|
|
public class Conversation : AggregateRootEntity
|
|
{
|
|
/// <summary>
|
|
/// 用户
|
|
/// </summary>
|
|
public Guid UserId { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 对方ID(群聊为群聊ID,单聊为单聊ID)
|
|
/// </summary>
|
|
public Guid TargetId { get; private set; }
|
|
public string TargetAvatar { get; private set; }
|
|
public string TargetName { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 最后一条未读消息ID
|
|
/// </summary>
|
|
public long? LastReadSequenceId { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 未读消息数
|
|
/// </summary>
|
|
public int UnreadCount { get; private set; }
|
|
|
|
public ChatType ChatType { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 消息推送唯一标识符
|
|
/// </summary>
|
|
public string StreamKey { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 最后一条最新消息
|
|
/// </summary>
|
|
public string LastMessage { get; private set; }
|
|
private Conversation() { }
|
|
|
|
public Conversation(Guid userId, Guid targetId, string targetAvatar, string targetName, long? lastReadSequenceId, int unreadCount, ChatType chatType, string lastMessage)
|
|
{
|
|
UserId = userId;
|
|
TargetId = targetId;
|
|
TargetAvatar = targetAvatar;
|
|
TargetName = targetName;
|
|
LastReadSequenceId = lastReadSequenceId;
|
|
UnreadCount = unreadCount;
|
|
ChatType = chatType;
|
|
LastMessage = lastMessage;
|
|
ModificationTime = DateTime.Now;
|
|
StreamKey = ChatType == ChatType.GROUP ? StreamKeyBuilder.Group(targetId) : StreamKeyBuilder.Private(userId, targetId);
|
|
AddDomainEvent(new ConversationCreatedDomainEvent(this));
|
|
}
|
|
|
|
public void SetLastReadSequence(long sequenceId)
|
|
{
|
|
LastReadSequenceId = sequenceId;
|
|
NotifyModified();
|
|
}
|
|
|
|
public void IncrementUnread()
|
|
{
|
|
UnreadCount += 1;
|
|
NotifyModified();
|
|
}
|
|
|
|
public void UpdateLastMessage(string lastMessage)
|
|
{
|
|
LastMessage = lastMessage;
|
|
NotifyModified();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 标记会话已读(清零未读数,更新最后已读消息序列号)
|
|
/// </summary>
|
|
public void MarkAsRead(long? lastReadSequenceId)
|
|
{
|
|
UnreadCount = 0;
|
|
if (lastReadSequenceId.HasValue)
|
|
LastReadSequenceId = lastReadSequenceId.Value;
|
|
NotifyModified();
|
|
}
|
|
|
|
public void UpdateProfile(string name, string avatar)
|
|
{
|
|
TargetAvatar = avatar;
|
|
TargetName = name;
|
|
}
|
|
|
|
|
|
}
|
|
}
|