From 198a7576c92d287a13a3d37f69b61e41b6f4bcea Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Sat, 28 Jun 2025 15:18:51 +0300 Subject: [PATCH 1/6] Flyway is implemented --- pom.xml | 11 ++++++++ src/main/resources/application-dev.yaml | 12 +++++++++ .../db/migration/V2__insert-app-user.sql | 25 +++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 src/main/resources/db/migration/V2__insert-app-user.sql diff --git a/pom.xml b/pom.xml index 6f64477..59fe667 100644 --- a/pom.xml +++ b/pom.xml @@ -156,6 +156,17 @@ 2.3.0 + + org.flywaydb + flyway-core + 10.10.0 + + + org.flywaydb + flyway-database-postgresql + 10.10.0 + + diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index 7f44a61..da8baaf 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -8,10 +8,22 @@ server: include-message: always # always include the HTTP message spring: + datasource: + url: jdbc:postgresql://localhost:5432/contact_manager_dev + username: root + password: root + driver-class-name: org.postgresql.Driver + + flyway: + enabled: true + locations: classpath:db/migration + baseline-on-migrate: true + jpa: hibernate: ddl-auto: update + logging: level: root: info diff --git a/src/main/resources/db/migration/V2__insert-app-user.sql b/src/main/resources/db/migration/V2__insert-app-user.sql new file mode 100644 index 0000000..c2f161a --- /dev/null +++ b/src/main/resources/db/migration/V2__insert-app-user.sql @@ -0,0 +1,25 @@ +INSERT INTO app_user ( + first_name, + last_name, + username, + password, + email, + image_url, + create_date, + modify_date +) VALUES ( + 'Benyamin', + 'Smith', + 'test10', + '$2b$12$ytf8RUEeUB4imdjah/.KBuBQpPGN/9M7bMtToTP5jf1X3pRMj8kUi', + 'venya@example.com', + 'https://example.com/images/ivan.jpg', + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP + ); + +INSERT INTO app_user_user_role (app_user_id, user_role) VALUES ( + + (SELECT id FROM app_user WHERE username = 'test10'), + 'ADMIN' + ); \ No newline at end of file From eeb2ece109e85defd30eadd36d35eccdcb5bc160 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Sat, 28 Jun 2025 15:59:54 +0300 Subject: [PATCH 2/6] Added schema name --- src/main/resources/db/migration/V2__insert-app-user.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/db/migration/V2__insert-app-user.sql b/src/main/resources/db/migration/V2__insert-app-user.sql index c2f161a..d531773 100644 --- a/src/main/resources/db/migration/V2__insert-app-user.sql +++ b/src/main/resources/db/migration/V2__insert-app-user.sql @@ -1,4 +1,4 @@ -INSERT INTO app_user ( +INSERT INTO public.app_user ( first_name, last_name, username, @@ -18,8 +18,8 @@ INSERT INTO app_user ( CURRENT_TIMESTAMP ); -INSERT INTO app_user_user_role (app_user_id, user_role) VALUES ( +INSERT INTO public.app_user_user_role (app_user_id, user_role) VALUES ( - (SELECT id FROM app_user WHERE username = 'test10'), + (SELECT id FROM public.app_user WHERE username = 'test10'), 'ADMIN' ); \ No newline at end of file From 2ef764df8ca3043eed058d5916d00cc40d86e7d9 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Sat, 28 Jun 2025 16:08:11 +0300 Subject: [PATCH 3/6] =?UTF-8?q?WIP:=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B1=D0=B5=D0=B9=D0=B7=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .http-requests/auth/app-user.http | 4 +- .../gnew/contactm/entity/ContactBook.java~ | 61 +++++++++++++++++++ src/main/resources/application.yaml | 6 +- src/main/resources/log4j2.xml~ | 34 +++++++++++ 4 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 src/main/java/ua/com/javarush/gnew/contactm/entity/ContactBook.java~ create mode 100644 src/main/resources/log4j2.xml~ diff --git a/.http-requests/auth/app-user.http b/.http-requests/auth/app-user.http index cb5d388..80563b6 100644 --- a/.http-requests/auth/app-user.http +++ b/.http-requests/auth/app-user.http @@ -5,8 +5,8 @@ Content-Type: application/json { "firstName": "asd", "lastName": "asd", - "username": "test12", - "password": "test12", + "username": "test", + "password": "test", "email": "test@example.com" } diff --git a/src/main/java/ua/com/javarush/gnew/contactm/entity/ContactBook.java~ b/src/main/java/ua/com/javarush/gnew/contactm/entity/ContactBook.java~ new file mode 100644 index 0000000..5654cf6 --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/contactm/entity/ContactBook.java~ @@ -0,0 +1,61 @@ +package ua.com.javarush.gnew.contactm.entity; + +import com.google.gson.annotations.Expose; +import jakarta.persistence.*; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +@Getter +@Setter +@NoArgsConstructor +@Entity +@Table(name = "contact_book") +public class ContactBook { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Expose + private long id; + + + + @ManyToOne + @JoinColumn(name = "app_user_id") + private AppUser owner; + + @OneToMany(mappedBy = "contactBook", fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @Expose + private List contacts; + + @CreationTimestamp + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "create_date") + private Date createDate; + + @UpdateTimestamp + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "modify_date") + private Date modifyDate; + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + ContactBook that = (ContactBook) o; + return getId() == that.getId() + && Objects.equals(getOwner(), that.getOwner()) + && Objects.equals(getContacts(), that.getContacts()) + && Objects.equals(getCreateDate(), that.getCreateDate()) + && Objects.equals(getModifyDate(), that.getModifyDate()); + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getOwner(), getContacts(), getCreateDate(), getModifyDate()); + } +} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 031ba8e..5db2ea4 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -17,6 +17,6 @@ logging: org.springframework.security: DEBUG cloudinary: - name: ${CLOUDINARY_NAME} - api-key: ${CLOUDINARY_API_KEY} - api-secret: ${CLOUDINARY_API_SECRET} \ No newline at end of file + name: dru4hznjk + api-key: 374119777715921 + api-secret: 9OfudXe_H4kM7o5NmwdDRXW8yuQ \ No newline at end of file diff --git a/src/main/resources/log4j2.xml~ b/src/main/resources/log4j2.xml~ new file mode 100644 index 0000000..c75c01d --- /dev/null +++ b/src/main/resources/log4j2.xml~ @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From c2eb7594a4252e34c1583585fd21e8ccdd4cf8bb Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Sat, 28 Jun 2025 16:46:04 +0300 Subject: [PATCH 4/6] CREATE TABLE --- src/main/resources/db/migration/V1__create-tables.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/resources/db/migration/V1__create-tables.sql diff --git a/src/main/resources/db/migration/V1__create-tables.sql b/src/main/resources/db/migration/V1__create-tables.sql new file mode 100644 index 0000000..d2e55a1 --- /dev/null +++ b/src/main/resources/db/migration/V1__create-tables.sql @@ -0,0 +1,11 @@ +CREATE TABLE public.app_user ( + id SERIAL PRIMARY KEY, + first_name VARCHAR(255), + last_name VARCHAR(255), + username VARCHAR(255), + password VARCHAR(255), + email VARCHAR(255), + image_url VARCHAR(255), + create_date TIMESTAMP, + modify_date TIMESTAMP +); \ No newline at end of file From 6ae9d0df630810dacc78258164f53926c8d6a4b8 Mon Sep 17 00:00:00 2001 From: Yaroslav <6i4bbb@gmail.com> Date: Sat, 28 Jun 2025 16:56:57 +0300 Subject: [PATCH 5/6] CREATE TABLE 2 --- src/main/resources/db/migration/V1__create-tables.sql | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/resources/db/migration/V1__create-tables.sql b/src/main/resources/db/migration/V1__create-tables.sql index d2e55a1..80942af 100644 --- a/src/main/resources/db/migration/V1__create-tables.sql +++ b/src/main/resources/db/migration/V1__create-tables.sql @@ -8,4 +8,12 @@ CREATE TABLE public.app_user ( image_url VARCHAR(255), create_date TIMESTAMP, modify_date TIMESTAMP +); + +CREATE TABLE public.app_user_user_role ( + app_user_id INT NOT NULL, + user_role VARCHAR(50) NOT NULL, + CONSTRAINT fk_app_user FOREIGN KEY (app_user_id) + REFERENCES public.app_user(id) + ON DELETE CASCADE ); \ No newline at end of file From 42fc7f6d87f0889f79ad371078e296d191feae03 Mon Sep 17 00:00:00 2001 From: Lana Date: Tue, 1 Jul 2025 14:55:40 +0300 Subject: [PATCH 6/6] replace properties with environment variables --- .../gnew/contactm/entity/ContactBook.java~ | 61 ------------------- src/main/resources/application-dev.yaml | 9 +-- .../resources/application-production.yaml | 1 + src/main/resources/application.yaml | 6 +- src/main/resources/log4j2.xml~ | 34 ----------- 5 files changed, 5 insertions(+), 106 deletions(-) delete mode 100644 src/main/java/ua/com/javarush/gnew/contactm/entity/ContactBook.java~ delete mode 100644 src/main/resources/log4j2.xml~ diff --git a/src/main/java/ua/com/javarush/gnew/contactm/entity/ContactBook.java~ b/src/main/java/ua/com/javarush/gnew/contactm/entity/ContactBook.java~ deleted file mode 100644 index 5654cf6..0000000 --- a/src/main/java/ua/com/javarush/gnew/contactm/entity/ContactBook.java~ +++ /dev/null @@ -1,61 +0,0 @@ -package ua.com.javarush.gnew.contactm.entity; - -import com.google.gson.annotations.Expose; -import jakarta.persistence.*; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.annotations.UpdateTimestamp; - -@Getter -@Setter -@NoArgsConstructor -@Entity -@Table(name = "contact_book") -public class ContactBook { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Expose - private long id; - - - - @ManyToOne - @JoinColumn(name = "app_user_id") - private AppUser owner; - - @OneToMany(mappedBy = "contactBook", fetch = FetchType.EAGER, cascade = CascadeType.ALL) - @Expose - private List contacts; - - @CreationTimestamp - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "create_date") - private Date createDate; - - @UpdateTimestamp - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "modify_date") - private Date modifyDate; - - @Override - public boolean equals(Object o) { - if (o == null || getClass() != o.getClass()) return false; - ContactBook that = (ContactBook) o; - return getId() == that.getId() - && Objects.equals(getOwner(), that.getOwner()) - && Objects.equals(getContacts(), that.getContacts()) - && Objects.equals(getCreateDate(), that.getCreateDate()) - && Objects.equals(getModifyDate(), that.getModifyDate()); - } - - @Override - public int hashCode() { - return Objects.hash(getId(), getOwner(), getContacts(), getCreateDate(), getModifyDate()); - } -} diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index da8baaf..2e20381 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -7,13 +7,6 @@ server: enabled: false # disable the Whitelabel page include-message: always # always include the HTTP message -spring: - datasource: - url: jdbc:postgresql://localhost:5432/contact_manager_dev - username: root - password: root - driver-class-name: org.postgresql.Driver - flyway: enabled: true locations: classpath:db/migration @@ -21,7 +14,7 @@ spring: jpa: hibernate: - ddl-auto: update + ddl-auto: validate logging: diff --git a/src/main/resources/application-production.yaml b/src/main/resources/application-production.yaml index bbf37d5..073f8dd 100644 --- a/src/main/resources/application-production.yaml +++ b/src/main/resources/application-production.yaml @@ -3,6 +3,7 @@ spring: url: ${DB_URL} username: ${DB_USER} password: ${DB_PASSWORD} + driver-class-name: org.postgresql.Driver jwt: jwtSecret: ${JWT_SECRET} jwtExpiration: ${JWT_EXPIRATION} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 5db2ea4..031ba8e 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -17,6 +17,6 @@ logging: org.springframework.security: DEBUG cloudinary: - name: dru4hznjk - api-key: 374119777715921 - api-secret: 9OfudXe_H4kM7o5NmwdDRXW8yuQ \ No newline at end of file + name: ${CLOUDINARY_NAME} + api-key: ${CLOUDINARY_API_KEY} + api-secret: ${CLOUDINARY_API_SECRET} \ No newline at end of file diff --git a/src/main/resources/log4j2.xml~ b/src/main/resources/log4j2.xml~ deleted file mode 100644 index c75c01d..0000000 --- a/src/main/resources/log4j2.xml~ +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file