Ao executar a tarefa de Cancelamento eu encontrei algumas divergências no código. Exemplo caso um paciente vai cadastrar uma consulta para um médico, na mesma data e hora que existiu consulta já cancelada, o sistema não permitia pois acusava que o medico já possuía uma consulta naquela data e horário. Porem issonão é uma verdade visto que a consulta esta como cancelada. Para ajustar eu acabei implementado validações para a data Cancelamento. Criei mais um campo no banco Data Cancelamento. Encima destas informações ajustei todo o codigo para ficar mais adequado a realidade.
Foi um ótimo exercício de adequação. Pude aplicar mais as validações em outros pontos do sistema.
Vale a dica
segue um trecho onde apliquei as devidas validações
public void cancelar( DadosCancelamentoConsulta dados) {
if (!consultaRepository.existsById(dados.idConsulta())) {
throw new ValidacaoException("A consulta informada não existe.");
}
var consultaNaoEstaCancelada = consultaRepository.consultaNaoCancelada(dados.idConsulta()) == null ? true : false;
if(consultaRepository.existsById(dados.idConsulta()) && consultaNaoEstaCancelada == false) {
throw new ValidacaoException("A consulta informada já esta cancelada.");
}
validadoresCancelamento.forEach(v -> v.validadorCancelar(dados));
var consulta = consultaRepository.getReferenceById(dados.idConsulta());
consulta.cancelar(dados.motivo(), dados.dataCancelamento());
}