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