Eu já terminei o curso e, tudo fluiu muito bem, mas após eu incluir o CRUD do paciente, apresenta erro ao iniciar o projeto.
package med.voll.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
import med.voll.api.paciente.DadosAtualizacaoPaciente;
import med.voll.api.paciente.DadosCadastroPaciente;
import med.voll.api.paciente.DadosListagemPaciente;
import med.voll.api.paciente.Paciente;
import med.voll.api.paciente.PacienteRepository;
@RestController
@RequestMapping("pacientes")
public class PacienteController {
@Autowired
private PacienteRepository repository;
@PostMapping
@Transactional
public void cadasatro(@RequestBody @Valid DadosCadastroPaciente dados ) {
repository.save(new Paciente(dados));
}
@GetMapping
public Page<DadosListagemPaciente> listarPaciente (@PageableDefault(page = 0, size = 10, sort = {"nome"})Pageable paginacao){
return repository.findAllAtivoTrue(paginacao).map(DadosListagemPaciente::new);
}
@PutMapping
@Transactional
public void atualizarPaciente(@RequestBody @Valid DadosAtualizacaoPaciente dados) {
var paciente = repository.getReferenceById(dados.id());
paciente.atualizaInformacoes(dados);
}
@DeleteMapping("/{id}")
@Transactional
public void removerPaciente (@PathVariable Long id) {
var paciente = repository.getReferenceById(id);
paciente.inativar();
}
}
package med.voll.api.paciente;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import med.voll.api.endereco.Endereco;
@Getter
@EqualsAndHashCode(of = "id")
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "Paciente")
@Table(name = "paciente")
public class Paciente {
@Id @GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String email;
private String cpf;
private String telefone;
@Embedded
private Endereco endereco;
private Boolean ativo;
public Paciente(DadosCadastroPaciente dados) {
this.ativo = true;
this.nome = dados.nome();
this.telefone = dados.telefone();
this.email = dados.email();
this.cpf = dados.cpf();
this.endereco = new Endereco(dados.endereco());
}
public void atualizaInformacoes(@Valid DadosAtualizacaoPaciente dados) {
if (dados.nome() != null)
this.nome = dados.nome();
if (dados.telefone() != null)
this.telefone = dados.telefone();
if (dados.endereco() != null)
this.endereco.atualizaInformacoes(dados.endereco());
}
public void inativar() {
this.ativo = false;
}
}
package med.voll.api.paciente;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PacienteRepository extends JpaRepository <Paciente, Long> {
Page<Paciente> findAllAtivoTrue(Pageable paginacao);
}