using BuildFlow.Shared.Domain.Exceptions;
using IM.Application.Chat.Commands;
using IM.Infrastructure.Persistence;
using MediatR;
namespace IM.Application.Chat.Handlers;
///
/// 解散群组处理器。仅群主可操作,级联软删群与会话。
///
public class DeleteGroupCommandHandler(ImDbContext db) : IRequestHandler
{
public async Task Handle(DeleteGroupCommand request, CancellationToken ct)
{
var group = await db.Groups.FindAsync([request.GroupId], ct)
?? throw new NotFoundException("群组不存在");
// 解散群组是高危操作,仅限群主本人;管理员亦无此权限
if (group.OwnerId != request.OperatorId)
throw new BusinessException("只有群主才能解散群组");
// GroupEntity 配置了软删除(ISoftDelete),Remove 会被 AuditInterceptor 改写为 IsDeleted=true,
// 关联的 ConversationEntity/GroupMemberEntity 因级联策略同步处理
db.Groups.Remove(group);
await db.SaveChangesAsync(ct);
return Unit.Value;
}
}