From a2e64a1a1d93e964a0db75a3ba817254c1a95e1b Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Tue, 22 Jul 2025 14:20:43 +0900 Subject: [PATCH 01/10] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/domain/ChatAttachment.java | 35 ++++++++++++++++ .../chat/domain/ChatMessage.java | 41 +++++++++++++++++++ .../chat/domain/ChatParticipant.java | 27 ++++++++++++ .../chat/domain/ChatReadStatus.java | 24 +++++++++++ .../solidconnection/chat/domain/ChatRoom.java | 34 +++++++++++++++ 5 files changed, 161 insertions(+) create mode 100644 src/main/java/com/example/solidconnection/chat/domain/ChatAttachment.java create mode 100644 src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java create mode 100644 src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java create mode 100644 src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java create mode 100644 src/main/java/com/example/solidconnection/chat/domain/ChatRoom.java diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatAttachment.java b/src/main/java/com/example/solidconnection/chat/domain/ChatAttachment.java new file mode 100644 index 000000000..5c0f5e651 --- /dev/null +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatAttachment.java @@ -0,0 +1,35 @@ +package com.example.solidconnection.chat.domain; + +import com.example.solidconnection.common.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ChatAttachment extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private Boolean isImage; + + @Column(nullable = false, length = 500) + private String url; + + @Column(length = 500) + private String thumbnailUrl; + + @ManyToOne(fetch = FetchType.LAZY) + private ChatMessage chatMessage; +} diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java b/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java new file mode 100644 index 000000000..069a5769c --- /dev/null +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java @@ -0,0 +1,41 @@ +package com.example.solidconnection.chat.domain; + +import com.example.solidconnection.common.BaseEntity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import java.util.ArrayList; +import java.util.List; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ChatMessage extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 500) + private String content; + + @Column(nullable = false) + private Boolean hasAttachment; + + private long senderId; + + @ManyToOne(fetch = FetchType.LAZY) + private ChatRoom chatRoom; + + @OneToMany(mappedBy = "chatMessage", cascade = CascadeType.ALL) + private List chatAttachments = new ArrayList<>(); +} diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java b/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java new file mode 100644 index 000000000..447547f42 --- /dev/null +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java @@ -0,0 +1,27 @@ +package com.example.solidconnection.chat.domain; + +import com.example.solidconnection.common.BaseEntity; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ChatParticipant extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private long siteUserId; + + @ManyToOne(fetch = FetchType.LAZY) + private ChatRoom chatRoom; +} diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java b/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java new file mode 100644 index 000000000..b1a0f8924 --- /dev/null +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java @@ -0,0 +1,24 @@ +package com.example.solidconnection.chat.domain; + +import com.example.solidconnection.common.BaseEntity; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ChatReadStatus extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private long chatRoomId; + + private long chatParticipantId; +} diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatRoom.java b/src/main/java/com/example/solidconnection/chat/domain/ChatRoom.java new file mode 100644 index 000000000..002b2e98d --- /dev/null +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatRoom.java @@ -0,0 +1,34 @@ +package com.example.solidconnection.chat.domain; + +import com.example.solidconnection.common.BaseEntity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import java.util.ArrayList; +import java.util.List; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ChatRoom extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private Boolean isGroup; + + @OneToMany(mappedBy = "chatRoom", cascade = CascadeType.ALL) + private List chatParticipants = new ArrayList<>(); + + @OneToMany(mappedBy = "chatRoom", cascade = CascadeType.ALL) + private List chatMessages = new ArrayList<>(); +} From 8e944ba4d0e5ec9cbabdf7e02335a1c00c1f4b26 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Tue, 22 Jul 2025 14:20:55 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=ED=85=8C=EC=9D=B4=EB=B8=94=EC=9D=98=20DDL=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V23__add_chat_related_tables.sql | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/main/resources/db/migration/V23__add_chat_related_tables.sql diff --git a/src/main/resources/db/migration/V23__add_chat_related_tables.sql b/src/main/resources/db/migration/V23__add_chat_related_tables.sql new file mode 100644 index 000000000..5a9eeeac7 --- /dev/null +++ b/src/main/resources/db/migration/V23__add_chat_related_tables.sql @@ -0,0 +1,55 @@ +CREATE TABLE chat_room +( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + is_group BOOLEAN NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL +); + +CREATE TABLE chat_participant +( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + site_user_id BIGINT NOT NULL, + chat_room_id BIGINT NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL, + CONSTRAINT FK_CHAT_PARTICIPANT_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id) + CONSTRAINT FK_CHAT_PARTICIPANT_SITE_USER_ID FOREIGN KEY (site_user_id) REFERENCES site_user (id) +); + +CREATE TABLE chat_message +( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + content VARCHAR(500) NOT NULL, + has_attachment BOOLEAN NOT NULL, + sender_id BIGINT NOT NULL, + chat_room_id BIGINT NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL, + CONSTRAINT FK_CHAT_MESSAGE_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id) + CONSTRAINT FK_CHAT_MESSAGE_SENDER_ID FOREIGN KEY (sender_id) REFERENCES chat_participant (id) +); + +CREATE TABLE chat_attachment +( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + is_image BOOLEAN NOT NULL, + url VARCHAR(500) NOT NULL, + thumbnail_url VARCHAR(500), + chat_message_id BIGINT NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL, + CONSTRAINT FK_CHAT_ATTACHMENT_CHAT_MESSAGE_ID FOREIGN KEY (chat_message_id) REFERENCES chat_message (id) +); + +CREATE TABLE chat_read_status +( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + chat_room_id BIGINT NOT NULL, + chat_participant_id BIGINT NOT NULL, + created_at DATETIME(6) NOT NULL, + updated_at DATETIME(6) NOT NULL, + CONSTRAINT FK_CHAT_READ_STATUS_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id), + CONSTRAINT FK_CHAT_READ_STATUS_CHAT_PARTICIPANT_ID FOREIGN KEY (chat_participant_id) REFERENCES chat_participant (id) + CONSTRAINT UK_CHAT_READ_STATUS_CHAT_ROOM_PARTICIPANT UNIQUE (chat_room_id, chat_participant_id) +); From ea3ca251e6372edef9eb15eb3db70368742b5bc7 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Tue, 22 Jul 2025 14:49:25 +0900 Subject: [PATCH 03/10] =?UTF-8?q?fix:=20DDL=20=EC=BD=A4=EB=A7=88=20?= =?UTF-8?q?=EB=88=84=EB=9D=BD=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/db/migration/V23__add_chat_related_tables.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/db/migration/V23__add_chat_related_tables.sql b/src/main/resources/db/migration/V23__add_chat_related_tables.sql index 5a9eeeac7..55f9c756e 100644 --- a/src/main/resources/db/migration/V23__add_chat_related_tables.sql +++ b/src/main/resources/db/migration/V23__add_chat_related_tables.sql @@ -13,7 +13,7 @@ CREATE TABLE chat_participant chat_room_id BIGINT NOT NULL, created_at DATETIME(6) NOT NULL, updated_at DATETIME(6) NOT NULL, - CONSTRAINT FK_CHAT_PARTICIPANT_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id) + CONSTRAINT FK_CHAT_PARTICIPANT_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id), CONSTRAINT FK_CHAT_PARTICIPANT_SITE_USER_ID FOREIGN KEY (site_user_id) REFERENCES site_user (id) ); @@ -26,7 +26,7 @@ CREATE TABLE chat_message chat_room_id BIGINT NOT NULL, created_at DATETIME(6) NOT NULL, updated_at DATETIME(6) NOT NULL, - CONSTRAINT FK_CHAT_MESSAGE_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id) + CONSTRAINT FK_CHAT_MESSAGE_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id), CONSTRAINT FK_CHAT_MESSAGE_SENDER_ID FOREIGN KEY (sender_id) REFERENCES chat_participant (id) ); @@ -50,6 +50,6 @@ CREATE TABLE chat_read_status created_at DATETIME(6) NOT NULL, updated_at DATETIME(6) NOT NULL, CONSTRAINT FK_CHAT_READ_STATUS_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id), - CONSTRAINT FK_CHAT_READ_STATUS_CHAT_PARTICIPANT_ID FOREIGN KEY (chat_participant_id) REFERENCES chat_participant (id) + CONSTRAINT FK_CHAT_READ_STATUS_CHAT_PARTICIPANT_ID FOREIGN KEY (chat_participant_id) REFERENCES chat_participant (id), CONSTRAINT UK_CHAT_READ_STATUS_CHAT_ROOM_PARTICIPANT UNIQUE (chat_room_id, chat_participant_id) ); From 7d7608f7e87ff57ca8689b500189793c177a486d Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Tue, 22 Jul 2025 14:53:12 +0900 Subject: [PATCH 04/10] =?UTF-8?q?feat:=20chat=5Fparticipant=20=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=EC=97=90=EC=84=9C=20chat=5Froom,=20site=5Fus?= =?UTF-8?q?er=20=EA=B0=84=20=EA=B3=A0=EC=9C=A0=20=ED=82=A4=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/chat/domain/ChatParticipant.java | 8 ++++++++ .../db/migration/V23__add_chat_related_tables.sql | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java b/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java index 447547f42..437645654 100644 --- a/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java @@ -7,6 +7,8 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -14,6 +16,12 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(uniqueConstraints = { + @UniqueConstraint( + name = "uk_chat_participant_chat_room_site_user", + columnNames = {"chat_room_id", "site_user_id"} + ) +}) public class ChatParticipant extends BaseEntity { @Id diff --git a/src/main/resources/db/migration/V23__add_chat_related_tables.sql b/src/main/resources/db/migration/V23__add_chat_related_tables.sql index 55f9c756e..a5b4cfc18 100644 --- a/src/main/resources/db/migration/V23__add_chat_related_tables.sql +++ b/src/main/resources/db/migration/V23__add_chat_related_tables.sql @@ -14,7 +14,8 @@ CREATE TABLE chat_participant created_at DATETIME(6) NOT NULL, updated_at DATETIME(6) NOT NULL, CONSTRAINT FK_CHAT_PARTICIPANT_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id), - CONSTRAINT FK_CHAT_PARTICIPANT_SITE_USER_ID FOREIGN KEY (site_user_id) REFERENCES site_user (id) + CONSTRAINT FK_CHAT_PARTICIPANT_SITE_USER_ID FOREIGN KEY (site_user_id) REFERENCES site_user (id), + CONSTRAINT UK_CHAT_PARTICIPANT_CHAT_ROOM_SITE_USER UNIQUE (chat_room_id, site_user_id) ); CREATE TABLE chat_message From b4f76e4d85c46f7c72cc2691032b5fc878945f97 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Tue, 22 Jul 2025 14:54:23 +0900 Subject: [PATCH 05/10] =?UTF-8?q?chore:=20ChatReadStatus=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=EC=97=90=20UK=20=EC=A0=9C=EC=95=BD=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/chat/domain/ChatReadStatus.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java b/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java index b1a0f8924..9f2132622 100644 --- a/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java @@ -5,6 +5,8 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -12,6 +14,12 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(uniqueConstraints = { + @UniqueConstraint( + name = "uk_chat_read_status_chat_room_participant", + columnNames = {"chat_room_id", "chat_participant_id"} + ) +}) public class ChatReadStatus extends BaseEntity { @Id From fc3f4044e62faea398976e9215b067397952d0f7 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Tue, 22 Jul 2025 15:05:52 +0900 Subject: [PATCH 06/10] =?UTF-8?q?fix:=20JPA=EA=B0=80=20UK=20=EC=A0=9C?= =?UTF-8?q?=EC=95=BD=20=EC=A1=B0=EA=B1=B4=20=EC=83=9D=EC=84=B1=20=EC=8B=9C?= =?UTF-8?q?=20=EC=BB=AC=EB=9F=BC=EC=9D=84=20=EC=B0=BE=EC=A7=80=20=EB=AA=BB?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 명시적으로 컬럼 이름을 지정한다. --- .../example/solidconnection/chat/domain/ChatParticipant.java | 2 ++ .../example/solidconnection/chat/domain/ChatReadStatus.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java b/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java index 437645654..f206ab727 100644 --- a/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java @@ -1,6 +1,7 @@ package com.example.solidconnection.chat.domain; import com.example.solidconnection.common.BaseEntity; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -28,6 +29,7 @@ public class ChatParticipant extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(name = "site_user_id") private long siteUserId; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java b/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java index 9f2132622..b1c548ff8 100644 --- a/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java @@ -1,6 +1,7 @@ package com.example.solidconnection.chat.domain; import com.example.solidconnection.common.BaseEntity; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -26,7 +27,9 @@ public class ChatReadStatus extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(name = "chat_room_id") private long chatRoomId; + @Column(name = "chat_participant_id") private long chatParticipantId; } From 454f545b84c9d93e07ebd379f486208d415245ad Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Wed, 23 Jul 2025 13:31:57 +0900 Subject: [PATCH 07/10] =?UTF-8?q?chore:=20UK=20=EC=A0=9C=EC=95=BD=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/solidconnection/chat/domain/ChatParticipant.java | 2 +- .../example/solidconnection/chat/domain/ChatReadStatus.java | 2 +- .../resources/db/migration/V23__add_chat_related_tables.sql | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java b/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java index f206ab727..169e1dd06 100644 --- a/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatParticipant.java @@ -19,7 +19,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(uniqueConstraints = { @UniqueConstraint( - name = "uk_chat_participant_chat_room_site_user", + name = "uk_chat_participant_chat_room_id_site_user_id", columnNames = {"chat_room_id", "site_user_id"} ) }) diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java b/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java index b1c548ff8..13d4ac646 100644 --- a/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatReadStatus.java @@ -17,7 +17,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(uniqueConstraints = { @UniqueConstraint( - name = "uk_chat_read_status_chat_room_participant", + name = "uk_chat_read_status_chat_room_id_chat_participant_id", columnNames = {"chat_room_id", "chat_participant_id"} ) }) diff --git a/src/main/resources/db/migration/V23__add_chat_related_tables.sql b/src/main/resources/db/migration/V23__add_chat_related_tables.sql index a5b4cfc18..ed651a322 100644 --- a/src/main/resources/db/migration/V23__add_chat_related_tables.sql +++ b/src/main/resources/db/migration/V23__add_chat_related_tables.sql @@ -15,7 +15,7 @@ CREATE TABLE chat_participant updated_at DATETIME(6) NOT NULL, CONSTRAINT FK_CHAT_PARTICIPANT_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id), CONSTRAINT FK_CHAT_PARTICIPANT_SITE_USER_ID FOREIGN KEY (site_user_id) REFERENCES site_user (id), - CONSTRAINT UK_CHAT_PARTICIPANT_CHAT_ROOM_SITE_USER UNIQUE (chat_room_id, site_user_id) + CONSTRAINT UK_CHAT_PARTICIPANT_CHAT_ROOM_ID_SITE_USER_ID UNIQUE (chat_room_id, site_user_id) ); CREATE TABLE chat_message @@ -52,5 +52,5 @@ CREATE TABLE chat_read_status updated_at DATETIME(6) NOT NULL, CONSTRAINT FK_CHAT_READ_STATUS_CHAT_ROOM_ID FOREIGN KEY (chat_room_id) REFERENCES chat_room (id), CONSTRAINT FK_CHAT_READ_STATUS_CHAT_PARTICIPANT_ID FOREIGN KEY (chat_participant_id) REFERENCES chat_participant (id), - CONSTRAINT UK_CHAT_READ_STATUS_CHAT_ROOM_PARTICIPANT UNIQUE (chat_room_id, chat_participant_id) + CONSTRAINT UK_CHAT_READ_STATUS_CHAT_ROOM_ID_CHAT_PARTICIPANT_ID UNIQUE (chat_room_id, chat_participant_id) ); From 137ae2f3f2c64501fcbea349d25ad24b137c9ce1 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Wed, 23 Jul 2025 18:25:02 +0900 Subject: [PATCH 08/10] =?UTF-8?q?chore:=20isGroup,=20hasAttachment=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=EC=97=90=20=EA=B8=B0=EB=B3=B8=EA=B0=92=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 데이터 타입을 primitive type으로 지정 - Column 어노테이션 제거 (App level과 DB level 간 일관성 보장) - DDL에 기본값 설정 --- .../com/example/solidconnection/chat/domain/ChatMessage.java | 3 +-- .../com/example/solidconnection/chat/domain/ChatRoom.java | 4 +--- .../resources/db/migration/V23__add_chat_related_tables.sql | 4 ++-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java b/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java index 069a5769c..d2e0561d9 100644 --- a/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java @@ -28,8 +28,7 @@ public class ChatMessage extends BaseEntity { @Column(nullable = false, length = 500) private String content; - @Column(nullable = false) - private Boolean hasAttachment; + private boolean hasAttachment = false; private long senderId; diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatRoom.java b/src/main/java/com/example/solidconnection/chat/domain/ChatRoom.java index 002b2e98d..020befe5f 100644 --- a/src/main/java/com/example/solidconnection/chat/domain/ChatRoom.java +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatRoom.java @@ -2,7 +2,6 @@ import com.example.solidconnection.common.BaseEntity; import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -23,8 +22,7 @@ public class ChatRoom extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(nullable = false) - private Boolean isGroup; + private boolean isGroup = false; @OneToMany(mappedBy = "chatRoom", cascade = CascadeType.ALL) private List chatParticipants = new ArrayList<>(); diff --git a/src/main/resources/db/migration/V23__add_chat_related_tables.sql b/src/main/resources/db/migration/V23__add_chat_related_tables.sql index ed651a322..0f62060c1 100644 --- a/src/main/resources/db/migration/V23__add_chat_related_tables.sql +++ b/src/main/resources/db/migration/V23__add_chat_related_tables.sql @@ -1,7 +1,7 @@ CREATE TABLE chat_room ( id BIGINT AUTO_INCREMENT PRIMARY KEY, - is_group BOOLEAN NOT NULL, + is_group BOOLEAN NOT NULL DEFAULT false, created_at DATETIME(6) NOT NULL, updated_at DATETIME(6) NOT NULL ); @@ -22,7 +22,7 @@ CREATE TABLE chat_message ( id BIGINT AUTO_INCREMENT PRIMARY KEY, content VARCHAR(500) NOT NULL, - has_attachment BOOLEAN NOT NULL, + has_attachment BOOLEAN NOT NULL DEFAULT false, sender_id BIGINT NOT NULL, chat_room_id BIGINT NOT NULL, created_at DATETIME(6) NOT NULL, From 9bd98583570421b44674385f3dca44b80a633a31 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Thu, 24 Jul 2025 15:58:47 +0900 Subject: [PATCH 09/10] =?UTF-8?q?chore:=20hasAttachment=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/solidconnection/chat/domain/ChatMessage.java | 2 -- .../resources/db/migration/V23__add_chat_related_tables.sql | 1 - 2 files changed, 3 deletions(-) diff --git a/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java b/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java index d2e0561d9..8d513c5a7 100644 --- a/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java +++ b/src/main/java/com/example/solidconnection/chat/domain/ChatMessage.java @@ -28,8 +28,6 @@ public class ChatMessage extends BaseEntity { @Column(nullable = false, length = 500) private String content; - private boolean hasAttachment = false; - private long senderId; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/resources/db/migration/V23__add_chat_related_tables.sql b/src/main/resources/db/migration/V23__add_chat_related_tables.sql index 0f62060c1..20898a147 100644 --- a/src/main/resources/db/migration/V23__add_chat_related_tables.sql +++ b/src/main/resources/db/migration/V23__add_chat_related_tables.sql @@ -22,7 +22,6 @@ CREATE TABLE chat_message ( id BIGINT AUTO_INCREMENT PRIMARY KEY, content VARCHAR(500) NOT NULL, - has_attachment BOOLEAN NOT NULL DEFAULT false, sender_id BIGINT NOT NULL, chat_room_id BIGINT NOT NULL, created_at DATETIME(6) NOT NULL, From d46836983d6420f183c6c0835e2e2e486e2f05d6 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Fri, 25 Jul 2025 19:08:39 +0900 Subject: [PATCH 10/10] =?UTF-8?q?chore:=20flyway=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...d_chat_related_tables.sql => V24__add_chat_related_tables.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V23__add_chat_related_tables.sql => V24__add_chat_related_tables.sql} (100%) diff --git a/src/main/resources/db/migration/V23__add_chat_related_tables.sql b/src/main/resources/db/migration/V24__add_chat_related_tables.sql similarity index 100% rename from src/main/resources/db/migration/V23__add_chat_related_tables.sql rename to src/main/resources/db/migration/V24__add_chat_related_tables.sql