Skip to content

Commit

Permalink
feat: 이슈 생성
Browse files Browse the repository at this point in the history
변환 과정 중 null 체크 로직 리팩토링 필요

#96
  • Loading branch information
Dae-Hwa committed Jun 23, 2021
1 parent 9af0646 commit da1350c
Show file tree
Hide file tree
Showing 14 changed files with 376 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ public class CommentResponse {
private Emojis emojis;

public static CommentResponse from(Comment comment) {
if (comment == null) {
return CommentResponse.builder().build();
}

return CommentResponse.builder()
.id(comment.getId())
.author(UserResponse.from(comment.getAuthor()))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.codesquad.issuetracker.issue.domain;

import com.codesquad.issuetracker.comment.vo.Emojis;
import com.codesquad.issuetracker.issue.dto.IssueRequest;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
Expand All @@ -18,4 +19,17 @@ public class Comment {
private String contents;
private LocalDateTime createDateTime;
private Emojis emojis;

public static Comment from(IssueRequest issueRequest) {
User author = User.builder().id(issueRequest.getAuthorId()).build();

String mainCommentContents = issueRequest.getMainCommentContents() != null ?
issueRequest.getMainCommentContents() : "";

return Comment.builder()
.author(author)
.contents(mainCommentContents)
.createDateTime(LocalDateTime.now())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.codesquad.issuetracker.issue.domain;

import lombok.Data;
import org.springframework.util.CollectionUtils;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Expand All @@ -17,6 +19,10 @@ public static Comments of(Comment... comments) {
}

public Stream<Comment> stream() {
return comments.stream();
return comments != null ? comments.stream() : Collections.<Comment>emptyList().stream();
}

public boolean isEmpty() {
return CollectionUtils.isEmpty(comments);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.codesquad.issuetracker.issue.domain;

import com.codesquad.issuetracker.issue.dto.IssueRequest;
import com.codesquad.issuetracker.label.domain.Labels;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand All @@ -25,6 +26,17 @@ public class Issue {
private Comment mainComment;
private Comments comments;

public static Issue from(IssueRequest issueRequest) {
return Issue.builder()
.title(issueRequest.getTitle())
.author(issueRequest.author())
.mainComment(Comment.from(issueRequest))
.assignees(issueRequest.assignees())
.labels(issueRequest.labels())
.milestone(issueRequest.milestone())
.build();
}

public String description() {
return getMainComment().getContents();
}
Expand All @@ -33,4 +45,16 @@ public boolean hasSameAuthorComments(User user) {
return comments != null && comments.stream()
.anyMatch(comment -> comment.getAuthor().equals(user));
}

public boolean hasComments() {
return comments != null && !comments.isEmpty();
}

public boolean hasAssignee() {
return assignees != null && !assignees.isEmpty();
}

public boolean hasMilestone() {
return milestone != null;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.codesquad.issuetracker.issue.domain;

import lombok.Data;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.stream.Stream;
Expand All @@ -12,4 +13,8 @@ public class Users {
public Stream<User> stream() {
return users.stream();
}

public boolean isEmpty() {
return CollectionUtils.isEmpty(users);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,25 @@ public class IssueDetailResponse {
private CommentResponses comments;

public static IssueDetailResponse from(Issue issue) {
return IssueDetailResponse.builder()
.id(issue.getId())
.number(issue.getNumber())
.title(issue.getTitle())
.isClosed(issue.isClosed())
.createDateTime(issue.getCreateDateTime())
.author(UserResponse.from(issue.getAuthor()))
.assignees(UserResponses.from(issue.getAssignees()))
.labels(LabelResponses.from(issue.getLabels()))
.milestone(MilestoneResponse.from(issue.getMilestone()))
.mainComment(CommentResponse.from(issue.getMainComment()))
.comments(CommentResponses.from(issue.getComments()))
.build();
IssueDetailResponseBuilder issueDetailResponseBuilder = IssueDetailResponse.builder()
.id(issue.getId())
.number(issue.getNumber())
.title(issue.getTitle())
.isClosed(issue.isClosed())
.createDateTime(issue.getCreateDateTime())
.author(UserResponse.from(issue.getAuthor()))
.assignees(UserResponses.from(issue.getAssignees()))
.labels(LabelResponses.from(issue.getLabels()))
.mainComment(CommentResponse.from(issue.getMainComment()));

if (issue.hasComments()) {
issueDetailResponseBuilder.comments(CommentResponses.from(issue.getComments()));
}

if (issue.hasMilestone()) {
issueDetailResponseBuilder.milestone(MilestoneResponse.from(issue.getMilestone()));
}

return issueDetailResponseBuilder.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
package com.codesquad.issuetracker.issue.dto;

import com.codesquad.issuetracker.issue.domain.Milestone;
import com.codesquad.issuetracker.issue.domain.User;
import com.codesquad.issuetracker.issue.domain.Users;
import com.codesquad.issuetracker.label.domain.Label;
import com.codesquad.issuetracker.label.domain.Labels;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IssueRequest {
@NotEmpty
private String title;
Expand All @@ -19,4 +33,32 @@ public class IssueRequest {
private Set<Long> assigneeIds;
private Set<Long> labelIds;
private Long milestoneId;

public User author() {
return User.builder().id(authorId).build();
}

public Users assignees() {
List<User> assignees = assigneeIds != null ?
assigneeIds.stream()
.map(assigneeId -> User.builder().id(assigneeId).build())
.collect(Collectors.toList()) :
Collections.emptyList();

return Users.from(assignees);
}

public Labels labels() {
List<Label> labels = labelIds != null ?
labelIds.stream()
.map(labelId -> Label.builder().id(labelId).build())
.collect(Collectors.toList()) :
Collections.emptyList();

return Labels.from(labels);
}

public Milestone milestone() {
return Milestone.builder().id(milestoneId).build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,9 @@ public Issues readAll() {
public Optional<Issue> readById(long id) {
return null;
}

@Override
public Issue save(Issue issue) {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@

import com.codesquad.issuetracker.issue.domain.Issue;
import com.codesquad.issuetracker.issue.domain.Issues;
import com.codesquad.issuetracker.issue.dto.IssueResponse;

import java.util.Optional;

public interface IssueRepository {
Issues readAll();

Optional<Issue> readById(long id);

Issue save(Issue issue);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.codesquad.issuetracker.issue.domain.Issues;
import com.codesquad.issuetracker.issue.domain.User;
import com.codesquad.issuetracker.issue.dto.IssueDetailResponse;
import com.codesquad.issuetracker.issue.dto.IssueRequest;
import com.codesquad.issuetracker.issue.dto.IssueResponses;
import com.codesquad.issuetracker.issue.repository.IssueRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -28,4 +29,10 @@ public IssueDetailResponse readOne(long id) {

return IssueDetailResponse.from(issue);
}

public IssueDetailResponse create(IssueRequest issueRequest) {
Issue issueForSave = Issue.from(issueRequest);

return IssueDetailResponse.from(issueRepository.save(issueForSave));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.codesquad.issuetracker.label.domain;

import lombok.Data;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.Arrays;
Expand All @@ -11,11 +12,15 @@
public class Labels {
private final List<Label> labels;

public static Labels of(Label ... labels) {
public static Labels of(Label... labels) {
return from(new ArrayList<>(Arrays.asList(labels)));
}

public Stream<Label> stream() {
return labels.stream();
}

public boolean isEmpty() {
return CollectionUtils.isEmpty(labels);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.codesquad.issuetracker.label.dto;

import com.fasterxml.jackson.annotation.JsonValue;
import com.codesquad.issuetracker.label.domain.Labels;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Data;

import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
Expand All @@ -19,8 +20,12 @@ public static LabelResponses from(Collection<LabelResponse> labelResponses) {
return new LabelResponses(new HashSet<>(labelResponses));
}

public static LabelResponses from(Labels labelEntities) {
Set<LabelResponse> labelResponses = labelEntities.stream()
public static LabelResponses from(Labels labels) {
if (labels.isEmpty()) {
return LabelResponses.from(Collections.emptyList());
}

Set<LabelResponse> labelResponses = labels.stream()
.map(LabelResponse::from)
.collect(Collectors.toSet());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.Data;

import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
Expand All @@ -20,10 +21,14 @@ public static UserResponses from(Collection<UserResponse> userResponses) {
}

public static UserResponses from(Users users) {
if (users == null || users.isEmpty()) {
return UserResponses.from(Collections.emptySet());
}

Set<UserResponse> userResponses = users.stream()
.map(UserResponse::from)
.collect(Collectors.toSet());

return new UserResponses(userResponses);
return UserResponses.from(userResponses);
}
}
Loading

0 comments on commit da1350c

Please sign in to comment.