From 17279541c98fef54c058158e87ffe256d6cf9862 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 15 Jun 2021 19:24:19 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20(#47)=20=EC=9D=B4=EC=8A=88=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=ED=95=84=ED=84=B0=20=EA=B5=AC=ED=98=84=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../issue/CustomizedIssueRepository.java | 4 +- .../issue/CustomizedIssueRepositoryImpl.java | 67 +++++++++++-------- .../domain/user/UserRepository.java | 13 ++++ .../issuetracker/service/IssueService.java | 26 ++----- .../com/issuetracker/service/UserService.java | 20 +++++- .../com/issuetracker/web/UserController.java | 14 ++++ .../web/dto/response/AuthorsResponseDTO.java | 14 ++++ .../com/issuetracker/web/dto/vo/Assignee.java | 3 +- .../com/issuetracker/web/dto/vo/Author.java | 24 +++++++ .../com/issuetracker/web/dto/vo/Status.java | 1 + 10 files changed, 133 insertions(+), 53 deletions(-) create mode 100644 BE/src/main/java/com/issuetracker/web/dto/response/AuthorsResponseDTO.java create mode 100644 BE/src/main/java/com/issuetracker/web/dto/vo/Author.java diff --git a/BE/src/main/java/com/issuetracker/domain/issue/CustomizedIssueRepository.java b/BE/src/main/java/com/issuetracker/domain/issue/CustomizedIssueRepository.java index fda435f47..36dca1c36 100644 --- a/BE/src/main/java/com/issuetracker/domain/issue/CustomizedIssueRepository.java +++ b/BE/src/main/java/com/issuetracker/domain/issue/CustomizedIssueRepository.java @@ -6,7 +6,7 @@ public interface CustomizedIssueRepository { - List findAllIssuesFilteredBy(SearchRequestDTO searchRequest); + List findAllIssuesFilteredBySearchRequest(SearchRequestDTO searchRequest); -// List findAllIssuesFilteredBy(SearchRequest searchRequest); + long countIssueFilteredByStatusAndSearchRequest(String status, SearchRequestDTO searchRequest); } diff --git a/BE/src/main/java/com/issuetracker/domain/issue/CustomizedIssueRepositoryImpl.java b/BE/src/main/java/com/issuetracker/domain/issue/CustomizedIssueRepositoryImpl.java index 20c45a3f9..7a6ab9b11 100644 --- a/BE/src/main/java/com/issuetracker/domain/issue/CustomizedIssueRepositoryImpl.java +++ b/BE/src/main/java/com/issuetracker/domain/issue/CustomizedIssueRepositoryImpl.java @@ -1,10 +1,11 @@ package com.issuetracker.domain.issue; - +import com.issuetracker.domain.label.Label; import com.issuetracker.domain.user.User; import com.issuetracker.web.dto.reqeust.SearchRequestDTO; import com.issuetracker.web.dto.vo.Status; import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; @@ -22,7 +23,19 @@ public class CustomizedIssueRepositoryImpl implements CustomizedIssueRepository private final JPAQueryFactory queryFactory; - public List findAllIssuesFilteredBy(SearchRequestDTO searchRequest) { + public List findAllIssuesFilteredBySearchRequest(SearchRequestDTO searchRequest) { + return findAllIssuesFilteredByStatusAndSearchRequest(searchRequest.getStatus(), searchRequest); + } + + private List findAllIssuesFilteredByStatusAndSearchRequest(String status, SearchRequestDTO searchRequest) { + return findIssuesByStatusAndSearchRequest(status, searchRequest).limit(100).fetch(); + } + + public long countIssueFilteredByStatusAndSearchRequest(String status, SearchRequestDTO searchRequest) { + return findIssuesByStatusAndSearchRequest(status, searchRequest).fetchCount(); + } + + private JPAQuery findIssuesByStatusAndSearchRequest(String status, SearchRequestDTO searchRequest) { return queryFactory .select(issue) .distinct() @@ -31,38 +44,29 @@ public List findAllIssuesFilteredBy(SearchRequestDTO searchRequest) { .leftJoin(issue.labels, label) .leftJoin(issue.milestone, milestone) .leftJoin(issue.comments, comment1) - .where(statusEquals(searchRequest.getStatus()), + .where( + statusEquals(status), authorEquals(searchRequest.getAuthor()), -// labelEquals(labelName), + labelEquals(searchRequest.getLabel()), milestoneEquals(searchRequest.getMilestone()), assigneeEquals(searchRequest.getAssignee()), - commenterEquals(searchRequest.getCommenter())) - .limit(100) - .fetch(); - -// return queryFactory -// .selectFrom(issue) -// .where( -// statusEquals(searchRequest.getStatus()), -// authorEquals(searchRequest.getAuthor()), -// assigneeEquals(searchRequest.getAssignee()) -// ) -// .fetch(); + commenterEquals(searchRequest.getCommenter()) + ); } - public BooleanExpression statusEquals(String status) { + private BooleanExpression statusEquals(String status) { return hasText(status) ? issue.isOpen.eq(Status.statusToBoolean(status)) : null; } - public BooleanExpression authorEquals(String author) { + private BooleanExpression authorEquals(String author) { return hasText(author) ? user.userName.eq(author) : null; } - public BooleanExpression milestoneEquals(String milestoneTitle) { + private BooleanExpression milestoneEquals(String milestoneTitle) { return hasText(milestoneTitle) ? milestone.title.eq(milestoneTitle) : null; } - public BooleanExpression assigneeEquals(String assignee) { + private BooleanExpression assigneeEquals(String assignee) { if (!hasText(assignee)) { return null; } @@ -86,11 +90,20 @@ private User findByUserName(String userName) { .fetchFirst(); } -// public BooleanExpression commenterEquals(User commenter) { -// return commenter != null ? issue.comments.contains(commenter) : null; -// } -// -// public BooleanExpression labelEquals(List label) { -// return label!=null? -// } + public BooleanExpression labelEquals(List labels) { + if (labels.isEmpty()) { + return null; + } + List