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..dd178fb9c --- /dev/null +++ b/src/main/java/com/example/solidconnection/entity/Comment.java @@ -0,0 +1,42 @@ +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 java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@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..9a5e60069 --- /dev/null +++ b/src/main/java/com/example/solidconnection/entity/Post.java @@ -0,0 +1,54 @@ +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 java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@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..ddd866e38 --- /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; +} 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..5f1283c64 --- /dev/null +++ b/src/main/java/com/example/solidconnection/entity/common/BaseEntity.java @@ -0,0 +1,26 @@ +package com.example.solidconnection.entity.common; + +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; + +import java.time.LocalDateTime; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +@DynamicUpdate +@DynamicInsert +public abstract class BaseEntity { + + @CreatedDate + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; +} 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..feba376b8 --- /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; +} 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..b42b94f95 --- /dev/null +++ b/src/main/java/com/example/solidconnection/type/PostCategory.java @@ -0,0 +1,5 @@ +package com.example.solidconnection.type; + +public enum PostCategory { + 전체, 자유, 질문 +} 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() ); }