Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] Erro ao realizar a requisição:

package med.voll.api.controller.consulta;

import jakarta.validation.Valid;
import med.voll.api.domain.consulta.agendamento.AgendamentoConsultas;
import med.voll.api.domain.consulta.cancelamento.CancelamentoConsultas;
import med.voll.api.domain.consulta.cancelamento.DadosCancelamento;
import med.voll.api.domain.consulta.agendamento.DadosConsultas;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("consultas")
public class ConsultasController {

    @Autowired
    private AgendamentoConsultas consultas;

    @Autowired
    private CancelamentoConsultas cancelamentoConsultas;

    @PostMapping
    @Transactional
    public ResponseEntity agenda(@RequestBody @Valid DadosConsultas dados){
        var dto = consultas.agendar(dados);
        return ResponseEntity.ok(dto);
    }

    @DeleteMapping
    @Transactional
    public ResponseEntity cancelar(@RequestBody @Valid DadosCancelamento dados){
        cancelamentoConsultas.cancelar(dados);
        return ResponseEntity.noContent().build();
    }
}
package med.voll.api.domain.consulta.cancelamento;

import med.voll.api.domain.consulta.ConsultaRepository;
import med.voll.api.domain.validacoes.validacoesCancelamento.IValidacaoCancelamento;
import med.voll.api.infra.exception.ValidacaoExeption;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class CancelamentoConsultas {

    @Autowired
    private ConsultaRepository consultaRepository;

    @Autowired
    private List<IValidacaoCancelamento> cancelamentoList;

    public void cancelar(DadosCancelamento dados){
        if (!consultaRepository.existsById(dados.id())){
            throw new ValidacaoExeption("Consulta com o id informado não existe");
        }

        cancelamentoList.forEach(c -> c.cancelar(dados));

        var consulta = consultaRepository.getReferenceById(dados.id());
        consulta.cancelar(dados.motivo());
    }
}
package med.voll.api.domain.consulta.cancelamento;

public enum ConsultaCancelamentoMotivo {
    PACIENTE_DESISTIU,
    MEDICO_CANCELOU,
    OUTROS;
}
package med.voll.api.domain.consulta.cancelamento;

import jakarta.validation.constraints.NotNull;

public record DadosCancelamento(
        @NotNull
        Long id,
        @NotNull
        ConsultaCancelamentoMotivo motivo) {
}
package med.voll.api.domain.validacoes.validacoesCancelamento;

import med.voll.api.domain.consulta.cancelamento.DadosCancelamento;

public interface IValidacaoCancelamento {
    void cancelar(DadosCancelamento dados);
}
package med.voll.api.domain.validacoes.validacoesCancelamento;

import med.voll.api.domain.consulta.cancelamento.DadosCancelamento;
import med.voll.api.infra.exception.ValidacaoExeption;
import org.springframework.stereotype.Component;

@Component
public class ValidarCancelamentoMensagem implements IValidacaoCancelamento{
    @Override
    public void cancelar(DadosCancelamento dados) {
        if (dados.motivo() == null){
            throw new ValidacaoExeption("Motivo do cancelamento deve ser informado");
        }
    }
}
package med.voll.api.domain.validacoes.validacoesCancelamento;

import med.voll.api.domain.consulta.Consulta;
import med.voll.api.domain.consulta.ConsultaRepository;
import med.voll.api.domain.consulta.cancelamento.DadosCancelamento;
import med.voll.api.infra.exception.ValidacaoExeption;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class ValidacaoCancelamento24Horas implements IValidacaoCancelamento{

    @Autowired
    private ConsultaRepository repository;

    @Override
    public void cancelar(DadosCancelamento dados){
        Consulta consulta = repository.getReferenceById(dados.id());

        if(LocalDateTime.now().plusHours(24).isAfter(consulta.getData())){
            throw new ValidacaoExeption("Consulta só podem ser canceladas com 24 horas de antecedência");
        }
    }
}
2 respostas

Oi!

Qual foi o erro que ocorreu?

solução!

Boa tarde Rodrigo. O erro estava na url que eu estava chamando e na criação da coluna com os motivos. Mas já foi resolvido. obrigado.