-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix : project detail fix #120
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,37 +1,37 @@ | ||
//package com.seveneleven.project.controller; | ||
// | ||
//import com.seveneleven.project.dto.GetProjectDetail; | ||
//import com.seveneleven.project.service.ProjectService; | ||
//import com.seveneleven.response.APIResponse; | ||
//import com.seveneleven.response.SuccessCode; | ||
//import lombok.RequiredArgsConstructor; | ||
//import org.springframework.http.HttpStatus; | ||
//import org.springframework.http.ResponseEntity; | ||
//import org.springframework.web.bind.annotation.GetMapping; | ||
//import org.springframework.web.bind.annotation.PathVariable; | ||
//import org.springframework.web.bind.annotation.RequestMapping; | ||
//import org.springframework.web.bind.annotation.RestController; | ||
// | ||
//@RestController | ||
//@RequiredArgsConstructor | ||
//@RequestMapping("/api/projects") | ||
//public class ProjectController implements ProjectDocs { | ||
// | ||
// private final ProjectService projectService; | ||
// | ||
// /** | ||
// * 함수명 : getProjectDetail | ||
// * 프로젝트 상세 페이지를 반환하는 함수 | ||
// */ | ||
// @GetMapping("/detail/{projectId}") | ||
// public ResponseEntity<APIResponse<GetProjectDetail.Response>> getProjectDetail( | ||
// @PathVariable Long projectId | ||
// ) { | ||
// // TODO - 정렬 조건 추가 필요 | ||
// return ResponseEntity | ||
// .status(HttpStatus.OK) | ||
// .body(APIResponse.success(SuccessCode.OK, projectService.getProjectDetail(projectId))); | ||
// } | ||
// | ||
// // TODO - 검색 api 추가 필요 | ||
//} | ||
package com.seveneleven.project.controller; | ||
|
||
import com.seveneleven.project.dto.GetProjectDetail; | ||
import com.seveneleven.project.service.ProjectService; | ||
import com.seveneleven.response.APIResponse; | ||
import com.seveneleven.response.SuccessCode; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.PathVariable; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@RestController | ||
@RequiredArgsConstructor | ||
@RequestMapping("/api/projects") | ||
public class ProjectController implements ProjectDocs { | ||
|
||
private final ProjectService projectService; | ||
|
||
/** | ||
* 함수명 : getProjectDetail | ||
* 프로젝트 상세 페이지를 반환하는 함수 | ||
*/ | ||
@GetMapping("/detail/{projectId}") | ||
public ResponseEntity<APIResponse<GetProjectDetail.Response>> getProjectDetail( | ||
@PathVariable Long projectId | ||
) { | ||
// TODO - 정렬 조건 추가 필요 | ||
return ResponseEntity | ||
.status(HttpStatus.OK) | ||
.body(APIResponse.success(SuccessCode.OK, projectService.getProjectDetail(projectId))); | ||
} | ||
|
||
// TODO - 검색 api 추가 필요 | ||
} | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -44,16 +44,16 @@ public ProjectDetail( | |
Long projectId, | ||
String projectTypeName, | ||
String projectName, | ||
String projectDescription, | ||
String name, | ||
String phoneNumber | ||
String projectDescription | ||
// String name, | ||
// String phoneNumber | ||
) { | ||
this.projectId = projectId; | ||
this.projectTypeName = projectTypeName; | ||
this.projectName = projectName; | ||
this.projectDescription = projectDescription; | ||
this.projectContact = name; | ||
this.projectContactPhone = phoneNumber; | ||
// this.projectContact = name; | ||
// this.projectContactPhone = phoneNumber; | ||
} | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 패치에 대한 간단한 리뷰를 제공하겠습니다.
요약하자면, 코드 리뷰를 통해 주석 처리된 부분을 정리하고, 클래스 설계와 입력 값 검증에 대한 고민이 필요합니다. |
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,6 +8,7 @@ | |
import org.springframework.stereotype.Repository; | ||
|
||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
@Repository | ||
public interface ProjectRepository extends JpaRepository<Project, Long> { | ||
|
@@ -37,24 +38,20 @@ public interface ProjectRepository extends JpaRepository<Project, Long> { | |
""") | ||
List<Project> findAllCompanyProgressingProjects(Long companyId); | ||
|
||
// @Query(value = """ | ||
// SELECT | ||
// new com.seveneleven.project.dto.GetProjectDetail$ProjectDetail( | ||
// p.id, | ||
// p_t.projectTypeName, | ||
// p.projectName, | ||
// p.projectDescription, | ||
// m.name, | ||
// m.phoneNumber | ||
// ) | ||
// FROM | ||
// Project p | ||
// JOIN | ||
// ProjectType p_t ON p_t.id = p.projectType.id | ||
// JOIN | ||
// Member m ON m.id = p.bnsManager.id | ||
// WHERE | ||
// p.id = :projectId | ||
// """) | ||
// GetProjectDetail.ProjectDetail getProjectDetail(@Param("projectId") Long projectId); | ||
@Query(value = """ | ||
SELECT | ||
new com.seveneleven.project.dto.GetProjectDetail$ProjectDetail( | ||
p.id, | ||
p_t.projectTypeName, | ||
p.projectName, | ||
p.projectDescription | ||
) | ||
FROM | ||
Project p | ||
JOIN | ||
ProjectType p_t ON p_t.id = p.projectType.id | ||
WHERE | ||
p.id = :projectId | ||
""") | ||
Optional<GetProjectDetail.ProjectDetail> getProjectDetail(@Param("projectId") Long projectId); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 패치에 대한 간단한 리뷰를 진행하겠습니다.
종합적으로, 전반적으로 좋은 방향으로 개선되었으며, 위의 몇 가지 사항을 고려하여 더 나은 결과를 도출할 수 있을 것입니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,5 +5,5 @@ | |
|
||
public interface ProjectService { | ||
GetProjectList.Response getProjectList(Long memberId); | ||
// GetProjectDetail.Response getProjectDetail(Long projectId); | ||
GetProjectDetail.Response getProjectDetail(Long projectId); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 패치에 대한 간단한 리뷰를 진행하겠습니다.
이런 점들을 확인하고 개선하면 코드 품질과 안정성을 높일 수 있을 것입니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -20,8 +20,8 @@ public GetProjectList.Response getProjectList(Long memberId) { | |
return projectReader.getProjectList(memberId, memberService.getCompanyIdById(memberId)); | ||
} | ||
|
||
// @Override | ||
// public GetProjectDetail.Response getProjectDetail(Long projectId) { | ||
// return projectReader.getProjectDetail(projectId); | ||
// } | ||
@Override | ||
public GetProjectDetail.Response getProjectDetail(Long projectId) { | ||
return projectReader.getProjectDetail(projectId); | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 리뷰를 진행하겠습니다.
제안된 변경 사항들을 통해 코드의 안정성과 가독성을 높일 수 있을 것입니다. 전체적으로 코드는 명확해 보이지만, 위의 개선 사항을 고려해 보시기 바랍니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,5 +7,5 @@ | |
public interface ProjectReader { | ||
Project read(Long projectId); | ||
GetProjectList.Response getProjectList(Long memberId, Long companyId); | ||
// GetProjectDetail.Response getProjectDetail(Long projectId); | ||
GetProjectDetail.Response getProjectDetail(Long projectId); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 패치에 대한 간단한 리뷰를 제공하겠습니다.
총체적으로, 패치가 간단하지만 필요한 기능을 추가하는 데 있어 긍정적인 방향으로 보입니다. 각 메소드의 역할을 명확히 하고, 예외 처리를 고려한다면 코드의 안정성도 높일 수 있을 것입니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -37,13 +37,13 @@ public GetProjectList.Response getProjectList(Long memberId, Long companyId) { | |
); | ||
} | ||
|
||
// @Override | ||
// @Transactional(readOnly = true) | ||
// public GetProjectDetail.Response getProjectDetail(Long projectId) { | ||
// return GetProjectDetail.Response.toDto( | ||
// projectRepository.getProjectDetail(projectId), | ||
// projectStepRepository.findStepProcessRate(projectId), | ||
// checkRequestRepository.findAllApplicationLists(projectId) | ||
// ); | ||
// } | ||
@Override | ||
@Transactional(readOnly = true) | ||
public GetProjectDetail.Response getProjectDetail(Long projectId) { | ||
return GetProjectDetail.Response.toDto( | ||
projectRepository.getProjectDetail(projectId).orElseThrow(() -> new BusinessException(ErrorCode.PROJECT_NOT_FOUND)), | ||
projectStepRepository.findStepProcessRate(projectId), | ||
checkRequestRepository.findAllApplicationLists(projectId) | ||
); | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 패치에 대한 간단한 리뷰를 제공하겠습니다. 개선 사항 및 버그 위험
결론전체적으로 이 패치는 긍정적인 변화를 포함하고 있으며, 향후 유지보수 과정에서도 예외와 상태 관리를 잘 수행할 수 있도록 지원합니다. 위에서 언급한 몇 가지 점을 고려하여 코드를 개선하면 더욱 견고하고 효율적인 코드가 될 것입니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 패치에 대한 간단한 리뷰입니다.
주석 처리: 이전 코드에서 모든 내용을 주석 처리한 것은 비효율적입니다. 이후 다시 사용할 필요가 없으면 완전히 제거하고, 필요할 경우 커밋 메시지에 주석을 남겨두는 것이 좋습니다.
에러 처리:
getProjectDetail
메소드에서는 프로젝트 ID에 해당하는 프로젝트가 존재하지 않을 경우에 대한 처리가 없습니다. 유효성 검사를 추가하거나, 해당 프로젝트가 없을 때의 예외 처리를 구현하는 것이 좋습니다. 예를 들어,projectService.getProjectDetail(projectId)
가 null을 반환할 경우에는 404 Not Found 응답을 반환하도록 수정할 수 있습니다.정렬 조건: TODO로 남겨진 정렬 조건이 필요하다면, 작업의 우선순위를 정하고 관련 기능을 확실히 구현하는 것이 좋습니다. 사용자 경험을 위해 적절한 정렬 기능은 매우 중요할 수 있습니다.
API 문서화:
ProjectDocs
를 통해 API 문서화를 진행하는 것은 좋지만, 구현되지 않은 메소드나 API에 대한 설명이 필요합니다. API의 사용법이나 응답 형식 등을 문서화할 수 있다면, 추후 유지보수와 팀 내 협업에 도움이 될 것입니다.비즈니스 로직 분리: 현재
getProjectDetail
메소드에 비즈니스 로직이 포함되어 있습니다. 가능하다면 서비스 계층에서 로직을 처리하고, 컨트롤러에서는 요청과 응답의 변환에 집중하도록 하는 것이 좋습니다. 이는 코드의 가독성과 유지보수를 향상시킬 수 있습니다.종속성 주입:
@RequiredArgsConstructor
를 이용한 생성자 주입은 좋은 방법이지만, 주입된 객체가 null이 아닌지 확인하는 로깅 또는 검사기능을 추가하는 것도 고려해볼 만합니다.이 외에도 추가적인 피드백이나 개선이 필요한 부분이 있을 수 있으므로 팀 내에서 함께 논의해보는 것이 좋겠습니다.