120 lines
3.5 KiB
C#
120 lines
3.5 KiB
C#
using GroupService.Domain.Enums;
|
|
using GroupService.Domain.Events;
|
|
using IM.DomainCommons;
|
|
|
|
namespace GroupService.Domain.Entities
|
|
{
|
|
public class Group : AggregateRootEntity
|
|
{
|
|
/// <summary>
|
|
/// 群聊名称
|
|
/// </summary>
|
|
public string Name { get; private set; } = "新建群聊";
|
|
|
|
/// <summary>
|
|
/// 群主
|
|
/// </summary>
|
|
public Guid GroupMaster { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 群权限
|
|
/// (0:需管理员同意,1:任意人可加群,2:不允许任何人加入)
|
|
/// </summary>
|
|
public GroupAuthorityType Authority { get; private set; } = GroupAuthorityType.REQUIRE_CONSENT;
|
|
|
|
/// <summary>
|
|
/// 全员禁言(false允许发言,true全员禁言)
|
|
/// </summary>
|
|
public bool AllMembersBanned { get; private set; } = false;
|
|
|
|
/// <summary>
|
|
/// 群聊状态
|
|
/// (1:正常,2:封禁)
|
|
/// </summary>
|
|
public GroupState Status { get; private set; } = GroupState.Normal;
|
|
|
|
/// <summary>
|
|
/// 群公告
|
|
/// </summary>
|
|
public string Announcement { get; private set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// 群头像
|
|
/// </summary>
|
|
public string? Avatar { get; private set; }
|
|
public long MaxSequenceId { get; private set; } = 0;
|
|
public string LastMessage { get; private set; } = string.Empty;
|
|
public string LastSenderName { get; private set; } = string.Empty;
|
|
|
|
private Group() { }
|
|
|
|
public Group(Guid groupMaster, string name = "新建群聊")
|
|
{
|
|
Name = name;
|
|
GroupMaster = groupMaster;
|
|
Avatar = $"https://api.dicebear.com/7.x/thumbs/svg?seed={Guid.NewGuid()}";
|
|
AddDomainEvent(new GroupCreateDomainEvent(this));
|
|
}
|
|
|
|
public void setAllMembersBanned(bool isBanned)
|
|
{
|
|
if (isBanned == AllMembersBanned) return;
|
|
|
|
AllMembersBanned = isBanned;
|
|
|
|
AddDomainEvent(new AllMembersBannedDomainEvent(this));
|
|
}
|
|
|
|
public void Ban(bool notify = true)
|
|
{
|
|
Status = GroupState.Blocked;
|
|
ModificationTime = DateTime.Now;
|
|
if (notify) AddDomainEvent(new GroupBlockedDomainEvent(this));
|
|
}
|
|
|
|
public void Unban() { Status = GroupState.Normal; ModificationTime = DateTime.Now; }
|
|
|
|
public void Update(string? name, GroupAuthorityType? groupAuthority, string? announcement, string? avatar)
|
|
{
|
|
bool isChanged = false;
|
|
if (name != null)
|
|
{
|
|
Name = name;
|
|
isChanged = true;
|
|
}
|
|
|
|
if (groupAuthority != null)
|
|
{
|
|
Authority = groupAuthority.Value;
|
|
isChanged = true;
|
|
}
|
|
|
|
if (announcement != null)
|
|
{
|
|
Announcement = announcement;
|
|
isChanged = true;
|
|
}
|
|
if (avatar != null)
|
|
{
|
|
Avatar = avatar;
|
|
isChanged = true;
|
|
}
|
|
|
|
if (isChanged)
|
|
{
|
|
ModificationTime = DateTime.Now;
|
|
AddDomainEvent(new GroupUpdateDomainEvent(this));
|
|
}
|
|
}
|
|
|
|
public void UpdateLastMsg(long maxSequenceId, string lastMsg, string lastSenderName)
|
|
{
|
|
MaxSequenceId = maxSequenceId;
|
|
LastMessage = lastMsg;
|
|
LastSenderName = lastSenderName;
|
|
}
|
|
|
|
|
|
}
|
|
}
|