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; } }