Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions src/main/java/com/example/solidconnection/entity/Board.java
Original file line number Diff line number Diff line change
@@ -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 {
Comment on lines +14 to +17
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💭 이것은 그냥 이전 코드에 대한 설명.. 반영하실 필요는 전혀 없습니다

빌더 패턴을 사용하셨네요! 지금 이전의 엔티티들을 보면 빌더 페턴을 사용하고 있지 않아서 이유를 말씀드려야 할 것 같아요.

저는 개인적으로 직접 생성자를 만들어주는 편이에요. 빌더 패턴은 인자를 명시적으로 전달할 수 있다는 점은 정말 편리하다고 생각하지만, 누락하는 인자가 있을 수 있다는 점이 치명적이라는 생각을 했어요. 그래서 이전 코드에서는 생성자를 만들어주었어요.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당부분은 인지하고 있습니다!
추가적인 생성자를 생성하지않고, 유연하게 대처할 수 있어서 주로 사용하였는데,
추후 리팩토링 단계에서 추가적인 생성자 사용을 고려해보도록 하겠습니다.


@Id
@Column(length = 20)
private String code;

@Column(nullable = false, length = 20)
private String koreanName;

@OneToMany(mappedBy = "board", cascade = CascadeType.ALL)
private List<Post> postList = new ArrayList<>();
}

42 changes: 42 additions & 0 deletions src/main/java/com/example/solidconnection/entity/Comment.java
Original file line number Diff line number Diff line change
@@ -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<Comment> commentList = new ArrayList<>();
}
54 changes: 54 additions & 0 deletions src/main/java/com/example/solidconnection/entity/Post.java
Original file line number Diff line number Diff line change
@@ -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<Comment> commentList = new ArrayList<>();

@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
private List<PostImage> postImageList = new ArrayList<>();

@OneToMany(mappedBy = "post", cascade = CascadeType.ALL)
private List<PostLike> postLikeList = new ArrayList<>();
}
25 changes: 25 additions & 0 deletions src/main/java/com/example/solidconnection/entity/PostImage.java
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -59,6 +57,15 @@ public class SiteUser {
@Setter
private LocalDate quitedAt;

@OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL)
private List<Post> postList = new ArrayList<>();

@OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL)
private List<Comment> commentList = new ArrayList<>();

@OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL)
private List<PostLike> postLikeList = new ArrayList<>();

public SiteUser(
String email,
String nickname,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.example.solidconnection.type;

public enum PostCategory {
전체, 자유, 질문
}
Original file line number Diff line number Diff line change
Expand Up @@ -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()
);
}

Expand Down