diff --git a/src/main/java/com/laporeon/library_api/model/Address.java b/src/main/java/com/laporeon/library_api/model/Address.java new file mode 100644 index 0000000..54ba5a4 --- /dev/null +++ b/src/main/java/com/laporeon/library_api/model/Address.java @@ -0,0 +1,44 @@ +package com.laporeon.library_api.model; + +import java.time.LocalDateTime; + +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Entity +@Table(name = "addresses") +public class Address { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String street; + + @Column(nullable = false) + private Integer number; + + @Column(nullable = false, length = 50) + private String city; + + @CreationTimestamp + @Column(name = "created_at") + private LocalDateTime createdAt; + + @UpdateTimestamp + @Column(name = "updated_at") + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/laporeon/library_api/model/Person.java b/src/main/java/com/laporeon/library_api/model/Person.java new file mode 100644 index 0000000..ebe2899 --- /dev/null +++ b/src/main/java/com/laporeon/library_api/model/Person.java @@ -0,0 +1,57 @@ +package com.laporeon.library_api.model; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.UUID; + +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "people") +public class Person { + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private UUID id; + + @Column(nullable = false, length = 50) + private String name; + + @Column(nullable = false, unique = true, length = 11) + private String cpf; + + @Column(name = "birth_date", nullable = false) + private LocalDate birthDate; + + @Column(nullable = false) + private String password; + + @ToString.Exclude + @OneToOne + @JoinColumn(name = "address_id") + private Address address; + + @CreationTimestamp + @Column(name = "created_at") + private LocalDateTime createdAt; + + @UpdateTimestamp + @Column(name = "updated_at") + private LocalDateTime updatedAt; +} diff --git a/src/main/resources/db/migration/V1__create-table-addresses.sql b/src/main/resources/db/migration/V1__create-table-addresses.sql new file mode 100644 index 0000000..dfbbed0 --- /dev/null +++ b/src/main/resources/db/migration/V1__create-table-addresses.sql @@ -0,0 +1,8 @@ +CREATE TABLE addresses ( + id SERIAL PRIMARY KEY, + street VARCHAR NOT NULL, + number INTEGER NOT NULL, + city VARCHAR(50) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); \ No newline at end of file diff --git a/src/main/resources/db/migration/V2__create-table-users.sql b/src/main/resources/db/migration/V2__create-table-users.sql new file mode 100644 index 0000000..8a39bcd --- /dev/null +++ b/src/main/resources/db/migration/V2__create-table-users.sql @@ -0,0 +1,10 @@ +CREATE TABLE users ( + id UUID PRIMARY KEY, + name VARCHAR(50) NOT NULL, + cpf VARCHAR(11) NOT NULL UNIQUE, + birth_date DATE NOT NULL, + password VARCHAR NOT NULL, + address_id INTEGER REFERENCES addresses(id), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); \ No newline at end of file diff --git a/src/main/resources/db/migration/V3__rename-users-to-people.sql b/src/main/resources/db/migration/V3__rename-users-to-people.sql new file mode 100644 index 0000000..fcf249d --- /dev/null +++ b/src/main/resources/db/migration/V3__rename-users-to-people.sql @@ -0,0 +1,5 @@ +ALTER TABLE users RENAME TO people; + +ALTER TABLE people RENAME CONSTRAINT users_pkey TO people_pkey; +ALTER TABLE people RENAME CONSTRAINT users_address_id_fkey TO people_address_id_fkey; +ALTER TABLE people RENAME CONSTRAINT users_cpf_key TO people_cpf_key; \ No newline at end of file