diff --git a/src/main/java/codesquad/ImsApplication.java b/src/main/java/codesquad/ImsApplication.java index 36d6a819..1b661b93 100644 --- a/src/main/java/codesquad/ImsApplication.java +++ b/src/main/java/codesquad/ImsApplication.java @@ -15,7 +15,7 @@ public static void main(String[] args) { /** - * Todo : Step4 ~ing + * Todo : Step5 ~ing * 1. html 자원들 중복 제거하면서 스타일이 제대로 안나오는 부분이 있다, 추후 중복 제거 다시해서 레이아웃이 제대로 나오도록 * 2. 회원가입/가입정보수정 시 유효하지 않은 값 입력하고 submit 시 어떤 경우에 alert, 어떤 경우에 오류페이지 나오는지 확인 후 개선 */ diff --git a/src/main/java/codesquad/domain/Milestone.java b/src/main/java/codesquad/domain/Milestone.java index d600f1ea..19bc9317 100644 --- a/src/main/java/codesquad/domain/Milestone.java +++ b/src/main/java/codesquad/domain/Milestone.java @@ -1,5 +1,6 @@ package codesquad.domain; +import codesquad.domain.issue.Issue; import org.hibernate.annotations.Where; import support.domain.AbstractEntity; diff --git a/src/main/java/codesquad/domain/issue/Comment.java b/src/main/java/codesquad/domain/issue/Comment.java new file mode 100644 index 00000000..d1dd2411 --- /dev/null +++ b/src/main/java/codesquad/domain/issue/Comment.java @@ -0,0 +1,110 @@ +package codesquad.domain.issue; + +import codesquad.CannotDeleteException; +import codesquad.UnAuthorizedException; +import codesquad.domain.ContentType; +import codesquad.domain.DeleteHistory; +import codesquad.domain.User; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import support.domain.AbstractEntity; + +import javax.persistence.*; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +@Entity +public class Comment extends AbstractEntity { + private static final Logger log = LoggerFactory.getLogger(Comment.class); + + @Size(min = 1) + @Lob + private String comment; + + @ManyToOne + @JoinColumn(foreignKey = @ForeignKey(name = "fk_comment_writer")) + private User writer; + + @ManyToOne + @JoinColumn(foreignKey = @ForeignKey(name = "fk_comment_issue")) + private Issue issue; + + private boolean deleted = false; + + public Comment() { + + } + + public Comment(User loginUser, Issue issue, String comment) { + this.writer = loginUser; + this.issue = issue; + this.comment = comment; + } + + public Comment update(User loginUser, String body) { + if (!isMatchWriter(loginUser)) { + throw new UnAuthorizedException(); + } + + this.comment = body; + return this; + } + + public List delete(User loginUser) { + if (!isMatchWriter(loginUser)) { + throw new CannotDeleteException("작성자만 삭제 가능합니다."); + } + this.deleted = true; + + List temp = new ArrayList<>(); + temp.add(new DeleteHistory(ContentType.COMMENT, getId(), writer)); + return temp; + } + + public boolean isMatchWriter(User loginUser) { + return this.writer.equals(loginUser); + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public boolean isDeleted() { + return deleted; + } + + public void setDeleted(boolean deleted) { + this.deleted = deleted; + } + + public User getWriter() { + return writer; + } + + public void setWriter(User writer) { + this.writer = writer; + } + + public Issue getIssue() { + return issue; + } + + public void setIssue(Issue issue) { + this.issue = issue; + } + + @Override + public String toString() { + return "Comment{" + + "id=" + getId() + + "comment='" + comment + '\'' + + ", writer=" + writer + + ", issue=" + issue + + '}'; + } +} diff --git a/src/main/java/codesquad/domain/issue/CommentRepository.java b/src/main/java/codesquad/domain/issue/CommentRepository.java new file mode 100644 index 00000000..23b1196c --- /dev/null +++ b/src/main/java/codesquad/domain/issue/CommentRepository.java @@ -0,0 +1,11 @@ +package codesquad.domain.issue; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface CommentRepository extends JpaRepository { + Iterable findByDeleted(boolean deleted); + + List findByIssue(long issueId); +} diff --git a/src/main/java/codesquad/domain/Issue.java b/src/main/java/codesquad/domain/issue/Issue.java similarity index 74% rename from src/main/java/codesquad/domain/Issue.java rename to src/main/java/codesquad/domain/issue/Issue.java index 3e823f97..e2b2a6d5 100644 --- a/src/main/java/codesquad/domain/Issue.java +++ b/src/main/java/codesquad/domain/issue/Issue.java @@ -1,7 +1,12 @@ -package codesquad.domain; +package codesquad.domain.issue; import codesquad.CannotDeleteException; import codesquad.UnAuthorizedException; +import codesquad.domain.*; +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.hibernate.annotations.Where; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import support.domain.AbstractEntity; import javax.persistence.*; @@ -12,6 +17,8 @@ @Entity public class Issue extends AbstractEntity { + private static final Logger log = LoggerFactory.getLogger(Issue.class); + @Size(min = 3, max = 100) @Column(nullable = false, length = 100) private String subject; @@ -29,12 +36,18 @@ public class Issue extends AbstractEntity { private User assignee; @ManyToOne - @JoinColumn(foreignKey = @ForeignKey(name = "fk_issue_to_milestone")) + @JoinColumn(foreignKey = @ForeignKey(name = "fk_issue_milestone")) private Milestone milestone; @ManyToMany private List