Skip to content
Merged

Step4 #131

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
2 changes: 1 addition & 1 deletion src/main/java/codesquad/domain/ContentType.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package codesquad.domain;

public enum ContentType {
Issue;
ISSUE
}
39 changes: 0 additions & 39 deletions src/main/java/codesquad/domain/DeleteHIstory.java

This file was deleted.

51 changes: 51 additions & 0 deletions src/main/java/codesquad/domain/DeleteHistory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package codesquad.domain;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
public class DeleteHistory {

@Id
@GeneratedValue
private Long id;

@Enumerated(EnumType.STRING)
private ContentType contentType;

private Long contentId;

@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_deletehistory_to_user"))
private User deletedByUser;

private LocalDateTime createDate = LocalDateTime.now();


public DeleteHistory() {
}

public DeleteHistory(ContentType contentType, Long contentId, User deletedByUser, LocalDateTime createDate) {
this.contentType = contentType;
this.contentId = contentId;
this.deletedByUser = deletedByUser;
this.createDate = createDate;
}

public DeleteHistory(ContentType contentType, Long contentId, User deletedByUser) {
this.contentType = contentType;
this.contentId = contentId;
this.deletedByUser = deletedByUser;
}

@Override
public String toString() {
return "DeleteHistory{" +
"id=" + id +
", contentType=" + contentType +
", contentId=" + contentId +
", deletedByUser=" + deletedByUser +
", createDate=" + createDate +
'}';
}
}
3 changes: 1 addition & 2 deletions src/main/java/codesquad/domain/DeleteHistoryRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,5 @@

import org.springframework.data.repository.CrudRepository;

public interface DeleteHistoryRepository extends CrudRepository<DeleteHIstory, Long> {

public interface DeleteHistoryRepository extends CrudRepository<DeleteHistory, Long> {
}
96 changes: 85 additions & 11 deletions src/main/java/codesquad/domain/Issue.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import javax.persistence.*;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;

@Entity
public class Issue extends AbstractEntity {
Expand All @@ -20,28 +22,44 @@ public class Issue extends AbstractEntity {
private String comment;

@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_Issue_writter"))
@JoinColumn(foreignKey = @ForeignKey(name = "fk_issue_writer"))
private User writer;

@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_issue_milestone"))
private Milestone milestone;

@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_issue_label"))
private Label label;


private boolean deleted = false;

public Issue() {
}

public Issue(String subject, String content) {
public Issue(String subject, String comment) {
this.subject = subject;
this.comment = content;
this.comment = comment;
}

public Issue(String subject, String comment, User writer) {
this(0L, subject, comment, writer);
public Issue(long id, String subject, String comment) {
super(id);
this.subject = subject;
this.comment = comment;
}

public Issue(String subject, String comment, User writer, boolean deleted) {
this(0L, subject, comment, writer, deleted);
}

public Issue(long id, String subject, String content, User writer) {
public Issue(long id, String subject, String content, User writer, boolean deleted) {
super(id);
this.subject = subject;
this.comment = content;
this.writer = writer;
this.deleted = deleted;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

생성자를 인스턴스 변수의 수 만큼 생성하고 있는데 좋은 방법은 아님
반드시 필요한 생성자만 추가할 것을 추천

}

public String getSubject() {
Expand Down Expand Up @@ -76,13 +94,29 @@ public void setDeleted(boolean deleted) {
this.deleted = deleted;
}

public Milestone getMilestone() {
return milestone;
}

public void setMilestone(Milestone milestone) {
this.milestone = milestone;
}

public Label getLabel() {
return label;
}

public void setLabel(Label label) {
this.label = label;
}

public void update(User loginUser, Issue toIssue) {
if (!matchWriter(loginUser)) {
throw new UnAuthorizedException();
}

if (!matchPassord(loginUser.getPassword())) {
return;
throw new UnAuthorizedException();
}
this.subject = toIssue.subject;
this.comment = toIssue.comment;
Expand All @@ -105,11 +139,51 @@ public IssueDto _toIssueDto() {
return new IssueDto(this.subject, this.comment, this.writer);
}

public DeleteHIstory delete(User loginUser) {
if (!this.writer.equals(loginUser)) {
throw new CannotDeleteException("본인외의 정보는 삭제할수 없습니다.");
public List<DeleteHistory> delete(User loginUser) {
if (!matchWriter(loginUser)) {
throw new CannotDeleteException("작성자가 아니면 지울수 없습니다.");
}
this.deleted = true;
return new DeleteHIstory(ContentType.Issue, getId(), loginUser);
List<DeleteHistory> deletes = new ArrayList<>();
deletes.add(new DeleteHistory(ContentType.ISSUE, getId(), writer));
return deletes;
}

public boolean equalsQuestion(Issue issue) {
return this.subject.equals(issue.subject) && this.comment.equals(issue.comment);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;

Issue issue = (Issue) o;

if (deleted != issue.deleted) return false;
if (subject != null ? !subject.equals(issue.subject) : issue.subject != null) return false;
if (comment != null ? !comment.equals(issue.comment) : issue.comment != null) return false;
return writer != null ? writer.equals(issue.writer) : issue.writer == null;
}

@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + (subject != null ? subject.hashCode() : 0);
result = 31 * result + (comment != null ? comment.hashCode() : 0);
result = 31 * result + (writer != null ? writer.hashCode() : 0);
result = 31 * result + (deleted ? 1 : 0);
return result;
}

@Override
public String toString() {
return "Issue{" +
"subject='" + subject + '\'' +
", comment='" + comment + '\'' +
", writer=" + writer +
", deleted=" + deleted +
'}';
}
}
3 changes: 1 addition & 2 deletions src/main/java/codesquad/domain/IssueRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,5 @@
import org.springframework.data.jpa.repository.JpaRepository;

public interface IssueRepository extends JpaRepository<Issue, Long> {

Iterable<Issue> findByDelete(boolean b);
Iterable<Issue> findByDeleted(boolean b);
}
35 changes: 35 additions & 0 deletions src/main/java/codesquad/domain/Label.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package codesquad.domain;

import support.domain.AbstractEntity;

import javax.persistence.*;
import java.util.List;

@Entity
public class Label extends AbstractEntity {

public Label() {
}

@OneToMany(mappedBy = "label")
@OrderBy("id ASC")
private List<Issue> issue;

private String name;

public List<Issue> getIssue() {
return issue;
}

public void setIssue(List<Issue> issue) {
this.issue = issue;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
6 changes: 6 additions & 0 deletions src/main/java/codesquad/domain/LabelRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package codesquad.domain;

import org.springframework.data.jpa.repository.JpaRepository;

public interface LabelRepository extends JpaRepository<Label, Long> {
}
Loading