Example #1
0
        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;
                }
            }
        }