diff --git a/src/main/java/com/mirna/hospitalmanagementapi/domain/dtos/PatientDTO.java b/src/main/java/com/mirna/hospitalmanagementapi/domain/dtos/PatientDTO.java new file mode 100644 index 0000000..b894798 --- /dev/null +++ b/src/main/java/com/mirna/hospitalmanagementapi/domain/dtos/PatientDTO.java @@ -0,0 +1,33 @@ +package com.mirna.hospitalmanagementapi.domain.dtos; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; + +/** + * Data transfer object used to transfer data that will be saved in a Patient + * entity + * + * @author Mirna Gama + * @version 1.0 + */ +public record PatientDTO( + @NotBlank(message = "name cannot be blank") + String name, + + @NotBlank(message = "email cannot be blank") + @Email(message = "invalid format for email") + String email, + + @NotBlank(message = "cpf cannot be blank") + @Pattern(regexp = "\\d{11}", message = "invalid format for cpf") + String cpf, + + @NotBlank(message = "telephone cannot be blank") + String telephone, + + @NotNull(message = "address cannot be null") + @Valid + AddressDTO address) {} diff --git a/src/main/java/com/mirna/hospitalmanagementapi/domain/entities/Patient.java b/src/main/java/com/mirna/hospitalmanagementapi/domain/entities/Patient.java new file mode 100644 index 0000000..95cd32b --- /dev/null +++ b/src/main/java/com/mirna/hospitalmanagementapi/domain/entities/Patient.java @@ -0,0 +1,181 @@ +package com.mirna.hospitalmanagementapi.domain.entities; + +import com.mirna.hospitalmanagementapi.domain.dtos.PatientDTO; + +import jakarta.persistence.Column; +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.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; + +/** +* +* @author Mirna Gama +* @version 1.0 +*/ +@Table(name="patients") +@Entity(name="Patient") +public class Patient { + + /** + * Constructor for class Patient + * @param patientDTO Data transfer object containing Patient entity information + * @see PatientDTO + */ + public Patient(PatientDTO patientDTO) { + this.active=true; + this.name=patientDTO.name(); + this.email=patientDTO.email(); + this.cpf=patientDTO.cpf(); + this.telephone=patientDTO.telephone(); + this.address = new Address(patientDTO.address()); + } + + public Patient(){} + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotBlank(message="name cannot be blank") + @Column(name="name") + private String name; + + @NotBlank(message="email cannot be blank") + @Column(name="email") + private String email; + + @NotBlank(message="cpf cannot be blank") + @Pattern(regexp = "\\d{11}", message = "invalid format for cpf") + @Column(name="cpf") + private String cpf; + + @NotBlank(message="telephone cannot be blank") + @Column(name="telephone") + private String telephone; + + @NotNull(message="active cannot be null") + @Column(name="_active") + private Boolean active; + + @NotNull(message="address cannot be null") + @Embedded + private Address address; + + /** + * Returns the doctor id. + * @return A Long representing the patient id. + */ + public Long getId() { + return id; + } + + /** + * Sets the doctor id. + * @param id The patient's unique identifier. + */ + public void setId(Long id) { + this.id = id; + } + + /** + * Returns the name + * @return A string representing the patient's name. + */ + public String getName() { + return name; + } + + /** + * Sets the name + * @param name Must not be blank. + */ + public void setName(String name) { + this.name = name; + } + + /** + * Returns the email + * @return A string representing the patient's email. + */ + public String getEmail() { + return email; + } + + /** + * Sets the email + * @param email Must not be blank. + */ + public void setEmail(String email) { + this.email = email; + } + + /** + * Returns the cpf + * @return A string representing the patient's cpf. + */ + public String getCrm() { + return cpf; + } + + /** + * Sets the cpf + * @param cpf Must not be blank. + */ + public void setCpf(String cpf) { + this.cpf = cpf; + } + + /** + * Returns the telephone + * @return A string representing the patient's telephone. + */ + public String getTelephone() { + return telephone; + } + + /** + * Sets the telephone + * @param telephone Must not be blank. + */ + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + /** + * Returns the active + * @return A boolean value that states whether the patient is active in the system + */ + public Boolean getActive() { + return active; + } + + /** + * Sets the active + * @param active Must not be null. Starts with the true value by default + */ + public void setActive(Boolean active) { + this.active = active; + } + + /** + * Returns the address + * @return An object class representing the patient's address. + * @see Address + */ + public Address getAddress() { + return address; + } + + /** + * Sets the address + * @param address Must not be null. + */ + public void setAddress(Address address) { + this.address = address; + } +} diff --git a/src/main/resources/db/migration/V4__create-table-patients.sql b/src/main/resources/db/migration/V4__create-table-patients.sql new file mode 100644 index 0000000..0fe62e3 --- /dev/null +++ b/src/main/resources/db/migration/V4__create-table-patients.sql @@ -0,0 +1,18 @@ +create table patients ( + + id bigint not null auto_increment, + name varchar(100) not null, + email varchar(100) not null unique, + cpf varchar(11) not null unique, + telephone varchar(20) not null, + street varchar(100) not null, + neighborhood varchar(100) not null, + zip_code varchar(9) not null, + additional_details varchar(100), + house_number varchar(20), + state varchar(2) not null, + city varchar(100) not null, + _active tinyint not null, + + primary key(id) +);