From f6b082ee37fd7d36096cad8fce825565e115ed0b Mon Sep 17 00:00:00 2001 From: sewon Date: Thu, 1 Aug 2024 13:49:11 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=EA=B4=80=EB=A0=A8=20=EC=97=94=ED=8B=B0=ED=8B=B0=20?= =?UTF-8?q?=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/solidconnection/entity/Board.java | 29 ++++++++++ .../solidconnection/entity/Comment.java | 46 +++++++++++++++ .../example/solidconnection/entity/Post.java | 58 +++++++++++++++++++ .../solidconnection/entity/PostImage.java | 25 ++++++++ .../entity/common/BaseEntity.java | 22 +++++++ .../entity/mapping/PostLike.java | 28 +++++++++ .../siteuser/domain/SiteUser.java | 29 ++++++---- .../solidconnection/type/PostCategory.java | 5 ++ 8 files changed, 231 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/example/solidconnection/entity/Board.java create mode 100644 src/main/java/com/example/solidconnection/entity/Comment.java create mode 100644 src/main/java/com/example/solidconnection/entity/Post.java create mode 100644 src/main/java/com/example/solidconnection/entity/PostImage.java create mode 100644 src/main/java/com/example/solidconnection/entity/common/BaseEntity.java create mode 100644 src/main/java/com/example/solidconnection/entity/mapping/PostLike.java create mode 100644 src/main/java/com/example/solidconnection/type/PostCategory.java diff --git a/src/main/java/com/example/solidconnection/entity/Board.java b/src/main/java/com/example/solidconnection/entity/Board.java new file mode 100644 index 000000000..adef5b0bb --- /dev/null +++ b/src/main/java/com/example/solidconnection/entity/Board.java @@ -0,0 +1,29 @@ +package com.example.solidconnection.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Board { + + @Id + @Column(length = 20) + private String code; + + @Column(nullable = false, length = 20) + private String koreanName; + + @OneToMany(mappedBy = "board", cascade = CascadeType.ALL) + private List postList = new ArrayList<>(); +} + diff --git a/src/main/java/com/example/solidconnection/entity/Comment.java b/src/main/java/com/example/solidconnection/entity/Comment.java new file mode 100644 index 000000000..96b8fd3b1 --- /dev/null +++ b/src/main/java/com/example/solidconnection/entity/Comment.java @@ -0,0 +1,46 @@ +package com.example.solidconnection.entity; + +import com.example.solidconnection.entity.common.BaseEntity; +import com.example.solidconnection.siteuser.domain.SiteUser; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@DynamicUpdate +@DynamicInsert +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Comment extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(length = 255) + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Post post; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "site_user_id") + private SiteUser siteUser; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parent_id") + private Comment parentComment; + + @OneToMany(mappedBy = "parentComment", cascade = CascadeType.ALL) + private List commentList = new ArrayList<>(); +} diff --git a/src/main/java/com/example/solidconnection/entity/Post.java b/src/main/java/com/example/solidconnection/entity/Post.java new file mode 100644 index 000000000..fe945f418 --- /dev/null +++ b/src/main/java/com/example/solidconnection/entity/Post.java @@ -0,0 +1,58 @@ +package com.example.solidconnection.entity; + +import com.example.solidconnection.entity.common.BaseEntity; +import com.example.solidconnection.entity.mapping.PostLike; +import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.type.PostCategory; +import jakarta.persistence.*; +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@DynamicUpdate +@DynamicInsert +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class Post extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(length = 255) + private String title; + + @Column(length = 1000) + private String content; + + private Boolean isQuestion; + + private Long likeCount; + + @Enumerated(EnumType.STRING) + private PostCategory category; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "board_code") + private Board board; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "site_user_id") + private SiteUser siteUser; + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + private List commentList = new ArrayList<>(); + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) + private List postImageList = new ArrayList<>(); + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + private List postLikeList = new ArrayList<>(); +} diff --git a/src/main/java/com/example/solidconnection/entity/PostImage.java b/src/main/java/com/example/solidconnection/entity/PostImage.java new file mode 100644 index 000000000..aec5f118b --- /dev/null +++ b/src/main/java/com/example/solidconnection/entity/PostImage.java @@ -0,0 +1,25 @@ +package com.example.solidconnection.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PostImage { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(length = 500) + private String url; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Post post; +} \ No newline at end of file diff --git a/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java b/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java new file mode 100644 index 000000000..d0098ffb0 --- /dev/null +++ b/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java @@ -0,0 +1,22 @@ +package com.example.solidconnection.entity.common; + +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class BaseEntity { + + @CreatedDate + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; +} \ No newline at end of file diff --git a/src/main/java/com/example/solidconnection/entity/mapping/PostLike.java b/src/main/java/com/example/solidconnection/entity/mapping/PostLike.java new file mode 100644 index 000000000..61878eded --- /dev/null +++ b/src/main/java/com/example/solidconnection/entity/mapping/PostLike.java @@ -0,0 +1,28 @@ +package com.example.solidconnection.entity.mapping; + +import com.example.solidconnection.entity.Post; +import com.example.solidconnection.siteuser.domain.SiteUser; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PostLike { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Post post; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "site_user_id") + private SiteUser siteUser; +} \ No newline at end of file diff --git a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java index b13a26e9a..7ebb828e1 100644 --- a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java +++ b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java @@ -1,26 +1,24 @@ package com.example.solidconnection.siteuser.domain; +import com.example.solidconnection.entity.Comment; +import com.example.solidconnection.entity.Post; +import com.example.solidconnection.entity.mapping.PostLike; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import jakarta.persistence.*; +import lombok.*; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity +@Builder +@AllArgsConstructor public class SiteUser { @Id @@ -59,6 +57,15 @@ public class SiteUser { @Setter private LocalDate quitedAt; + @OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL) + private List postList = new ArrayList<>(); + + @OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL) + private List commentList = new ArrayList<>(); + + @OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL) + private List postLikeList = new ArrayList<>(); + public SiteUser( String email, String nickname, diff --git a/src/main/java/com/example/solidconnection/type/PostCategory.java b/src/main/java/com/example/solidconnection/type/PostCategory.java new file mode 100644 index 000000000..33b40a116 --- /dev/null +++ b/src/main/java/com/example/solidconnection/type/PostCategory.java @@ -0,0 +1,5 @@ +package com.example.solidconnection.type; + +public enum PostCategory { + 전체, 자유, 질문 +} \ No newline at end of file From e2cc58265de96f092d8a0a0e791f9399b657fa6e Mon Sep 17 00:00:00 2001 From: sewon Date: Thu, 1 Aug 2024 14:18:14 +0900 Subject: [PATCH 2/4] =?UTF-8?q?test:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=EA=B4=80=EB=A0=A8=20=ED=85=8C=EC=9D=B4=EB=B8=94=20?= =?UTF-8?q?=EC=A1=B4=EC=9E=AC=20=EC=97=AC=EB=B6=80=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/database/DatabaseConnectionTest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/example/solidconnection/database/DatabaseConnectionTest.java b/src/test/java/com/example/solidconnection/database/DatabaseConnectionTest.java index 7d9849cbd..a9d80afcc 100644 --- a/src/test/java/com/example/solidconnection/database/DatabaseConnectionTest.java +++ b/src/test/java/com/example/solidconnection/database/DatabaseConnectionTest.java @@ -44,7 +44,12 @@ void connectDatabaseAndCheckTables() { () -> assertThat(isTableExist("LANGUAGE_REQUIREMENT")).isTrue(), () -> assertThat(isTableExist("UNIVERSITY")).isTrue(), () -> assertThat(isTableExist("LIKED_UNIVERSITY")).isTrue(), - () -> assertThat(isTableExist("UNIVERSITY_INFO_FOR_APPLY")).isTrue() + () -> assertThat(isTableExist("UNIVERSITY_INFO_FOR_APPLY")).isTrue(), + () -> assertThat(isTableExist("BOARD")).isTrue(), + () -> assertThat(isTableExist("COMMENT")).isTrue(), + () -> assertThat(isTableExist("POST")).isTrue(), + () -> assertThat(isTableExist("POST_IMAGE")).isTrue(), + () -> assertThat(isTableExist("POST_LIKE")).isTrue() ); } From 6783b8705e293fe2bacc98dfd4f03450b38031a4 Mon Sep 17 00:00:00 2001 From: sewon Date: Fri, 2 Aug 2024 11:10:46 +0900 Subject: [PATCH 3/4] =?UTF-8?q?refactor:=20@DynamicUpdate,=20@DynamicInser?= =?UTF-8?q?t=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20BaseEntity?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/solidconnection/entity/Comment.java | 4 ---- src/main/java/com/example/solidconnection/entity/Post.java | 4 ---- .../com/example/solidconnection/entity/common/BaseEntity.java | 4 ++++ 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/example/solidconnection/entity/Comment.java b/src/main/java/com/example/solidconnection/entity/Comment.java index 96b8fd3b1..dd178fb9c 100644 --- a/src/main/java/com/example/solidconnection/entity/Comment.java +++ b/src/main/java/com/example/solidconnection/entity/Comment.java @@ -7,16 +7,12 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.hibernate.annotations.DynamicInsert; -import org.hibernate.annotations.DynamicUpdate; import java.util.ArrayList; import java.util.List; @Entity @Getter -@DynamicUpdate -@DynamicInsert @Builder @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/example/solidconnection/entity/Post.java b/src/main/java/com/example/solidconnection/entity/Post.java index fe945f418..9a5e60069 100644 --- a/src/main/java/com/example/solidconnection/entity/Post.java +++ b/src/main/java/com/example/solidconnection/entity/Post.java @@ -6,16 +6,12 @@ import com.example.solidconnection.type.PostCategory; import jakarta.persistence.*; import lombok.*; -import org.hibernate.annotations.DynamicInsert; -import org.hibernate.annotations.DynamicUpdate; import java.util.ArrayList; import java.util.List; @Entity @Getter -@DynamicUpdate -@DynamicInsert @Builder @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java b/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java index d0098ffb0..d3de3d8e5 100644 --- a/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java +++ b/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java @@ -3,6 +3,8 @@ import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; import lombok.Getter; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @@ -12,6 +14,8 @@ @MappedSuperclass @EntityListeners(AuditingEntityListener.class) @Getter +@DynamicUpdate +@DynamicInsert public abstract class BaseEntity { @CreatedDate From 222f4e4b74f499ef11ac0da1c1eb117c5745aa4a Mon Sep 17 00:00:00 2001 From: sewon Date: Fri, 2 Aug 2024 11:20:25 +0900 Subject: [PATCH 4/4] =?UTF-8?q?style:=20=ED=8C=8C=EC=9D=BC=20=EB=81=9D?= =?UTF-8?q?=EC=97=90=20=EA=B0=9C=ED=96=89=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/solidconnection/entity/PostImage.java | 2 +- .../com/example/solidconnection/entity/common/BaseEntity.java | 2 +- .../com/example/solidconnection/entity/mapping/PostLike.java | 2 +- .../java/com/example/solidconnection/type/PostCategory.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/solidconnection/entity/PostImage.java b/src/main/java/com/example/solidconnection/entity/PostImage.java index aec5f118b..ddd866e38 100644 --- a/src/main/java/com/example/solidconnection/entity/PostImage.java +++ b/src/main/java/com/example/solidconnection/entity/PostImage.java @@ -22,4 +22,4 @@ public class PostImage { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "post_id") private Post post; -} \ No newline at end of file +} diff --git a/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java b/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java index d3de3d8e5..5f1283c64 100644 --- a/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java +++ b/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java @@ -23,4 +23,4 @@ public abstract class BaseEntity { @LastModifiedDate private LocalDateTime updatedAt; -} \ No newline at end of file +} diff --git a/src/main/java/com/example/solidconnection/entity/mapping/PostLike.java b/src/main/java/com/example/solidconnection/entity/mapping/PostLike.java index 61878eded..feba376b8 100644 --- a/src/main/java/com/example/solidconnection/entity/mapping/PostLike.java +++ b/src/main/java/com/example/solidconnection/entity/mapping/PostLike.java @@ -25,4 +25,4 @@ public class PostLike { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "site_user_id") private SiteUser siteUser; -} \ No newline at end of file +} diff --git a/src/main/java/com/example/solidconnection/type/PostCategory.java b/src/main/java/com/example/solidconnection/type/PostCategory.java index 33b40a116..b42b94f95 100644 --- a/src/main/java/com/example/solidconnection/type/PostCategory.java +++ b/src/main/java/com/example/solidconnection/type/PostCategory.java @@ -2,4 +2,4 @@ public enum PostCategory { 전체, 자유, 질문 -} \ No newline at end of file +}