public async Task <IActionResult> Create(ConsultaViewModel consultaViewModel) { if (!ModelState.IsValid) { return(View(consultaViewModel)); } if (consultaViewModel.Data > DateTime.Now.AddDays(30)) { ModelState.AddModelError(string.Empty, "Consulta pode ser agendeda apenas com 30 dias de antecedência."); consultaViewModel = await PopularMedicos(consultaViewModel); consultaViewModel = await PopularPacientes(consultaViewModel); consultaViewModel = await PopularExames(consultaViewModel); return(View(consultaViewModel)); } var consulta = _mapper.Map <Consulta>(consultaViewModel); if (!await MedicoPossuiDisponibilidade(consulta)) { ModelState.AddModelError(string.Empty, "Médico não possui disponibilidade!"); consultaViewModel = await PopularMedicos(consultaViewModel); consultaViewModel = await PopularPacientes(consultaViewModel); consultaViewModel = await PopularExames(consultaViewModel); return(View(consultaViewModel)); } if (!await PacientePossuiDisponibilidade(consulta)) { ModelState.AddModelError(string.Empty, "Paciente já possui um agendamento no horario!"); consultaViewModel = await PopularMedicos(consultaViewModel); consultaViewModel = await PopularPacientes(consultaViewModel); consultaViewModel = await PopularExames(consultaViewModel); return(View(consultaViewModel)); } var colecaoDeExames = new List <Exame>(); foreach (var exameId in consultaViewModel.ExamesId) { var exame = await _exameRepository.ObterPorIdTracking(exameId); colecaoDeExames.Add(exame); } consulta.Exame = colecaoDeExames; await _consultaRepository.Adicionar(consulta); return(RedirectToAction("Index")); }