@RestController
@RequestMapping("medicos")
public class MedicoController {
@Autowired
private MedicoRepository repository;
@PostMapping
@Transactional
public void cadastrar(@RequestBody @Valid DadosCadastroMedico dados) {
repository.save(new Medico(dados));
}
@GetMapping
public Page<DadosListagemMedico> listar(Pageable paginacao) {
return repository.findAll(paginacao).map(DadosListagemMedico::new);
}
@PutMapping
@Transactional
public void Atualizar(@RequestBody @Valid DadosAtualizacaoMedico dados){
var medico = repository.getReferenceById(dados.id());
medico.AtualizarInformacoes(dados);
}
}
--------------------------------------------
public record DadosCadastroMedico(
@NotBlank
String nome,
@NotBlank
@Email
String email,
String telefone,
@NotBlank
@Pattern(regexp = "\\d{4,6}")
String crm,
@NotNull
Especialidade especialidade,
@NotNull
@Valid
DadosEndereco endereco) {
}
--------------------------------------------
public record DadosListagemMedico(Long id,String nome, String email, String crm, Especialidade especialidade) {
public DadosListagemMedico(Medico medico){
this(medico.getId(),medico.getNome(),medico.getEmail(),medico.getCrm(),medico.getEspecialidade());
}
}
--------------------------------------------
public record DadosAtualizacaoMedico(
@NotNull
Long id,
String nome,
String telefone,
DadosEndereco endereco) {
}
--------------------------------------------
public record DadosEndereco(
@NotBlank
String logradouro,
@NotBlank
String bairro,
@NotBlank
@Pattern(regexp = "\\d {8}")
String cep,
@NotBlank
String cidade,
String uf,
String numero,
String complemento) {
}
--------------------------------------------
@Embeddable
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Endereco {
private String logradouro;
private String bairro;
private String cep;
private String cidade;
private String uf;
private String numero;
private String complemento;
public Endereco(DadosEndereco endereco) {
/* if (endereco == null) {
throw new IllegalArgumentException("DadosEndereco is null");
}
*/
this.logradouro = endereco.logradouro();
this.bairro = endereco.bairro();
this.cep = endereco.cep();
this.cidade = endereco.cidade();
this.uf = endereco.uf();
this.numero = endereco.numero();
this.complemento = endereco.complemento();
}
public void AtualizarInformacoes(DadosEndereco dados) {
if(this.logradouro != null){
this.logradouro = dados.logradouro();
}
if(this.bairro != null){
this.bairro = dados.bairro();
}
if(this.cep != null){
this.cep = dados.cep();
}
if(this.cidade != null){
this.cidade = dados.cidade();
}
if (this.uf != null){
this.uf = dados.uf();
}
if(this.numero != null){
this.numero = dados.numero();
}
if(this.complemento != null){
this.complemento = dados.complemento();
}
}
}
--------------------------------------------
@Table(name = "medicos")
@Entity(name = "Medico")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Medico {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String email;
private String telefone;
private String crm;
@Enumerated(EnumType.STRING)
private Especialidade especialidade;
@Embedded
private Endereco endereco;
public Medico(DadosCadastroMedico dados) {
this.nome = dados.nome();
this.email = dados.email();
this.telefone = dados.telefone();
this.crm = dados.crm();
this.especialidade = dados.especialidade();
this.endereco = new Endereco(dados.endereco());
}
public void AtualizarInformacoes(DadosAtualizacaoMedico dados) {
if(this.nome != null){
this.nome = dados.nome();
}
if(this.telefone != null){
this.telefone = dados.telefone();
}
if(this.endereco != null){
this.endereco.AtualizarInformacoes(dados.endereco());
}
}
}