From 12c4da5cee1691894d8c34d97a6eb20b98682124 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Mon, 21 Oct 2024 08:26:48 +0900 Subject: [PATCH 1/5] =?UTF-8?q?Feat:=20Entity=EC=97=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EC=A0=95=EB=B3=B4=20=EA=B5=AC=ED=98=84=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20DTO,=20Repository=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 추가된 기능: - Entity : 몇개의 컬럼들과 생성자가 추가됨 - DTO : 추가된 Entity의 컬럼들을 저장하기 위해 Controller에서 입력받을 수 있도록 필드 추가 - Repository: 추가된 컬럼들로 Entity를 조회할 수 있는 메서드 구현 --- .../request/dto/RequestRegistRequestDTO.java | 17 ++++++- .../request/dto/RequestUpdateRequestDTO.java | 9 ++++ .../request/entity/Request.java | 44 +++++++++++++++++++ .../request/repository/RequestRepository.java | 23 ++++++++++ 4 files changed, 92 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestRegistRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestRegistRequestDTO.java index 0b9b469..0a31fab 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestRegistRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestRegistRequestDTO.java @@ -1,6 +1,12 @@ package com.mtvs.devlinkbackend.request.dto; +import jakarta.persistence.Column; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; import lombok.*; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; import java.time.LocalDateTime; @@ -9,8 +15,17 @@ @NoArgsConstructor @ToString public class RequestRegistRequestDTO { + private String workScope; + private String workType; + private String progressClassification; + private String companyName; private String title; private String content; + private Integer requiredClient; + private Integer requiredServer; + private Integer requiredDesign; + private Integer requiredPlanner; + private Integer requiredAIEngineer; private LocalDateTime startDateTime; private LocalDateTime endDateTime; -} +} \ No newline at end of file diff --git a/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestUpdateRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestUpdateRequestDTO.java index 44d91ce..e65248b 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestUpdateRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestUpdateRequestDTO.java @@ -11,8 +11,17 @@ @ToString public class RequestUpdateRequestDTO { private Long requestId; + private String workScope; + private String workType; + private String progressClassification; + private String companyName; private String title; private String content; + private Integer requiredClient; + private Integer requiredServer; + private Integer requiredDesign; + private Integer requiredPlanner; + private Integer requiredAIEngineer; private LocalDateTime startDateTime; private LocalDateTime endDateTime; } \ No newline at end of file diff --git a/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java b/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java index ad9e334..c4a4288 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java @@ -24,12 +24,39 @@ public class Request { @Column(name = "REQUEST_ID") private Long requestId; + @Column(name = "WORK_SCOPE") + private String workScope; + + @Column(name = "WORK_TYPE") + private String workType; + + @Column(name = "PROGRESS_CLASSIFICATION") + private String progressClassification; + + @Column(name = "COMPANY_NAME") + private String companyName; + @Column(name = "TITLE", nullable = false) private String title; @Column(name = "CONTENT", nullable = false) private String content; + @Column(name = "REQUIRED_CLIENT") + private Integer requiredClient; + + @Column(name = "REQUIRED_SERVER") + private Integer requiredServer; + + @Column(name = "REQUIRED_DESIGN") + private Integer requiredDesign; + + @Column(name = "REQUIRED_PLANNER") + private Integer requiredPlanner; + + @Column(name = "REQUIRED_AIENGINEER") + private Integer requiredAIEngineer; + @Column(name = "START_DATETIME") private LocalDateTime startDateTime; @@ -59,6 +86,23 @@ public Request(String title, String content, LocalDateTime startDateTime, LocalD this.accountId = accountId; } + public Request(String workScope, String workType, String progressClassification, String companyName, String title, String content, Integer requiredClient, Integer requiredServer, Integer requiredDesign, Integer requiredPlanner, Integer requiredAIEngineer, LocalDateTime startDateTime, LocalDateTime endDateTime, String accountId) { + this.workScope = workScope; + this.workType = workType; + this.progressClassification = progressClassification; + this.companyName = companyName; + this.title = title; + this.content = content; + this.requiredClient = requiredClient; + this.requiredServer = requiredServer; + this.requiredDesign = requiredDesign; + this.requiredPlanner = requiredPlanner; + this.requiredAIEngineer = requiredAIEngineer; + this.startDateTime = startDateTime; + this.endDateTime = endDateTime; + this.accountId = accountId; + } + public void setTitle(String title) { this.title = title; } diff --git a/src/main/java/com/mtvs/devlinkbackend/request/repository/RequestRepository.java b/src/main/java/com/mtvs/devlinkbackend/request/repository/RequestRepository.java index c8a2675..9db8ac2 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/repository/RequestRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/repository/RequestRepository.java @@ -13,9 +13,32 @@ public interface RequestRepository extends JpaRepository { List findRequestsByAccountId(String accountId); + List findRequestsByWorkScope(String workScope); + + List findRequestsByWorkType(String workType); + + List findRequestsByProgressClassification(String progressClassification); + + List findRequestsByTitleContainingIgnoreCase(String title); + @Query("SELECT r FROM Request r WHERE r.startDateTime BETWEEN :startDateTime AND :endDateTime " + "AND r.endDateTime BETWEEN :startDateTime AND :endDateTime") List findRequestsWithinDateRange( @Param("startDateTime") LocalDateTime startDateTime, @Param("endDateTime") LocalDateTime endDateTime); + + // required 값들이 넘겨준 값보다 큰 row를 조회하는 쿼리 + @Query("SELECT r FROM Request r WHERE " + + "(:requiredClient IS NULL OR r.requiredClient > :requiredClient) AND " + + "(:requiredServer IS NULL OR r.requiredServer > :requiredServer) AND " + + "(:requiredDesign IS NULL OR r.requiredDesign > :requiredDesign) AND " + + "(:requiredPlanner IS NULL OR r.requiredPlanner > :requiredPlanner) AND " + + "(:requiredAIEngineer IS NULL OR r.requiredAIEngineer > :requiredAIEngineer)") + List findRequestsWithLargerRequirements( + @Param("requiredClient") Integer requiredClient, + @Param("requiredServer") Integer requiredServer, + @Param("requiredDesign") Integer requiredDesign, + @Param("requiredPlanner") Integer requiredPlanner, + @Param("requiredAIEngineer") Integer requiredAIEngineer + ); } From 4ac7e8aa5fa1f7beb89abe987c718eccf8059a28 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Mon, 21 Oct 2024 09:16:55 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20Repository=EC=97=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=EB=90=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20Service=20=EB=A9=94=EC=84=9C=EB=93=9C,=20C?= =?UTF-8?q?ontroller=20=EB=A7=A4=ED=95=91=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 추가된 기능: - Service: 추가로 구현된 Repository 조회 메서드를 사용하는 Service 메서드 생성 - Controller: 추가된 Service 메서드와 매핑되는 Controller 메서드 추가 --- .../request/controller/RequestController.java | 59 +++++++++++++++++++ .../request/entity/Request.java | 32 ++++++++++ .../request/service/RequestService.java | 44 +++++++++++++- 3 files changed, 134 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java b/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java index b968fa3..7f77c38 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java @@ -70,6 +70,50 @@ public ResponseEntity> getRequestsByAccountId( return ResponseEntity.ok(requests); } + @Operation(summary = "업무 범위별 의뢰 목록 조회", description = "특정 업무 범위에 대한 모든 의뢰를 조회합니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨") + }) + @GetMapping("/work-scope") + public ResponseEntity> getRequestsByWorkScope(@RequestParam String workScope) { + + List requests = requestService.findRequestsByWorkScope(workScope); + return ResponseEntity.ok(requests); + } + + @Operation(summary = "근무 형태별 의뢰 목록 조회", description = "근무 형태 범위에 대한 모든 의뢰를 조회합니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨") + }) + @GetMapping("/work-type") + public ResponseEntity> getRequestsByWorkType(@RequestParam String workType) { + + List requests = requestService.findRequestsByWorkType(workType); + return ResponseEntity.ok(requests); + } + + @Operation(summary = "진행 분류별 의뢰 목록 조회", description = "진행 분류 범위에 대한 모든 의뢰를 조회합니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨") + }) + @GetMapping("/progress-classfication") + public ResponseEntity> getRequestsByProgressClassification(@RequestParam String progressClassification) { + + List requests = requestService.findRequestsByProgressClassification(progressClassification); + return ResponseEntity.ok(requests); + } + + @Operation(summary = "프로젝트 주제(제목)별 의뢰 목록 조회", description = "프로젝트 주제(제목) 범위에 대한 모든 의뢰를 조회합니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨") + }) + @GetMapping("/title") + public ResponseEntity> getRequestsByTitleContainingIgnoreCase(@RequestParam String title) { + + List requests = requestService.findRequestsByTitleContainingIgnoreCase(title); + return ResponseEntity.ok(requests); + } + @Operation(summary = "특정 기간 내의 의뢰 목록 조회", description = "시작과 끝 날짜 사이의 모든 의뢰를 조회합니다.") @ApiResponses({ @ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨") @@ -83,6 +127,21 @@ public ResponseEntity> getRequestsBetweenDates( return ResponseEntity.ok(requests); } + @Operation(summary = "원하는 직군별 의뢰 목록 조회", description = "원하는 직군 숫자보다 많이 모집하는 모든 의뢰를 조회합니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨") + }) + @GetMapping("/required") + public ResponseEntity> getRequestsByTitleContainingIgnoreCase( + @RequestParam int requiredClient, @RequestParam int requiredServer, @RequestParam int requiredDesign, + @RequestParam int requiredPlanner, @RequestParam int requiredAIEngineer) { + + List requests = requestService.findRequestsWithLargerRequirements( + requiredClient, requiredServer, requiredDesign, requiredPlanner, requiredAIEngineer + ); + return ResponseEntity.ok(requests); + } + @Operation(summary = "의뢰 업데이트", description = "기존 의뢰를 업데이트합니다.") @ApiResponses({ @ApiResponse(responseCode = "200", description = "의뢰가 성공적으로 업데이트됨"), diff --git a/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java b/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java index c4a4288..bbc27a1 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java @@ -103,6 +103,38 @@ public Request(String workScope, String workType, String progressClassification, this.accountId = accountId; } + public void setWorkScope(String workScope) { + this.workScope = workScope; + } + + public void setWorkType(String workType) { + this.workType = workType; + } + + public void setProgressClassification(String progressClassification) { + this.progressClassification = progressClassification; + } + + public void setRequiredClient(Integer requiredClient) { + this.requiredClient = requiredClient; + } + + public void setRequiredServer(Integer requiredServer) { + this.requiredServer = requiredServer; + } + + public void setRequiredDesign(Integer requiredDesign) { + this.requiredDesign = requiredDesign; + } + + public void setRequiredPlanner(Integer requiredPlanner) { + this.requiredPlanner = requiredPlanner; + } + + public void setRequiredAIEngineer(Integer requiredAIEngineer) { + this.requiredAIEngineer = requiredAIEngineer; + } + public void setTitle(String title) { this.title = title; } diff --git a/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java b/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java index eaa46d6..00eb3d5 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java @@ -22,8 +22,17 @@ public RequestService(RequestRepository requestRepository) { @Transactional public Request registRequest(RequestRegistRequestDTO requestRegistRequestDTO, String accountId) { return requestRepository.save(new Request( + requestRegistRequestDTO.getWorkScope(), + requestRegistRequestDTO.getWorkType(), + requestRegistRequestDTO.getProgressClassification(), + requestRegistRequestDTO.getCompanyName(), requestRegistRequestDTO.getTitle(), requestRegistRequestDTO.getContent(), + requestRegistRequestDTO.getRequiredClient(), + requestRegistRequestDTO.getRequiredServer(), + requestRegistRequestDTO.getRequiredDesign(), + requestRegistRequestDTO.getRequiredPlanner(), + requestRegistRequestDTO.getRequiredAIEngineer(), requestRegistRequestDTO.getStartDateTime(), requestRegistRequestDTO.getEndDateTime(), accountId @@ -38,18 +47,51 @@ public List findRequestsByAccountId(String accountId) { return requestRepository.findRequestsByAccountId(accountId); } - public List findAllRequestsBetweenStarDateTimeAndEndDateTime(LocalDateTime starDateTime, LocalDateTime endDateTime) { + public List findRequestsByWorkScope(String workScope) { + return requestRepository.findRequestsByWorkScope(workScope); + } + + public List findRequestsByWorkType(String workType) { + return requestRepository.findRequestsByWorkType(workType); + } + + public List findRequestsByProgressClassification(String progressClassification) { + return requestRepository.findRequestsByProgressClassification(progressClassification); + } + + public List findRequestsByTitleContainingIgnoreCase(String title) { + return requestRepository.findRequestsByTitleContainingIgnoreCase(title); + } + + public List findAllRequestsBetweenStarDateTimeAndEndDateTime( + LocalDateTime starDateTime, LocalDateTime endDateTime) { return requestRepository.findRequestsWithinDateRange(starDateTime, endDateTime); } + public List findRequestsWithLargerRequirements( + Integer requiredClient, Integer requiredServer, Integer requiredDesign, + Integer requiredPlanner, Integer requiredAIEngineer) { + + return requestRepository.findRequestsWithLargerRequirements( + requiredClient, requiredServer, requiredDesign, requiredPlanner, requiredAIEngineer); + } + @Transactional public Request updateRequest(RequestUpdateRequestDTO requestUpdateRequestDTO, String accountId) { Optional request = requestRepository.findById(requestUpdateRequestDTO.getRequestId()); if (request.isPresent()) { Request foundRequest = request.get(); if(foundRequest.getAccountId().equals(accountId)) { + foundRequest.setWorkScope(requestUpdateRequestDTO.getWorkScope()); + foundRequest.setWorkType(requestUpdateRequestDTO.getWorkType()); + foundRequest.setProgressClassification(requestUpdateRequestDTO.getProgressClassification()); foundRequest.setTitle(requestUpdateRequestDTO.getTitle()); foundRequest.setContent(requestUpdateRequestDTO.getContent()); + foundRequest.setRequiredClient(requestUpdateRequestDTO.getRequiredClient()); + foundRequest.setRequiredServer(requestUpdateRequestDTO.getRequiredServer()); + foundRequest.setRequiredDesign(requestUpdateRequestDTO.getRequiredDesign()); + foundRequest.setRequiredPlanner(requestUpdateRequestDTO.getRequiredPlanner()); + foundRequest.setRequiredAIEngineer(requestUpdateRequestDTO.getRequiredAIEngineer()); foundRequest.setStartDateTime(requestUpdateRequestDTO.getStartDateTime()); foundRequest.setEndDateTime(requestUpdateRequestDTO.getEndDateTime()); return foundRequest; From 46a6329210dbb91cbaec1879b539530c398b0052 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Mon, 21 Oct 2024 09:46:21 +0900 Subject: [PATCH 3/5] =?UTF-8?q?test:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=9D=98=EB=A2=B0=20=EC=B6=94=EA=B0=80=EB=90=9C=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 테스트 내용 - 업무 범위에 따른 조회 테스트 - 근무 형태에 따른 조회 테스트 - 진행 분류에 따른 조회 테스트 - 프로젝트 주제(제목)에 따른 조회 테스트 - 필요 직군에 따른 조회 테스트 --- .../devlinkbackend/crud/RequestCRUDTest.java | 113 +++++++++++++++++- 1 file changed, 109 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/RequestCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/RequestCRUDTest.java index 80268c0..fd6fce0 100644 --- a/src/test/java/com/mtvs/devlinkbackend/crud/RequestCRUDTest.java +++ b/src/test/java/com/mtvs/devlinkbackend/crud/RequestCRUDTest.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.Order; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; @@ -25,15 +26,69 @@ public class RequestCRUDTest { private static Stream newRequest() { return Stream.of( - Arguments.of(new RequestRegistRequestDTO("의뢰0", "내용0", LocalDateTime.now(), LocalDateTime.now()), "계정0"), - Arguments.of(new RequestRegistRequestDTO("의뢰00", "내용00", LocalDateTime.now(), LocalDateTime.now()), "계정00") + Arguments.of(new RequestRegistRequestDTO( + "업무범위0", + "근무형태0", + "진행분류0", + "회사이름0", + "의뢰0", + "내용0", + 3, + 3, + 3, + 3, + 3, + LocalDateTime.now(), + LocalDateTime.now()), "계정0"), + Arguments.of(new RequestRegistRequestDTO( + "업무범위1", + "근무형태1", + "진행분류1", + "회사이름1", + "의뢰1", + "내용1", + 2, + 3, + 1, + 1, + 3, + LocalDateTime.now(), + LocalDateTime.now()), "계정00") ); } private static Stream modifiedRequest() { return Stream.of( - Arguments.of(new RequestUpdateRequestDTO(1L,"의뢰0", "내용0", LocalDateTime.now(), LocalDateTime.now()), "계정1"), - Arguments.of(new RequestUpdateRequestDTO(2L,"의뢰00" , "내용00", LocalDateTime.now(), LocalDateTime.now()), "계정1") + Arguments.of(new RequestUpdateRequestDTO( + 1L, + "업무범위0", + "근무형태0", + "진행분류0", + "회사이름0", + "의뢰0", + "내용0", + 2, + 3, + 1, + 1, + 3, + LocalDateTime.now(), + LocalDateTime.now()), "계정1"), + Arguments.of(new RequestUpdateRequestDTO( + 2L, + "업무범위1", + "근무형태1", + "진행분류1", + "회사이름1", + "의뢰1", + "내용1", + 2, + 3, + 1, + 1, + 3, + LocalDateTime.now(), + LocalDateTime.now()), "계정1") ); } @@ -80,4 +135,54 @@ public void testDeleteRequest(long requestId) { Assertions.assertDoesNotThrow(() -> requestService.deleteRequest(requestId)); } + + @DisplayName("업무 범위에 따른 의뢰 조회 테스트") + @ValueSource( strings = {"업무범위1", "업무범위2"}) + @ParameterizedTest + @Order(2) + public void testFindRequestsByWorkScope(String workScope) { + Assertions.assertDoesNotThrow(() -> + System.out.println("Request = " + requestService.findRequestsByWorkScope(workScope))); + } + + @DisplayName("근무 형태에 따른 의뢰 조회 테스트") + @ValueSource( strings = {"근무형태1", "근무형태2"}) + @ParameterizedTest + @Order(2) + public void testFindRequestsByWorkType(String workType) { + Assertions.assertDoesNotThrow(() -> + System.out.println("Request = " + requestService.findRequestsByWorkType(workType))); + } + + @DisplayName("진행 분류에 따른 의뢰 조회 테스트") + @ValueSource( strings = {"진행분류1", "진행분류2"}) + @ParameterizedTest + @Order(2) + public void testFindRequestsByProgressClassification(String progressClassification) { + Assertions.assertDoesNotThrow(() -> + System.out.println("Request = " + requestService. + findRequestsByProgressClassification(progressClassification))); + } + + @DisplayName("프로젝트 주제(제목)에 따른 의뢰 조회 테스트") + @ValueSource( strings = {"제목1", "제목2"}) + @ParameterizedTest + @Order(2) + public void testFindRequestsByTitleContainingIgnoreCase(String title) { + Assertions.assertDoesNotThrow(() -> + System.out.println("Request = " + requestService.findRequestsByTitleContainingIgnoreCase(title))); + } + + @DisplayName("필요 직군보다 더 많이 모집하는 의뢰 조회 테스트") + @CsvSource({"2,2,3,1,3", "3,2,1,1,3"}) + @ParameterizedTest + @Order(2) + public void testFindRequestsWithLargerRequirements(Integer requiredClient, Integer requiredServer, + Integer requiredDesign, Integer requiredPlanner, + Integer requiredAIEngineer) { + Assertions.assertDoesNotThrow(() -> + System.out.println("Request = " + requestService.findRequestsWithLargerRequirements( + requiredClient, requiredServer, requiredDesign, requiredPlanner, requiredAIEngineer + ))); + } } From 41c762ab1cef4bf1ea9a06a16c2de0396f14a2d7 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Mon, 21 Oct 2024 11:02:25 +0900 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20=ED=85=8C=EC=9D=B4=EB=B8=94?= =?UTF-8?q?=EC=97=90=20=EC=98=88=EC=83=81=20=EA=B8=88=EC=95=A1=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 변경된 점 : - Entity: Integer estimatedCost 컬럼 추가 - Service: 생성, 수정시 estimatedCost 또한 포함되게 수정 - DTO: estimatedCost를 파라미터로 받을 수 있게 필드 생성 - Test: 생성, 수정시 해당 Argument에 estimatedCost 값을 추가해서 생성, 수정 되도록 코드 리팩토링 --- .../request/dto/RequestRegistRequestDTO.java | 1 + .../request/dto/RequestUpdateRequestDTO.java | 1 + .../mtvs/devlinkbackend/request/entity/Request.java | 10 +++++++++- .../request/service/RequestService.java | 2 ++ .../mtvs/devlinkbackend/crud/RequestCRUDTest.java | 12 ++++++++---- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestRegistRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestRegistRequestDTO.java index 0a31fab..859fda4 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestRegistRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestRegistRequestDTO.java @@ -28,4 +28,5 @@ public class RequestRegistRequestDTO { private Integer requiredAIEngineer; private LocalDateTime startDateTime; private LocalDateTime endDateTime; + private Integer estimatedCost; } \ No newline at end of file diff --git a/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestUpdateRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestUpdateRequestDTO.java index e65248b..77a7f04 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestUpdateRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/dto/RequestUpdateRequestDTO.java @@ -24,4 +24,5 @@ public class RequestUpdateRequestDTO { private Integer requiredAIEngineer; private LocalDateTime startDateTime; private LocalDateTime endDateTime; + private Integer estimatedCost; } \ No newline at end of file diff --git a/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java b/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java index bbc27a1..3b6a643 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/entity/Request.java @@ -63,6 +63,9 @@ public class Request { @Column(name = "END_DATETIME") private LocalDateTime endDateTime; + @Column(name = "ESTIMATED_COST") + private Integer estimatedCost; + @Column(name = "ACCOUNT_ID", nullable = false) private String accountId; @@ -86,7 +89,7 @@ public Request(String title, String content, LocalDateTime startDateTime, LocalD this.accountId = accountId; } - public Request(String workScope, String workType, String progressClassification, String companyName, String title, String content, Integer requiredClient, Integer requiredServer, Integer requiredDesign, Integer requiredPlanner, Integer requiredAIEngineer, LocalDateTime startDateTime, LocalDateTime endDateTime, String accountId) { + public Request(String workScope, String workType, String progressClassification, String companyName, String title, String content, Integer requiredClient, Integer requiredServer, Integer requiredDesign, Integer requiredPlanner, Integer requiredAIEngineer, LocalDateTime startDateTime, LocalDateTime endDateTime, Integer estimatedCost, String accountId) { this.workScope = workScope; this.workType = workType; this.progressClassification = progressClassification; @@ -100,6 +103,7 @@ public Request(String workScope, String workType, String progressClassification, this.requiredAIEngineer = requiredAIEngineer; this.startDateTime = startDateTime; this.endDateTime = endDateTime; + this.estimatedCost = estimatedCost; this.accountId = accountId; } @@ -135,6 +139,10 @@ public void setRequiredAIEngineer(Integer requiredAIEngineer) { this.requiredAIEngineer = requiredAIEngineer; } + public void setEstimatedCost(Integer estimatedCost) { + this.estimatedCost = estimatedCost; + } + public void setTitle(String title) { this.title = title; } diff --git a/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java b/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java index 00eb3d5..36541cd 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java @@ -35,6 +35,7 @@ public Request registRequest(RequestRegistRequestDTO requestRegistRequestDTO, St requestRegistRequestDTO.getRequiredAIEngineer(), requestRegistRequestDTO.getStartDateTime(), requestRegistRequestDTO.getEndDateTime(), + requestRegistRequestDTO.getEstimatedCost(), accountId )); } @@ -94,6 +95,7 @@ public Request updateRequest(RequestUpdateRequestDTO requestUpdateRequestDTO, St foundRequest.setRequiredAIEngineer(requestUpdateRequestDTO.getRequiredAIEngineer()); foundRequest.setStartDateTime(requestUpdateRequestDTO.getStartDateTime()); foundRequest.setEndDateTime(requestUpdateRequestDTO.getEndDateTime()); + foundRequest.setEstimatedCost(requestUpdateRequestDTO.getEstimatedCost()); return foundRequest; } else throw new IllegalArgumentException("잘못된 accountId로 Request ID : " diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/RequestCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/RequestCRUDTest.java index fd6fce0..e18e8e2 100644 --- a/src/test/java/com/mtvs/devlinkbackend/crud/RequestCRUDTest.java +++ b/src/test/java/com/mtvs/devlinkbackend/crud/RequestCRUDTest.java @@ -39,7 +39,8 @@ private static Stream newRequest() { 3, 3, LocalDateTime.now(), - LocalDateTime.now()), "계정0"), + LocalDateTime.now(), + 1000000), "계정0"), Arguments.of(new RequestRegistRequestDTO( "업무범위1", "근무형태1", @@ -53,7 +54,8 @@ private static Stream newRequest() { 1, 3, LocalDateTime.now(), - LocalDateTime.now()), "계정00") + LocalDateTime.now(), + 1000000), "계정00") ); } @@ -73,7 +75,8 @@ private static Stream modifiedRequest() { 1, 3, LocalDateTime.now(), - LocalDateTime.now()), "계정1"), + LocalDateTime.now(), + 1000000), "계정1"), Arguments.of(new RequestUpdateRequestDTO( 2L, "업무범위1", @@ -88,7 +91,8 @@ private static Stream modifiedRequest() { 1, 3, LocalDateTime.now(), - LocalDateTime.now()), "계정1") + LocalDateTime.now(), + 1000000), "계정1") ); } From e339648e9007401041f2565eea50ccbcc3316906 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Mon, 21 Oct 2024 11:14:01 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20=EB=82=A0=EC=A7=9C=20=EB=B2=94?= =?UTF-8?q?=EC=9C=84=20=EC=A1=B0=ED=9A=8C=EC=8B=9C=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 변경된 점 : - Repository; 입력한 날짜 범위에 존재하는 의뢰들만 조회하는 것이 아닌 입력한 시작 날짜와 끝 날짜 둘다 포함될때 조회 되도록 refactoring --- .../request/controller/RequestController.java | 6 +++--- .../request/repository/RequestRepository.java | 6 +----- .../mtvs/devlinkbackend/request/service/RequestService.java | 4 ++-- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java b/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java index 7f77c38..9872611 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java @@ -114,7 +114,7 @@ public ResponseEntity> getRequestsByTitleContainingIgnoreCase(@Req return ResponseEntity.ok(requests); } - @Operation(summary = "특정 기간 내의 의뢰 목록 조회", description = "시작과 끝 날짜 사이의 모든 의뢰를 조회합니다.") + @Operation(summary = "특정 기간 내의 의뢰 목록 조회", description = "시작날짜 또는 끝 날짜를 포함하는 모든 의뢰를 조회합니다.") @ApiResponses({ @ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨") }) @@ -122,8 +122,8 @@ public ResponseEntity> getRequestsByTitleContainingIgnoreCase(@Req public ResponseEntity> getRequestsBetweenDates( @RequestParam LocalDateTime startDateTime, @RequestParam LocalDateTime endDateTime) { - List requests = - requestService.findAllRequestsBetweenStarDateTimeAndEndDateTime(startDateTime, endDateTime); + List requests = requestService.findRequestsByStartDateTimeLessThanEqualOrEndDateTimeGreaterThanEqual( + startDateTime, endDateTime); return ResponseEntity.ok(requests); } diff --git a/src/main/java/com/mtvs/devlinkbackend/request/repository/RequestRepository.java b/src/main/java/com/mtvs/devlinkbackend/request/repository/RequestRepository.java index 9db8ac2..ce1b456 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/repository/RequestRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/repository/RequestRepository.java @@ -21,11 +21,7 @@ public interface RequestRepository extends JpaRepository { List findRequestsByTitleContainingIgnoreCase(String title); - @Query("SELECT r FROM Request r WHERE r.startDateTime BETWEEN :startDateTime AND :endDateTime " + - "AND r.endDateTime BETWEEN :startDateTime AND :endDateTime") - List findRequestsWithinDateRange( - @Param("startDateTime") LocalDateTime startDateTime, - @Param("endDateTime") LocalDateTime endDateTime); + List findRequestsByStartDateTimeLessThanEqualOrEndDateTimeGreaterThanEqual(LocalDateTime startDateTime, LocalDateTime endDateTime); // required 값들이 넘겨준 값보다 큰 row를 조회하는 쿼리 @Query("SELECT r FROM Request r WHERE " + diff --git a/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java b/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java index 36541cd..0826783 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/service/RequestService.java @@ -64,9 +64,9 @@ public List findRequestsByTitleContainingIgnoreCase(String title) { return requestRepository.findRequestsByTitleContainingIgnoreCase(title); } - public List findAllRequestsBetweenStarDateTimeAndEndDateTime( + public List findRequestsByStartDateTimeLessThanEqualOrEndDateTimeGreaterThanEqual( LocalDateTime starDateTime, LocalDateTime endDateTime) { - return requestRepository.findRequestsWithinDateRange(starDateTime, endDateTime); + return requestRepository.findRequestsByStartDateTimeLessThanEqualOrEndDateTimeGreaterThanEqual(starDateTime, endDateTime); } public List findRequestsWithLargerRequirements(