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); }