コード例 #1
0
        public async Task <int> AdicionarPublicacaoAsync(int professorId, int avaliacaoId, int turmaId, DateTime dataInicio, DateTime dataFim, int valorProva)
        {
            var publicacao = new Publicacao();

            publicacao.AvaliacaoId = avaliacaoId;
            publicacao.TurmaId     = turmaId;
            publicacao.DataInicio  = dataInicio;
            publicacao.DataFim     = dataFim;
            publicacao.ValorProva  = valorProva;

            var erros = publicacao.Validate();

            if (erros.Length == 0)
            {
                var avaliacao = await _avaliacaoRepository.ObterAsync(avaliacaoId);

                if (avaliacao == null)
                {
                    throw new DomainException("A avaliação informada não foi encontrada!");
                }

                if (avaliacao.ProfessorId != professorId)
                {
                    throw new DomainException("A avaliação informada não pertence ao professor logado!");
                }

                if (avaliacao.Publicacoes.Where(x => x.TurmaId == turmaId).Any())
                {
                    throw new DomainException("Essa avaliação já foi publicada para esta turma!");
                }
                if (avaliacao.Questoes.Where(x => x.Opcoes.Where(y => y.Verdadeira).Count() != 1).Any())
                {
                    throw new DomainException("Esta avaliação possui pendências e não pode ser publicada!");
                }
                if (!avaliacao.Questoes.Any() || avaliacao.Questoes.Where(x => x.Opcoes.Count < 4).Any())
                {
                    throw new DomainException("Essa avaliação não está completa! É necessário que todas as questões tenham ao menos 4 opções!");
                }

                await _publicacaoRepository.AdicionarAsync(publicacao);

                _publicacaoRepository.SaveChanges();

                return(publicacao.Id);
            }
            else
            {
                throw new DomainException(erros);
            }
        }