From 9d0c4c2dfa62ba2f4979c1e0dec73cef13db4237 Mon Sep 17 00:00:00 2001 From: JeongYong Park <66981851+23Yong@users.noreply.github.com> Date: Thu, 17 Aug 2023 12:17:04 +0900 Subject: [PATCH] =?UTF-8?q?[BE]=20=EC=9D=B4=EC=8A=88=20=EB=8B=A4=EC=A4=91?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=20=EB=B3=80=EA=B2=BD=20(#161)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: oauth 로그인을 위한 email 컬럼 추가 * feat: 이슈 다중 상태 변경 기능구현 --- .../issuetracker/application/IssueService.java | 6 ++++++ .../persistence/IssueRepository.java | 16 ++++++++++++++++ .../presentation/IssueController.java | 8 ++++++++ .../request/MultipleIssueModifyRequest.java | 14 ++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 backend/src/main/java/kr/codesquad/issuetracker/presentation/request/MultipleIssueModifyRequest.java diff --git a/backend/src/main/java/kr/codesquad/issuetracker/application/IssueService.java b/backend/src/main/java/kr/codesquad/issuetracker/application/IssueService.java index 2b7c0465d..bcad3ed80 100644 --- a/backend/src/main/java/kr/codesquad/issuetracker/application/IssueService.java +++ b/backend/src/main/java/kr/codesquad/issuetracker/application/IssueService.java @@ -19,6 +19,7 @@ import kr.codesquad.issuetracker.infrastructure.persistence.IssueRepository; import kr.codesquad.issuetracker.infrastructure.persistence.mapper.IssueDAO; import kr.codesquad.issuetracker.infrastructure.persistence.mapper.IssueSimpleMapper; +import kr.codesquad.issuetracker.presentation.converter.OpenState; import kr.codesquad.issuetracker.presentation.request.AssigneeRequest; import kr.codesquad.issuetracker.presentation.request.IssueLabelRequest; import kr.codesquad.issuetracker.presentation.request.IssueRegisterRequest; @@ -144,4 +145,9 @@ public void updateIssueMilestone(Integer issueId, Integer milestoneId) { issueRepository.updateIssueMilestone(issueId, milestoneId); } + + @Transactional + public void modifyMultipleIssueState(OpenState openState, List issueIds) { + issueRepository.updateAllIssue(openState, issueIds); + } } diff --git a/backend/src/main/java/kr/codesquad/issuetracker/infrastructure/persistence/IssueRepository.java b/backend/src/main/java/kr/codesquad/issuetracker/infrastructure/persistence/IssueRepository.java index 9ce2a8e8c..acc6af29c 100644 --- a/backend/src/main/java/kr/codesquad/issuetracker/infrastructure/persistence/IssueRepository.java +++ b/backend/src/main/java/kr/codesquad/issuetracker/infrastructure/persistence/IssueRepository.java @@ -1,5 +1,7 @@ package kr.codesquad.issuetracker.infrastructure.persistence; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -14,6 +16,7 @@ import org.springframework.stereotype.Repository; import kr.codesquad.issuetracker.domain.Issue; +import kr.codesquad.issuetracker.presentation.converter.OpenState; import kr.codesquad.issuetracker.presentation.response.IssueDetailResponse; @Repository @@ -111,4 +114,17 @@ public void updateIssueMilestone(Integer issueId, Integer milestoneId) { jdbcTemplate.update(sql, params); } + + public void updateAllIssue(OpenState openState, List issueIds) { + String sql = "UPDATE issue SET is_open = :openState WHERE id = :issueId"; + List params = new ArrayList<>(); + for (Integer issueId : issueIds) { + MapSqlParameterSource param = new MapSqlParameterSource(); + param + .addValue("openState", openState.isOpen()) + .addValue("issueId", issueId); + params.add(param); + } + jdbcTemplate.batchUpdate(sql, params.toArray(MapSqlParameterSource[]::new)); + } } diff --git a/backend/src/main/java/kr/codesquad/issuetracker/presentation/IssueController.java b/backend/src/main/java/kr/codesquad/issuetracker/presentation/IssueController.java index ae10482af..df26de10f 100644 --- a/backend/src/main/java/kr/codesquad/issuetracker/presentation/IssueController.java +++ b/backend/src/main/java/kr/codesquad/issuetracker/presentation/IssueController.java @@ -18,11 +18,13 @@ import kr.codesquad.issuetracker.infrastructure.persistence.mapper.IssueSimpleMapper; import kr.codesquad.issuetracker.presentation.auth.AuthPrincipal; import kr.codesquad.issuetracker.presentation.auth.Principal; +import kr.codesquad.issuetracker.presentation.converter.OpenState; import kr.codesquad.issuetracker.presentation.request.AssigneeRequest; import kr.codesquad.issuetracker.presentation.request.IssueLabelRequest; import kr.codesquad.issuetracker.presentation.request.IssueMilestoneRequest; import kr.codesquad.issuetracker.presentation.request.IssueModifyRequest; import kr.codesquad.issuetracker.presentation.request.IssueRegisterRequest; +import kr.codesquad.issuetracker.presentation.request.MultipleIssueModifyRequest; import kr.codesquad.issuetracker.presentation.response.IssueDetailResponse; import kr.codesquad.issuetracker.presentation.response.IssueDetailSidebarResponse; import kr.codesquad.issuetracker.presentation.response.Page; @@ -104,4 +106,10 @@ public ResponseEntity updateIssueMilestone(@PathVariable Integer issueId, return ResponseEntity.ok().build(); } + + @PutMapping + public ResponseEntity modifyStateOfMultipleIssue(@RequestBody MultipleIssueModifyRequest request) { + issueService.modifyMultipleIssueState(OpenState.of(request.getState()), request.getIssueIds()); + return ResponseEntity.ok().build(); + } } diff --git a/backend/src/main/java/kr/codesquad/issuetracker/presentation/request/MultipleIssueModifyRequest.java b/backend/src/main/java/kr/codesquad/issuetracker/presentation/request/MultipleIssueModifyRequest.java new file mode 100644 index 000000000..421e582fe --- /dev/null +++ b/backend/src/main/java/kr/codesquad/issuetracker/presentation/request/MultipleIssueModifyRequest.java @@ -0,0 +1,14 @@ +package kr.codesquad.issuetracker.presentation.request; + +import java.util.List; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class MultipleIssueModifyRequest { + + private String state; + private List issueIds; +}