@RestController
@RequestMapping("/pacientes")
public class PacienteController {
@Autowired
PacienteRepository pacienteRepository;
@PostMapping()
public void registrarPaciente(@RequestBody @Valid PacienteDTO datosPaciente) {
pacienteRepository.save(new Paciente(datosPaciente));
}
@GetMapping()
public Page<DatosPaciente> mostrarPacientes(Pageable pageable) {
return pacienteRepository.findAll(pageable).map(DatosPaciente::new);
}
@PutMapping()
@Transactional
public void actualizarMedico(@RequestBody @Valid DatosPacienteAActualizar datosPacienteAActualizar) {
Paciente paciente = pacienteRepository.getReferenceById(datosPacienteAActualizar.id());
paciente.actualizarDatos(datosPacienteAActualizar);
}
@DeleteMapping("/{id}")
@Transactional
public void eliminarPaciente(@PathVariable Long id) {
Paciente paciente = pacienteRepository.getReferenceById(id);
paciente.desactivarPaciente();
}
}
@Entity(name = "Paciente")
@Table(name = "pacientes")
@EqualsAndHashCode(of = "id")
public class Paciente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
private String email;
private String telefono;
private String documento;
private String calle;
private String numero;
private String comuna;
private String ciudad;
private Boolean activo;
public Paciente(PacienteDTO pacienteDTO) {
this.nombre = pacienteDTO.nombre();
this.email = pacienteDTO.email();
this.telefono = pacienteDTO.telefono();
this.documento = pacienteDTO.documento();
this.calle = pacienteDTO.calle();
this.numero = pacienteDTO.numero();
this.comuna = pacienteDTO.comuna();
this.ciudad = pacienteDTO.ciudad();
this.activo = true;
}
public Paciente() {
}
public Paciente(String nombre, String email, String telefono, String documento, String calle, String numero, String comuna, String ciudad) {
this.nombre = nombre;
this.email = email;
this.telefono = telefono;
this.documento = documento;
this.calle = calle;
this.numero = numero;
this.comuna = comuna;
this.ciudad = ciudad;
this.activo = true;
}
public Long getId() {
return id;
}
public String getNombre() {
return nombre;
}
public String getEmail() {
return email;
}
public String getTelefono() {
return telefono;
}
public String getDocumento() {
return documento;
}
public String getCalle() {
return calle;
}
public String getNumero() {
return numero;
}
public String getComuna() {
return comuna;
}
public String getCiudad() {
return ciudad;
}
public void actualizarDatos(@Valid DatosPacienteAActualizar datosPacienteAActualizar) {
if (datosPacienteAActualizar.nombre() != null) {
this.nombre = datosPacienteAActualizar.nombre();
}
if (datosPacienteAActualizar.email() != null) {
this.email = datosPacienteAActualizar.email();
}
if (datosPacienteAActualizar.telefono() != null) {
this.telefono = datosPacienteAActualizar.telefono();
}
}
public void desactivarPaciente() {
this.activo = false;
}
}
public record DatosPacienteAActualizar(@NotNull Long id, String nombre, String email, String telefono) {
}
public record DatosPaciente(
Long id,
String nombre,
String email,
String telefono,
String documento
) {
public DatosPaciente(Paciente p) {
this(p.getId(), p.getNombre(), p.getEmail(), p.getTelefono(), p.getDocumento());
}
}
alter table pacientes add activo tinyint;
update pacientes set activo = 1;