Skip to content
Merged

Step3 #130

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: 2 additions & 0 deletions src/main/java/codesquad/WebMvcConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.core.Ordered;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import support.converter.LocalDateConverter;
import support.converter.LocalDateTimeConverter;
Expand Down
86 changes: 63 additions & 23 deletions src/main/java/codesquad/domain/Issue.java
Original file line number Diff line number Diff line change
@@ -1,51 +1,91 @@
package codesquad.domain;

import codesquad.UnAuthorizedException;
import codesquad.dto.IssueDto;
import org.slf4j.Logger;
import support.domain.AbstractEntity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.*;
import javax.validation.constraints.Size;

import static org.slf4j.LoggerFactory.getLogger;

@Entity
public class Issue extends AbstractEntity {

@Size(min = 3, max = 80)
@Column(nullable = false, length = 80)
private String subject;
private static final Logger log = getLogger(Issue.class);

@Embedded
private IssueBody issueBody;

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

@Size(min = 3)
@Lob
@Column(nullable = false)
private String comment;
private boolean deleted = false;

public Issue() {
}

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

public Issue(User loginUser, IssueBody issueBody) {
this.writer = loginUser;
this.issueBody = issueBody;

}

public IssueBody getIssueBody() {
return issueBody;
}

public void setIssueBody(IssueBody issueBody) {
this.issueBody = issueBody;
}

public User getWriter() {
return writer;
}

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

public String getSubject() {
return subject;
public boolean isDeleted() {
return deleted;
}

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

public String getComment() {
return comment;
public void writeBy(User loginUser) {
this.writer = loginUser;
}

public void setComment(String comment) {
this.comment = comment;
public boolean isOwner(User loginUser) {
return writer.equals(loginUser);
}

public IssueDto _toIssueDto() {
return new IssueDto(this.subject, this.comment);
return new IssueDto(this.issueBody);
}

public void update(User loginUser, IssueBody target) {
if (!isOwner(loginUser)) {
throw new UnAuthorizedException();
}
this.issueBody = target;
}

public void delete(User loginUser) {
log.debug("loginUser : {}", loginUser);
log.debug("writer : {}", writer);
if (!isOwner(loginUser)) {
throw new UnAuthorizedException();
}
this.deleted = true;
}
}
65 changes: 65 additions & 0 deletions src/main/java/codesquad/domain/IssueBody.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package codesquad.domain;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Lob;
import javax.validation.constraints.Size;
import java.util.Objects;

@Embeddable
public class IssueBody {
@Size(min = 3, max = 80)
@Column(nullable = false, length = 80)
private String subject;

@Size(min = 3)
@Lob
@Column(nullable = false)
private String comment;

public IssueBody() {
}

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

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}

public String getComment() {
return comment;
}

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

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
IssueBody issueBody = (IssueBody) o;
return Objects.equals(subject, issueBody.subject) &&
Objects.equals(comment, issueBody.comment);
}

@Override
public int hashCode() {
return Objects.hash(subject, comment);
}

@Override
public String toString() {
return "IssueBody{" +
"subject='" + subject + '\'' +
", comment='" + comment + '\'' +
'}';
}
}
1 change: 0 additions & 1 deletion src/main/java/codesquad/domain/IssueRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,4 @@
import java.util.Optional;

public interface IssueRepository extends JpaRepository<Issue, Long> {
Optional<Issue> findBySubject(String subject);
}
17 changes: 17 additions & 0 deletions src/main/java/codesquad/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,21 @@
import codesquad.UnAuthorizedException;
import codesquad.dto.UserDto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import support.domain.AbstractEntity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.validation.constraints.Size;
import java.util.Objects;

@Entity
public class User extends AbstractEntity {
public static final GuestUser GUEST_USER = new GuestUser();

@Size(min = 3, max = 20)
@Column(unique = true, nullable = false, length = 20)
@JsonProperty
private String userId;

@Size(min = 6, max = 20)
Expand Down Expand Up @@ -107,4 +110,18 @@ public boolean isGuestUser() {
public String toString() {
return "User [userId=" + userId + ", password=" + password + ", name=" + name + "]";
}

@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;
User user = (User) o;
return Objects.equals(userId, user.userId);
}

@Override
public int hashCode() {
return Objects.hash(super.hashCode(), userId);
}
}
40 changes: 14 additions & 26 deletions src/main/java/codesquad/dto/IssueDto.java
Original file line number Diff line number Diff line change
@@ -1,65 +1,53 @@
package codesquad.dto;

import codesquad.domain.Issue;
import codesquad.domain.IssueBody;

import javax.persistence.Embedded;
import javax.validation.constraints.Size;
import java.util.Objects;

public class IssueDto {
@Size(min = 3, max = 80)
private String subject;

@Size(min = 3)
private String comment;
@Embedded
private IssueBody issueBody;

public IssueDto() {
}

public IssueDto(String subject, String comment) {
public IssueDto(IssueBody issueBody) {
super();
this.subject = subject;
this.comment = comment;
}

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
this.issueBody = issueBody;
}

public String getComment() {
return comment;
public IssueBody getIssueBody() {
return issueBody;
}

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

public Issue _toIssue() {
return new Issue(this.subject, this.comment);
return new Issue(this.issueBody);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
IssueDto issueDto = (IssueDto) o;
return Objects.equals(subject, issueDto.subject) &&
Objects.equals(comment, issueDto.comment);
return Objects.equals(issueBody, issueDto.issueBody);
}

@Override
public int hashCode() {
return Objects.hash(subject, comment);
return Objects.hash(issueBody);
}

@Override
public String toString() {
return "IssueDto{" +
"subject='" + subject + '\'' +
", comment='" + comment + '\'' +
"issueBody=" + issueBody +
'}';
}
}
21 changes: 19 additions & 2 deletions src/main/java/codesquad/dto/UserDto.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package codesquad.dto;

import codesquad.domain.User;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;

import javax.validation.constraints.Size;
import java.util.Objects;
Expand Down Expand Up @@ -52,7 +54,7 @@ public void setName(String name) {
public User _toUser() {
return new User(this.userId, this.password, this.name);
}

/*
@Override
public int hashCode() {
final int prime = 31;
Expand All @@ -63,7 +65,6 @@ public int hashCode() {
return result;
}


@Override
public boolean equals(Object obj) {
if (this == obj)
Expand All @@ -90,6 +91,22 @@ public boolean equals(Object obj) {
return false;
return true;
}
*/

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserDto userDto = (UserDto) o;
return Objects.equals(userId, userDto.userId) &&
Objects.equals(password, userDto.password) &&
Objects.equals(name, userDto.name);
}

@Override
public int hashCode() {
return Objects.hash(userId, password, name);
}

@Override
public String toString() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package codesquad.security;

import codesquad.UnAuthenticationException;
import codesquad.UnAuthorizedException;
import codesquad.domain.User;
import org.springframework.core.MethodParameter;
Expand All @@ -24,7 +25,7 @@ public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer m

LoginUser loginUser = parameter.getParameterAnnotation(LoginUser.class);
if (loginUser.required()) {
throw new UnAuthorizedException("You're required Login!");
throw new UnAuthenticationException("You're required Login!");
}
return user;
}
Expand Down
Loading