Ejemplo n.º 1
0
        public async Task <RetornoBaseDto> Handle(ExcluirAulaUnicaCommand request, CancellationToken cancellationToken)
        {
            var aula = await repositorioAula.ObterPorIdAsync(request.AulaId);

            if (await mediator.Send(new AulaPossuiAvaliacaoQuery(aula, request.Usuario.CodigoRf)))
            {
                throw new NegocioException("Aula com avaliação vinculada. Para excluir esta aula primeiro deverá ser excluída a avaliação.");
            }

            await ValidarComponentesDoProfessor(aula.TurmaId, long.Parse(aula.DisciplinaId), aula.DataAula, request.Usuario);

            unitOfWork.IniciarTransacao();
            try
            {
                if (aula.WorkflowAprovacaoId.HasValue)
                {
                    await mediator.Send(new ExcluirWorkflowCommand(aula.WorkflowAprovacaoId.Value));
                }

                await mediator.Send(new ExcluirNotificacoesDaAulaCommand(aula.Id));

                await mediator.Send(new ExcluirFrequenciaDaAulaCommand(aula.Id));

                await mediator.Send(new ExcluirPlanoAulaDaAulaCommand(aula.Id));

                await mediator.Send(new ExcluirAnotacoesFrequencciaDaAulaCommand(aula.Id));

                await mediator.Send(new ExcluirDiarioBordoDaAulaCommand(aula.Id));

                await mediator.Send(new IncluirFilaExclusaoPendenciasAulaCommand(aula.Id, request.Usuario));

                aula.Excluido = true;
                await repositorioAula.SalvarAsync(aula);

                unitOfWork.PersistirTransacao();
            }
            catch (Exception)
            {
                unitOfWork.Rollback();
                throw;
            }
            var retorno = new RetornoBaseDto();

            retorno.Mensagens.Add("Aula excluída com sucesso.");
            return(retorno);
        }
 public async Task <Aula> Handle(ObterAulaPorIdQuery request, CancellationToken cancellationToken)
 => await repositorioAula.ObterPorIdAsync(request.AulaId);