using GroupService.Domain.Enums;
using GroupService.Domain.Events;
using IM.DomainCommons;
namespace GroupService.Domain.Entities
{
public class GroupMember : AggregateRootEntity
{
///
/// 用户编号
///
public Guid UserId { get; private set; }
public string GroupNickName { get; private set; }
public string? Avatar { get; private set; }
///
/// 群聊编号
///
public Guid GroupId { get; private set; }
///
/// 成员角色(0:普通成员,1:管理员,2:群主)
///
public GroupMemberRole Role { get; private set; }
private GroupMember() { }
public GroupMember(Guid userId, Guid groupId, string groupNickname, string? avatar, GroupMemberRole role = GroupMemberRole.Normal)
{
UserId = userId;
GroupId = groupId;
Role = role;
GroupNickName = groupNickname;
Avatar = avatar;
AddDomainEvent(new GroupMemberJoinedDomainEvent(this));
}
public void UpdateRole(GroupMemberRole role)
{
if (role == Role) return;
Role = role;
}
public void UpdateAvatar(string avatar)
{
Avatar = avatar;
}
public void UpdateGroupNickname(string nickname)
{
GroupNickName = nickname;
}
public void Leave()
{
if (IsDeleted) return;
SoftDelete();
AddDomainEvent(new GroupMemberLeftDomainEvent(this));
}
}
}