From 1b954413848b24af3c2a2efd4af1d69104522481 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Tue, 22 Oct 2024 18:29:18 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=83=81=EC=84=B8=20=EC=84=A4=EB=AA=85=EA=B3=BC=20?= =?UTF-8?q?=EC=BD=94=EB=A9=98=ED=8A=B8=EB=93=A4=EC=9D=84=20=EC=A0=9C?= =?UTF-8?q?=EC=99=B8=ED=95=9C=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=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 추가된 기능: - 프로젝트 상세 설명과 코멘트들을 제외한 프로젝트 정보 조회 메서드 구현 --- .../controller/ProjectSummaryController.java | 31 +++++++++++ .../response/ProjectSummaryResponseDTO.java | 15 ++++++ .../project/entity/ProjectSummary.java | 51 +++++++++++++++++++ .../project/repository/ProjectRepository.java | 3 ++ .../service/ProjectSummaryService.java | 27 ++++++++++ 5 files changed, 127 insertions(+) create mode 100644 src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectSummaryController.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectSummaryResponseDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/project/entity/ProjectSummary.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/project/service/ProjectSummaryService.java diff --git a/src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectSummaryController.java b/src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectSummaryController.java new file mode 100644 index 0000000..0ceb67c --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectSummaryController.java @@ -0,0 +1,31 @@ +package com.mtvs.devlinkbackend.project.controller; + +import com.mtvs.devlinkbackend.project.dto.response.ProjectSummaryResponseDTO; +import com.mtvs.devlinkbackend.project.service.ProjectSummaryService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/project/summary") +public class ProjectSummaryController { + private final ProjectSummaryService projectSummaryService; + + public ProjectSummaryController(ProjectSummaryService projectSummaryService) { + this.projectSummaryService = projectSummaryService; + } + + @Operation(summary = "전체 프로젝트 요약 조회", description = "전체 프로젝트 요약을 조회합니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "성공적으로 조회됨"), + @ApiResponse(responseCode = "404", description = "찾을 수 없음") + }) + @GetMapping + public ResponseEntity findAllSummary() { + return ResponseEntity.ok(projectSummaryService.findAllWithoutCommentsAndContent()); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectSummaryResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectSummaryResponseDTO.java new file mode 100644 index 0000000..9e9ad99 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectSummaryResponseDTO.java @@ -0,0 +1,15 @@ +package com.mtvs.devlinkbackend.project.dto.response; + +import com.mtvs.devlinkbackend.project.entity.ProjectSummary; +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class ProjectSummaryResponseDTO { + private List data; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/project/entity/ProjectSummary.java b/src/main/java/com/mtvs/devlinkbackend/project/entity/ProjectSummary.java new file mode 100644 index 0000000..f5cba4e --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/project/entity/ProjectSummary.java @@ -0,0 +1,51 @@ +package com.mtvs.devlinkbackend.project.entity; + +import lombok.*; + +import java.time.LocalDateTime; +import java.util.Map; + +@Getter +@Setter +@NoArgsConstructor +@ToString +public class ProjectSummary { + private Long projectId; + private String workScope; + private String workType; + private String progressClassification; + private String companyName; + private String title; + private Integer requiredClient; + private Integer requiredServer; + private Integer requiredDesign; + private Integer requiredPlanner; + private Integer requiredAIEngineer; + private LocalDateTime startDateTime; + private LocalDateTime endDateTime; + private Integer estimatedCost; + private String accountId; + private LocalDateTime createdAt; + private Map projectVector; + + // Project 객체로부터 필드 값을 가져오는 생성자 + public ProjectSummary(Project project) { + this.projectId = project.getProjectId(); + this.workScope = project.getWorkScope(); + this.workType = project.getWorkType(); + this.progressClassification = project.getProgressClassification(); + this.companyName = project.getCompanyName(); + this.title = project.getTitle(); + this.requiredClient = project.getRequiredClient(); + this.requiredServer = project.getRequiredServer(); + this.requiredDesign = project.getRequiredDesign(); + this.requiredPlanner = project.getRequiredPlanner(); + this.requiredAIEngineer = project.getRequiredAIEngineer(); + this.startDateTime = project.getStartDateTime(); + this.endDateTime = project.getEndDateTime(); + this.estimatedCost = project.getEstimatedCost(); + this.accountId = project.getAccountId(); + this.createdAt = project.getCreatedAt(); + this.projectVector = project.getProjectVector(); // Map projectVector + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/project/repository/ProjectRepository.java b/src/main/java/com/mtvs/devlinkbackend/project/repository/ProjectRepository.java index 2bb19c3..757de95 100644 --- a/src/main/java/com/mtvs/devlinkbackend/project/repository/ProjectRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/project/repository/ProjectRepository.java @@ -1,5 +1,6 @@ package com.mtvs.devlinkbackend.project.repository; +import com.mtvs.devlinkbackend.project.entity.ProjectSummary; import com.mtvs.devlinkbackend.project.entity.Project; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -9,6 +10,8 @@ import org.springframework.stereotype.Repository; import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; @Repository public interface ProjectRepository extends JpaRepository { diff --git a/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectSummaryService.java b/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectSummaryService.java new file mode 100644 index 0000000..9d85b86 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectSummaryService.java @@ -0,0 +1,27 @@ +package com.mtvs.devlinkbackend.project.service; + +import com.mtvs.devlinkbackend.project.dto.response.ProjectSummaryResponseDTO; +import com.mtvs.devlinkbackend.project.entity.ProjectSummary; +import com.mtvs.devlinkbackend.project.repository.ProjectRepository; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class ProjectSummaryService { + private final ProjectRepository projectRepository; + + public ProjectSummaryService(ProjectRepository projectRepository) { + this.projectRepository = projectRepository; + } + + public ProjectSummaryResponseDTO findAllWithoutCommentsAndContent() { + List projectSummaryList = projectRepository.findAll() + .stream() + .map(ProjectSummary::new) // Project 객체를 ProjectSummary로 변환 + .collect(Collectors.toList()); // 리스트로 수집 + + return new ProjectSummaryResponseDTO(projectSummaryList); + } +} From a607e74995c9430a7bf9f0c30fbb9d1971843f24 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Tue, 22 Oct 2024 23:32:04 +0900 Subject: [PATCH 2/4] =?UTF-8?q?refactoring:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=9A=94=EC=95=BD=20=EC=A0=95=EB=B3=B4=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=A5=BC=20Interface=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=EC=85=98=EC=9C=BC=EB=A1=9C=20=EC=BD=94=EB=93=9C=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 추가된 기능: - 기존에 DB에서 가져온 다음 Service에서 필요없는 데이터를 거르는 방식에서 Interface 프로젝션을 활용하여 필요한 데이터만 가져오게 함 --- .../controller/ProjectSummaryController.java | 32 ++++++++---- .../response/ProjectSummaryResponseDTO.java | 2 +- .../project/entity/ProjectSummary.java | 51 ------------------- .../project/repository/ProjectRepository.java | 8 ++- .../repository/projection/ProjectSummary.java | 25 +++++++++ 5 files changed, 54 insertions(+), 64 deletions(-) delete mode 100644 src/main/java/com/mtvs/devlinkbackend/project/entity/ProjectSummary.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/project/repository/projection/ProjectSummary.java diff --git a/src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectSummaryController.java b/src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectSummaryController.java index 0ceb67c..cab4327 100644 --- a/src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectSummaryController.java +++ b/src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectSummaryController.java @@ -1,22 +1,21 @@ package com.mtvs.devlinkbackend.project.controller; +import com.mtvs.devlinkbackend.project.dto.response.ProjectDetailResponseDTO; import com.mtvs.devlinkbackend.project.dto.response.ProjectSummaryResponseDTO; -import com.mtvs.devlinkbackend.project.service.ProjectSummaryService; +import com.mtvs.devlinkbackend.project.service.ProjectDetailService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController -@RequestMapping("/api/project/summary") +@RequestMapping("/api/project") public class ProjectSummaryController { - private final ProjectSummaryService projectSummaryService; + private final ProjectDetailService projectDetailService; - public ProjectSummaryController(ProjectSummaryService projectSummaryService) { - this.projectSummaryService = projectSummaryService; + public ProjectSummaryController(ProjectDetailService projectDetailService) { + this.projectDetailService = projectDetailService; } @Operation(summary = "전체 프로젝트 요약 조회", description = "전체 프로젝트 요약을 조회합니다.") @@ -24,8 +23,21 @@ public ProjectSummaryController(ProjectSummaryService projectSummaryService) { @ApiResponse(responseCode = "200", description = "성공적으로 조회됨"), @ApiResponse(responseCode = "404", description = "찾을 수 없음") }) - @GetMapping + @GetMapping("/summary") public ResponseEntity findAllSummary() { - return ResponseEntity.ok(projectSummaryService.findAllWithoutCommentsAndContent()); + ProjectSummaryResponseDTO summary = projectDetailService.findAllProjectSummary(); + return summary != null ? ResponseEntity.ok(summary) : ResponseEntity.notFound().build(); + } + + @Operation(summary = "전체 프로젝트 세부 내용 조회", description = "전체 프로젝트 세부 내용을 조회합니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "성공적으로 조회됨"), + @ApiResponse(responseCode = "404", description = "찾을 수 없음") + }) + @GetMapping("/{projectId}/detail") + public ResponseEntity findProjectDetailByProjectId( + @PathVariable(name = "projectId") Long projectId) { + ProjectDetailResponseDTO detail = projectDetailService.findProjectDetailByProjectId(projectId); + return detail != null ? ResponseEntity.ok(detail) : ResponseEntity.notFound().build(); } } diff --git a/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectSummaryResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectSummaryResponseDTO.java index 9e9ad99..cf38fe0 100644 --- a/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectSummaryResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectSummaryResponseDTO.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.project.dto.response; -import com.mtvs.devlinkbackend.project.entity.ProjectSummary; +import com.mtvs.devlinkbackend.project.repository.projection.ProjectSummary; import lombok.*; import java.util.List; diff --git a/src/main/java/com/mtvs/devlinkbackend/project/entity/ProjectSummary.java b/src/main/java/com/mtvs/devlinkbackend/project/entity/ProjectSummary.java deleted file mode 100644 index f5cba4e..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/project/entity/ProjectSummary.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.mtvs.devlinkbackend.project.entity; - -import lombok.*; - -import java.time.LocalDateTime; -import java.util.Map; - -@Getter -@Setter -@NoArgsConstructor -@ToString -public class ProjectSummary { - private Long projectId; - private String workScope; - private String workType; - private String progressClassification; - private String companyName; - private String title; - private Integer requiredClient; - private Integer requiredServer; - private Integer requiredDesign; - private Integer requiredPlanner; - private Integer requiredAIEngineer; - private LocalDateTime startDateTime; - private LocalDateTime endDateTime; - private Integer estimatedCost; - private String accountId; - private LocalDateTime createdAt; - private Map projectVector; - - // Project 객체로부터 필드 값을 가져오는 생성자 - public ProjectSummary(Project project) { - this.projectId = project.getProjectId(); - this.workScope = project.getWorkScope(); - this.workType = project.getWorkType(); - this.progressClassification = project.getProgressClassification(); - this.companyName = project.getCompanyName(); - this.title = project.getTitle(); - this.requiredClient = project.getRequiredClient(); - this.requiredServer = project.getRequiredServer(); - this.requiredDesign = project.getRequiredDesign(); - this.requiredPlanner = project.getRequiredPlanner(); - this.requiredAIEngineer = project.getRequiredAIEngineer(); - this.startDateTime = project.getStartDateTime(); - this.endDateTime = project.getEndDateTime(); - this.estimatedCost = project.getEstimatedCost(); - this.accountId = project.getAccountId(); - this.createdAt = project.getCreatedAt(); - this.projectVector = project.getProjectVector(); // Map projectVector - } -} diff --git a/src/main/java/com/mtvs/devlinkbackend/project/repository/ProjectRepository.java b/src/main/java/com/mtvs/devlinkbackend/project/repository/ProjectRepository.java index 757de95..fe51d3f 100644 --- a/src/main/java/com/mtvs/devlinkbackend/project/repository/ProjectRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/project/repository/ProjectRepository.java @@ -1,7 +1,8 @@ package com.mtvs.devlinkbackend.project.repository; -import com.mtvs.devlinkbackend.project.entity.ProjectSummary; import com.mtvs.devlinkbackend.project.entity.Project; +import com.mtvs.devlinkbackend.project.repository.projection.ProjectIdAndContent; +import com.mtvs.devlinkbackend.project.repository.projection.ProjectSummary; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -11,7 +12,6 @@ import java.time.LocalDateTime; import java.util.List; -import java.util.Map; @Repository public interface ProjectRepository extends JpaRepository { @@ -49,4 +49,8 @@ Page findProjectsWithLargerRequirements( @Param("requiredAIEngineer") Integer requiredAIEngineer, Pageable pageable ); + + List findAllBy(); + + ProjectIdAndContent findProjectIdAndContentByProjectId(Long projectId); } diff --git a/src/main/java/com/mtvs/devlinkbackend/project/repository/projection/ProjectSummary.java b/src/main/java/com/mtvs/devlinkbackend/project/repository/projection/ProjectSummary.java new file mode 100644 index 0000000..38b096b --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/project/repository/projection/ProjectSummary.java @@ -0,0 +1,25 @@ +package com.mtvs.devlinkbackend.project.repository.projection; + +import java.time.LocalDateTime; +import java.util.Map; + +public interface ProjectSummary { + Long getProjectId(); + String getWorkScope(); + String getWorkType(); + String getProgressClassification(); + String getCompanyName(); + String getTitle(); + Integer getRequiredClient(); + Integer getRequiredServer(); + Integer getRequiredDesign(); + Integer getRequiredPlanner(); + Integer getRequiredAIEngineer(); + LocalDateTime getStartDateTime(); + LocalDateTime getEndDateTime(); + Integer getEstimatedCost(); + String getAccountId(); + LocalDateTime getCreatedAt(); + LocalDateTime getModifiedAt(); + Map getProjectVector(); +} From bfab303706a7521f41e8435cb50e5a4df8605e60 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Tue, 22 Oct 2024 23:33:20 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=84=B8=EB=B6=80=20=EB=82=B4=EC=9A=A9(=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=84=A4=EB=AA=85,=20=EC=BD=94=EB=A9=98=ED=8A=B8?= =?UTF-8?q?=20ID=20=EB=A6=AC=EC=8A=A4=ED=8A=B8,=20=EC=A7=80=EC=9B=90?= =?UTF-8?q?=ED=95=9C=20=ED=8C=80=20ID=20=EB=A6=AC=EC=8A=A4=ED=8A=B8)=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 추가된 기능: - 각 도메인의 Repository에서 필요한 부분들을 조회하게 한 다음, Service로직에서 하나의 DTO에 담아 응답하는 메서드로 구현 --- .../comment/repository/CommentRepository.java | 5 +++ .../response/ProjectDetailResponseDTO.java | 17 +++++++++ .../projection/ProjectIdAndContent.java | 6 +++ .../project/service/ProjectDetailService.java | 38 +++++++++++++++++++ .../service/ProjectSummaryService.java | 27 ------------- .../support/repository/SupportRepository.java | 4 ++ 6 files changed, 70 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectDetailResponseDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/project/repository/projection/ProjectIdAndContent.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/project/service/ProjectDetailService.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/project/service/ProjectSummaryService.java diff --git a/src/main/java/com/mtvs/devlinkbackend/comment/repository/CommentRepository.java b/src/main/java/com/mtvs/devlinkbackend/comment/repository/CommentRepository.java index c467a3d..cb8a152 100644 --- a/src/main/java/com/mtvs/devlinkbackend/comment/repository/CommentRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/comment/repository/CommentRepository.java @@ -2,6 +2,8 @@ import com.mtvs.devlinkbackend.comment.entity.Comment; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -10,4 +12,7 @@ public interface CommentRepository extends JpaRepository { List findCommentsByAccountId(String accountId); List findCommentsByProject_ProjectId(Long requestId); + + @Query("SELECT c.commentId FROM Comment c WHERE c.project.projectId = :projectId") + List findCommentIdsByProjectId(@Param("projectId") Long projectId); } diff --git a/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectDetailResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectDetailResponseDTO.java new file mode 100644 index 0000000..2ee8fa9 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectDetailResponseDTO.java @@ -0,0 +1,17 @@ +package com.mtvs.devlinkbackend.project.dto.response; + +import com.mtvs.devlinkbackend.project.repository.projection.ProjectIdAndContent; +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class ProjectDetailResponseDTO { + private ProjectIdAndContent projectIdAndContent; + private List commentIdList; + private List supportedTeamIdList; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/project/repository/projection/ProjectIdAndContent.java b/src/main/java/com/mtvs/devlinkbackend/project/repository/projection/ProjectIdAndContent.java new file mode 100644 index 0000000..297113a --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/project/repository/projection/ProjectIdAndContent.java @@ -0,0 +1,6 @@ +package com.mtvs.devlinkbackend.project.repository.projection; + +public interface ProjectIdAndContent { + Long getProjectId(); + String getContent(); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectDetailService.java b/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectDetailService.java new file mode 100644 index 0000000..923011a --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectDetailService.java @@ -0,0 +1,38 @@ +package com.mtvs.devlinkbackend.project.service; + +import com.mtvs.devlinkbackend.comment.repository.CommentRepository; +import com.mtvs.devlinkbackend.project.dto.response.ProjectDetailResponseDTO; +import com.mtvs.devlinkbackend.project.dto.response.ProjectSummaryResponseDTO; +import com.mtvs.devlinkbackend.project.repository.projection.ProjectIdAndContent; +import com.mtvs.devlinkbackend.project.repository.projection.ProjectSummary; +import com.mtvs.devlinkbackend.project.repository.ProjectRepository; +import com.mtvs.devlinkbackend.support.repository.SupportRepository; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class ProjectDetailService { + private final ProjectRepository projectRepository; + private final CommentRepository commentRepository; + private final SupportRepository supportRepository; + + public ProjectDetailService(ProjectRepository projectRepository, CommentRepository commentRepository, SupportRepository supportRepository) { + this.projectRepository = projectRepository; + this.commentRepository = commentRepository; + this.supportRepository = supportRepository; + } + + public ProjectSummaryResponseDTO findAllProjectSummary() { + List projectSummaryList = projectRepository.findAllBy(); + return new ProjectSummaryResponseDTO(projectSummaryList); + } + + public ProjectDetailResponseDTO findProjectDetailByProjectId(Long projectId) { + ProjectIdAndContent projectIdAndContents = projectRepository.findProjectIdAndContentByProjectId(projectId); + List commentIdList = commentRepository.findCommentIdsByProjectId(projectId); + List supportedTeamIdList = supportRepository.findTeamIdByProjectId(projectId); + + return new ProjectDetailResponseDTO(projectIdAndContents, commentIdList, supportedTeamIdList); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectSummaryService.java b/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectSummaryService.java deleted file mode 100644 index 9d85b86..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectSummaryService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mtvs.devlinkbackend.project.service; - -import com.mtvs.devlinkbackend.project.dto.response.ProjectSummaryResponseDTO; -import com.mtvs.devlinkbackend.project.entity.ProjectSummary; -import com.mtvs.devlinkbackend.project.repository.ProjectRepository; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.stream.Collectors; - -@Service -public class ProjectSummaryService { - private final ProjectRepository projectRepository; - - public ProjectSummaryService(ProjectRepository projectRepository) { - this.projectRepository = projectRepository; - } - - public ProjectSummaryResponseDTO findAllWithoutCommentsAndContent() { - List projectSummaryList = projectRepository.findAll() - .stream() - .map(ProjectSummary::new) // Project 객체를 ProjectSummary로 변환 - .collect(Collectors.toList()); // 리스트로 수집 - - return new ProjectSummaryResponseDTO(projectSummaryList); - } -} diff --git a/src/main/java/com/mtvs/devlinkbackend/support/repository/SupportRepository.java b/src/main/java/com/mtvs/devlinkbackend/support/repository/SupportRepository.java index ecbf827..149a7fc 100644 --- a/src/main/java/com/mtvs/devlinkbackend/support/repository/SupportRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/support/repository/SupportRepository.java @@ -2,6 +2,8 @@ import com.mtvs.devlinkbackend.support.entity.Support; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -10,4 +12,6 @@ public interface SupportRepository extends JpaRepository { List findSupportsByProjectId(Long projectId); List findSupportsByTeamId(Long teamId); + @Query("SELECT s.teamId FROM Support s WHERE s.projectId = :projectId") + List findTeamIdByProjectId(@Param("projectId") Long projectId); } From 838dd4840ff33a3be23089e4d74afdc0155c870a Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Wed, 23 Oct 2024 15:15:13 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactoring:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=84=B8=EB=B6=80=20=EB=82=B4=EC=9A=A9(=EC=BD=94?= =?UTF-8?q?=EB=A9=98=ED=8A=B8=20ID=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20->=20?= =?UTF-8?q?=EC=BD=94=EB=A9=98=ED=8A=B8=20=EB=A6=AC=EC=8A=A4=ED=8A=B8)=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 변경된 점: - 나중에 Comment Id로써 여러번 요청을 처리하는 것보다 한번에 Comment들을 보내주는 게 더 좋을 것 같아서 이와 같이 변경 --- .../devlinkbackend/comment/repository/CommentRepository.java | 4 ++-- .../project/dto/response/ProjectDetailResponseDTO.java | 3 ++- .../devlinkbackend/project/service/ProjectDetailService.java | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/mtvs/devlinkbackend/comment/repository/CommentRepository.java b/src/main/java/com/mtvs/devlinkbackend/comment/repository/CommentRepository.java index cb8a152..393d348 100644 --- a/src/main/java/com/mtvs/devlinkbackend/comment/repository/CommentRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/comment/repository/CommentRepository.java @@ -13,6 +13,6 @@ public interface CommentRepository extends JpaRepository { List findCommentsByAccountId(String accountId); List findCommentsByProject_ProjectId(Long requestId); - @Query("SELECT c.commentId FROM Comment c WHERE c.project.projectId = :projectId") - List findCommentIdsByProjectId(@Param("projectId") Long projectId); + @Query("SELECT c FROM Comment c WHERE c.project.projectId = :projectId") + List findCommentIdsByProjectId(@Param("projectId") Long projectId); } diff --git a/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectDetailResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectDetailResponseDTO.java index 2ee8fa9..bc538a7 100644 --- a/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectDetailResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/project/dto/response/ProjectDetailResponseDTO.java @@ -1,5 +1,6 @@ package com.mtvs.devlinkbackend.project.dto.response; +import com.mtvs.devlinkbackend.comment.entity.Comment; import com.mtvs.devlinkbackend.project.repository.projection.ProjectIdAndContent; import lombok.*; @@ -12,6 +13,6 @@ @ToString public class ProjectDetailResponseDTO { private ProjectIdAndContent projectIdAndContent; - private List commentIdList; + private List commentIdList; private List supportedTeamIdList; } diff --git a/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectDetailService.java b/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectDetailService.java index 923011a..a9dd6b1 100644 --- a/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectDetailService.java +++ b/src/main/java/com/mtvs/devlinkbackend/project/service/ProjectDetailService.java @@ -1,5 +1,6 @@ package com.mtvs.devlinkbackend.project.service; +import com.mtvs.devlinkbackend.comment.entity.Comment; import com.mtvs.devlinkbackend.comment.repository.CommentRepository; import com.mtvs.devlinkbackend.project.dto.response.ProjectDetailResponseDTO; import com.mtvs.devlinkbackend.project.dto.response.ProjectSummaryResponseDTO; @@ -30,9 +31,9 @@ public ProjectSummaryResponseDTO findAllProjectSummary() { public ProjectDetailResponseDTO findProjectDetailByProjectId(Long projectId) { ProjectIdAndContent projectIdAndContents = projectRepository.findProjectIdAndContentByProjectId(projectId); - List commentIdList = commentRepository.findCommentIdsByProjectId(projectId); + List commentList = commentRepository.findCommentIdsByProjectId(projectId); List supportedTeamIdList = supportRepository.findTeamIdByProjectId(projectId); - return new ProjectDetailResponseDTO(projectIdAndContents, commentIdList, supportedTeamIdList); + return new ProjectDetailResponseDTO(projectIdAndContents, commentList, supportedTeamIdList); } }