コード例 #1
0
        public async Task <int> AdicionarPublicacaoAsync(int avaliacaoId, int turmaId, DateTime dataInicio, DateTime dataFim, int valorProva)
        {
            if (dataFim < dataInicio)
            {
                throw new DomainException("A data de fim não pode ser anterior à data de início!");
            }

            var publicacoesTurma = await _publicacaoRepository.ListarPublicacoesPorTurmaAsync(turmaId);

            if (publicacoesTurma.Find(x => x.AvaliacaoId == avaliacaoId) != null)
            {
                throw new DomainException("Essa avaliação já foi publicada para esta turma!");
            }

            var avaliacao = await _avaliacaoRepository.ObterComQuestoresAsync(avaliacaoId);

            if (avaliacao.Questoes.Find(x => x.Opcoes.Count < 4) != null)
            {
                throw new DomainException("Essa avaliação não está completa! É necessário que todas as questões tenham ao menos 4 opções!");
            }

            var publicacao = new Publicacao()
            {
                AvaliacaoId    = avaliacaoId,
                TurmaId        = turmaId,
                DataInicio     = dataInicio,
                DataFim        = dataFim,
                ValorProva     = valorProva,
                DataPublicacao = DateTime.Now
            };

            _publicacaoRepository.Adicionar(publicacao);

            await _publicacaoRepository.SaveChangesAsync();

            return(publicacao.Id);
        }