Skip to content
Merged

Step5 #141

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
20 changes: 20 additions & 0 deletions src/main/java/codesquad/WebMvcConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,17 @@
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import support.converter.LocalDateConverter;
import support.converter.LocalDateTimeConverter;

import javax.servlet.Filter;
import java.nio.charset.Charset;
import java.util.List;

@Configuration
Expand Down Expand Up @@ -53,6 +58,21 @@ public LoginUserHandlerMethodArgumentResolver loginUserArgumentResolver() {
return new LoginUserHandlerMethodArgumentResolver();
}



@Bean
public Filter characterEncodingFilter() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
return characterEncodingFilter;

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.

이 filter는 스프링 부트에 이미 설정되어 있으니 굳이 추가하지 않아도 됨

}

@Bean
public HttpMessageConverter<String> responseBodyConverter() {
return new StringHttpMessageConverter(Charset.forName("UTF-8"));
}

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(loginUserArgumentResolver());
Expand Down
107 changes: 107 additions & 0 deletions src/main/java/codesquad/domain/Answer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package codesquad.domain;

import codesquad.CannotDeleteException;
import codesquad.UnAuthorizedException;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.slf4j.Logger;
import support.domain.AbstractEntity;

import javax.persistence.*;
import javax.validation.constraints.Size;

import java.util.ArrayList;
import java.util.List;

import static org.slf4j.LoggerFactory.getLogger;

@Entity
public class Answer extends AbstractEntity {
private static final Logger log = getLogger(Answer.class);

@Size(min = 2, max = 500)
@Column(nullable = false, length = 500)
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 Answer() {
}

public Answer(long id, @Size(min = 2, max = 500) String comment, User writer, Issue issue, boolean deleted) {
super(id);
this.comment = comment;
this.writer = writer;
this.issue = issue;
this.deleted = deleted;
}

public Answer(User loginUser, Issue issue, String newComment) {
this.writer = loginUser;
this.issue = issue;
this.comment = newComment;
}

public String getComment() {
return comment;
}

public void setComment(String comment) {
this.comment = comment;
}

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;
}

public boolean isDeleted() {
return deleted;
}

public void setDeleted(boolean deleted) {
this.deleted = deleted;
}

public void update(String update, User loginUser) {
if (!this.writer.equals(loginUser)) {
throw new UnAuthorizedException();
}
log.debug("update domain : {}", update);
this.comment = update;
}

public DeleteHistory delete(User loginUser) {
if (!this.writer.equals(loginUser)) {
throw new CannotDeleteException("다른사람의 답글을 지울수 없습니다.");
}
this.deleted = true;
return new DeleteHistory(ContentType.ANSWER, getId(), loginUser);
}

public static List<DeleteHistory> deleteAnswers(List<Answer> answers, User loginUser) {
List<DeleteHistory> answersInfo = new ArrayList<>();
for (Answer answer : answers) {
answersInfo.add(answer.delete(loginUser));
}
return answersInfo;
}
}
12 changes: 12 additions & 0 deletions src/main/java/codesquad/domain/AnswerRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package codesquad.domain;

import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface AnswerRepository extends CrudRepository<Answer, Long> {

Iterable<Answer> findByDeleted(boolean b);

List<Answer> findByIssueId(long id);
}
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, ANSWER
}
39 changes: 33 additions & 6 deletions src/main/java/codesquad/domain/Issue.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import codesquad.CannotDeleteException;
import codesquad.UnAuthorizedException;
import codesquad.dto.IssueDto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.hibernate.annotations.Where;
import support.domain.AbstractEntity;

import javax.persistence.*;
Expand Down Expand Up @@ -33,17 +35,21 @@ public class Issue extends AbstractEntity {
@JoinColumn(foreignKey = @ForeignKey(name = "fk_issue_label"))
private Label label;

@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_issue_assignee"))
private User assignee;

@OneToMany
@Where(clause = "deleted = false")
@JsonIgnore
@OrderBy("id ASC")
private List<Answer> answers = new ArrayList<>();

private boolean deleted = false;

public Issue() {
}

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

public Issue(long id, String subject, String comment) {
super(id);
this.subject = subject;
Expand Down Expand Up @@ -78,6 +84,22 @@ public void setComment(String comment) {
this.comment = comment;
}

public User getAssignee() {
return assignee;
}

public void setAssignee(User assignee) {
this.assignee = assignee;
}

public List<Answer> getAnswers() {
return answers;
}

public void setAnswers(List<Answer> answers) {
this.answers = answers;
}

public User getWriter() {
return writer;
}
Expand Down Expand Up @@ -144,11 +166,16 @@ public List<DeleteHistory> delete(User loginUser) {
throw new CannotDeleteException("작성자가 아니면 지울수 없습니다.");
}
this.deleted = true;
List<DeleteHistory> deletes = new ArrayList<>();
List<DeleteHistory> deletes = Answer.deleteAnswers(this.answers, loginUser);
deletes.add(new DeleteHistory(ContentType.ISSUE, getId(), writer));
return deletes;
}


public void addComment(Answer newComment) {
answers.add(newComment);
}

public boolean equalsQuestion(Issue issue) {
return this.subject.equals(issue.subject) && this.comment.equals(issue.comment);
}
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/codesquad/domain/Label.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package codesquad.domain;

import com.fasterxml.jackson.annotation.JsonIgnore;
import support.domain.AbstractEntity;

import javax.persistence.*;
Expand All @@ -11,10 +12,24 @@ public class Label extends AbstractEntity {
public Label() {
}

public Label(String name) {
this.name = name;
}

public Label(long id, String name) {
super(id);
this.name = name;
}

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

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

private String name;

public List<Issue> getIssue() {
Expand All @@ -32,4 +47,25 @@ public String getName() {
public void setName(String name) {
this.name = name;
}

public User getWriter() {
return writer;
}

public void setWriter(User writer) {
this.writer = writer;
}

public void writeBy(User user) {
this.writer = user;
}

@Override
public String toString() {
return "Label{" +
"issue=" + issue +
", writer=" + writer +
", name='" + name + '\'' +
'}';
}
}
19 changes: 19 additions & 0 deletions src/main/java/codesquad/domain/MileStoneOpen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package codesquad.domain;

import support.domain.AbstractEntity;

import javax.persistence.Entity;

@Entity
public class MileStoneOpen extends AbstractEntity {

private boolean open = false;

public boolean isOpen() {
return open;
}

public void setOpen(boolean open) {
this.open = open;
}
}
Loading