public async Task <AuditoriaDto> Handle(InserirOcorrenciaCommand request, CancellationToken cancellationToken) { using (var transacao = unitOfWork.IniciarTransacao()) { try { var turma = await mediator.Send(new ObterTurmaPorIdQuery(request.TurmaId)); if (turma is null) { throw new NegocioException("A turma da ocorrência informada não foi encontrada."); } var ocorrenciaTipo = await repositorioOcorrenciaTipo.ObterPorIdAsync(request.OcorrenciaTipoId); if (ocorrenciaTipo is null) { throw new NegocioException("O tipo da ocorrência informado não foi encontrado."); } var ocorrencia = new Ocorrencia(request.DataOcorrencia, request.HoraOcorrencia, request.Titulo, request.Descricao, ocorrenciaTipo, turma); ocorrencia.Id = await repositorioOcorrencia.SalvarAsync(ocorrencia); ocorrencia.AdiconarAlunos(request.CodigosAlunos); foreach (var ocorrenciaAluno in ocorrencia.Alunos) { await repositorioOcorrenciaAluno.SalvarAsync(ocorrenciaAluno); } unitOfWork.PersistirTransacao(); return((AuditoriaDto)ocorrencia); } catch { unitOfWork.Rollback(); throw; } } }