From b3ca493f42e503432add50ef6f0e7c1c2db3fcd7 Mon Sep 17 00:00:00 2001 From: Hong Jun Date: Tue, 18 Jul 2023 01:29:06 +0900 Subject: [PATCH 1/3] =?UTF-8?q?#38=20[FEAT]=20=ED=95=B4=EB=8B=B9=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20=EB=82=B4=20=ED=9A=8C?= =?UTF-8?q?=EA=B3=A0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/controller/ReviewController.java | 6 ++++ .../response/MyReviewProjectResponseDto.java | 20 +++++++++++++ .../review/repository/ReviewRepository.java | 1 + .../service/Impl/ReviewServiceImpl.java | 30 +++++++++++++++++++ .../api/review/service/ReviewService.java | 3 ++ .../common/response/SuccessStatus.java | 5 ++-- 6 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/dto/response/MyReviewProjectResponseDto.java diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/controller/ReviewController.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/controller/ReviewController.java index d1068be..6422b1e 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/controller/ReviewController.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/controller/ReviewController.java @@ -1,6 +1,7 @@ package com.puzzling.puzzlingServer.api.review.controller; import com.puzzling.puzzlingServer.api.review.dto.request.Review5FRequestDto; +import com.puzzling.puzzlingServer.api.review.dto.response.MyReviewProjectResponseDto; import com.puzzling.puzzlingServer.api.review.dto.response.ReviewActionPlanResponseDto; import com.puzzling.puzzlingServer.api.review.dto.request.ReviewAARRequestDto; import com.puzzling.puzzlingServer.api.review.dto.response.ReviewPreviousTemplateResponseDto; @@ -57,4 +58,9 @@ public ApiResponse getPreviousReviewTemplate( public ApiResponse getReviewActionPlans(@PathVariable Long memberId, @PathVariable Long projectId) { return ApiResponse.success(SuccessStatus.GET_REVIEW_ACTION_PLAN, reviewService.getReviewActionPlans(memberId, projectId)); } + + @GetMapping("member/{memberId}/project/{projectId}/review") + public ApiResponse getMyReviewProjects(@PathVariable Long memberId, @PathVariable Long projectId) { + return ApiResponse.success(SuccessStatus.GET_MY_REVIEW_PROJECT, reviewService.getMyReviewProjects(memberId, projectId)); + } } diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/dto/response/MyReviewProjectResponseDto.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/dto/response/MyReviewProjectResponseDto.java new file mode 100644 index 0000000..a94508a --- /dev/null +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/dto/response/MyReviewProjectResponseDto.java @@ -0,0 +1,20 @@ +package com.puzzling.puzzlingServer.api.review.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import static lombok.AccessLevel.PRIVATE; + +@Getter +@NoArgsConstructor(access = PRIVATE) +@AllArgsConstructor +public class MyReviewProjectResponseDto { + private Long reviewId; + private String reviewDate; + private String contents; + + public static MyReviewProjectResponseDto of(Long reviewId, String reviewDate, String contents) { + return new MyReviewProjectResponseDto(reviewId,reviewDate,contents); + } +} diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/repository/ReviewRepository.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/repository/ReviewRepository.java index 2db52c7..97ecc6a 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/repository/ReviewRepository.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/repository/ReviewRepository.java @@ -24,4 +24,5 @@ public interface ReviewRepository extends JpaRepository { List findAllByMemberIdAndProjectIdOrderByReviewDateAsc(Long memberId, Long projectId); List findAllByMemberIdAndProjectIdOrderByReviewDateDesc(Long memberId, Long projectId); + Review findAllByMemberIdAndProjectId(Long memberId, Long projectId); } diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/service/Impl/ReviewServiceImpl.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/service/Impl/ReviewServiceImpl.java index 9e0b8db..bf4cad0 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/service/Impl/ReviewServiceImpl.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/service/Impl/ReviewServiceImpl.java @@ -4,6 +4,7 @@ import com.puzzling.puzzlingServer.api.project.repository.UserProjectRepository; import com.puzzling.puzzlingServer.api.review.domain.Review; import com.puzzling.puzzlingServer.api.review.dto.request.Review5FRequestDto; +import com.puzzling.puzzlingServer.api.review.dto.response.MyReviewProjectResponseDto; import com.puzzling.puzzlingServer.api.review.dto.response.ReviewActionPlanResponseDto; import com.puzzling.puzzlingServer.api.review.dto.request.ReviewAARRequestDto; @@ -191,6 +192,35 @@ public List getReviewActionPlans(Long memberId, Lon .collect(Collectors.toList()); } + @Override + @Transactional + public List getMyReviewProjects(Long memberId, Long projectId) { + List findReviews = reviewRepository.findAllByMemberIdAndProjectIdOrderByReviewDateDesc(memberId, projectId); + + if (findReviews.isEmpty()) { + throw new BadRequestException("유저가 해당 프로젝트 팀원이 아닙니다."); + } + return findReviews.stream() + .map(findReview -> { + String reviewTemplateName = findReview.getReviewTemplate().getName(); + + switch (reviewTemplateName) { + case "TIL": + ReviewTIL reviewTIL = findReviewByReviewId(findReview.getId(), reviewTILRepository, "TIL"); + return MyReviewProjectResponseDto.of(findReview.getId(), findReview.getReviewDate(), reviewTIL.getActionPlan()); + case "5F": + Review5F review5F = findReviewByReviewId(findReview.getId(), review5FRepository, "5F"); + return MyReviewProjectResponseDto.of(findReview.getId(), findReview.getReviewDate(), review5F.getActionPlan()); + case "AAR": + ReviewAAR reviewAAR = findReviewByReviewId(findReview.getId(), reviewAARRepository, "AAR"); + return MyReviewProjectResponseDto.of(findReview.getId(), findReview.getReviewDate(), reviewAAR.getActionPlan()); + default: + throw new BadRequestException("올바르지 않은 리뷰 템플릿 이름: " + reviewTemplateName); + } + }) + .collect(Collectors.toList()); + } + private ReviewTemplate findReviewTemplateById (Long reviewTemplateId) { return reviewTemplateRepository.findById(reviewTemplateId) .orElseThrow(() -> new NotFoundException("해당하는 회고 팀플릿이 없습니다.")); diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/service/ReviewService.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/service/ReviewService.java index ec81bfa..c7dfe31 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/service/ReviewService.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/service/ReviewService.java @@ -1,6 +1,7 @@ package com.puzzling.puzzlingServer.api.review.service; import com.puzzling.puzzlingServer.api.review.dto.request.Review5FRequestDto; +import com.puzzling.puzzlingServer.api.review.dto.response.MyReviewProjectResponseDto; import com.puzzling.puzzlingServer.api.review.dto.response.ReviewActionPlanResponseDto; import com.puzzling.puzzlingServer.api.review.dto.request.ReviewAARRequestDto; import com.puzzling.puzzlingServer.api.review.dto.response.ReviewPreviousTemplateResponseDto; @@ -23,4 +24,6 @@ public interface ReviewService { ReviewPreviousTemplateResponseDto getPreviousReviewTemplate(Long memberId, Long projectId); List getReviewActionPlans(Long memberId, Long projectId); + + List getMyReviewProjects(Long memberId, Long projectId); } diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/common/response/SuccessStatus.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/common/response/SuccessStatus.java index 50fbcce..e2d73e1 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/common/response/SuccessStatus.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/common/response/SuccessStatus.java @@ -34,9 +34,10 @@ public enum SuccessStatus { GET_REVIEW_TEMPLATE_SUCCESS(HttpStatus.OK,"회고 템플릿 목록 조회 성공"), POST_REVIEW_SUCCESS(HttpStatus.CREATED,"회고 글 작성 성공"), GET_REVIEW_PREVIOUS_TEMPLATE(HttpStatus.OK, "이전 회고 템플릿 조회 성공"), - GET_REVIEW_ACTION_PLAN(HttpStatus.OK, "ACTIONPLAN 내용 조회 성공") + GET_REVIEW_ACTION_PLAN(HttpStatus.OK, "ACTIONPLAN 내용 조회 성공"), + GET_MY_REVIEW_PROJECT(HttpStatus.OK, "해당 프로젝트 내 회고 리스트 조회 성공") ; - + private final HttpStatus httpStatus; private final String message; From 5334e0de56608a87484ba1d6479665da44368588 Mon Sep 17 00:00:00 2001 From: Hong Jun Date: Tue, 18 Jul 2023 02:04:33 +0900 Subject: [PATCH 2/3] =?UTF-8?q?#38=20[FIX]=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../puzzlingServer/api/review/controller/ReviewController.java | 2 +- .../puzzlingServer/api/review/repository/ReviewRepository.java | 1 - .../puzzling/puzzlingServer/common/response/SuccessStatus.java | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/controller/ReviewController.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/controller/ReviewController.java index 6422b1e..c1e2cc7 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/controller/ReviewController.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/controller/ReviewController.java @@ -61,6 +61,6 @@ public ApiResponse getReviewActionPlans(@PathVariab @GetMapping("member/{memberId}/project/{projectId}/review") public ApiResponse getMyReviewProjects(@PathVariable Long memberId, @PathVariable Long projectId) { - return ApiResponse.success(SuccessStatus.GET_MY_REVIEW_PROJECT, reviewService.getMyReviewProjects(memberId, projectId)); + return ApiResponse.success(SuccessStatus.GET_PROJECT_MY_REVIEWS_SUCCESS, reviewService.getMyReviewProjects(memberId, projectId)); } } diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/repository/ReviewRepository.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/repository/ReviewRepository.java index 97ecc6a..2db52c7 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/repository/ReviewRepository.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/review/repository/ReviewRepository.java @@ -24,5 +24,4 @@ public interface ReviewRepository extends JpaRepository { List findAllByMemberIdAndProjectIdOrderByReviewDateAsc(Long memberId, Long projectId); List findAllByMemberIdAndProjectIdOrderByReviewDateDesc(Long memberId, Long projectId); - Review findAllByMemberIdAndProjectId(Long memberId, Long projectId); } diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/common/response/SuccessStatus.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/common/response/SuccessStatus.java index e2d73e1..affa7d2 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/common/response/SuccessStatus.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/common/response/SuccessStatus.java @@ -35,7 +35,7 @@ public enum SuccessStatus { POST_REVIEW_SUCCESS(HttpStatus.CREATED,"회고 글 작성 성공"), GET_REVIEW_PREVIOUS_TEMPLATE(HttpStatus.OK, "이전 회고 템플릿 조회 성공"), GET_REVIEW_ACTION_PLAN(HttpStatus.OK, "ACTIONPLAN 내용 조회 성공"), - GET_MY_REVIEW_PROJECT(HttpStatus.OK, "해당 프로젝트 내 회고 리스트 조회 성공") + GET_PROJECT_MY_REVIEWS_SUCCESS(HttpStatus.OK, "해당 프로젝트 내 회고 리스트 조회 성공") ; private final HttpStatus httpStatus; From 9b11e90ce6c59e1b44cd6219213620dce53dffaf Mon Sep 17 00:00:00 2001 From: Hong Jun Date: Tue, 18 Jul 2023 03:01:33 +0900 Subject: [PATCH 3/3] =?UTF-8?q?#40=20[FIX]=20=EB=8B=89=EB=84=A4=EC=9E=84?= =?UTF-8?q?=20=EC=A4=91=EB=B3=B5=20=EB=B6=88=EA=B0=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/project/repository/UserProjectRepository.java | 2 ++ .../api/project/service/Impl/ProjectServiceImpl.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/project/repository/UserProjectRepository.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/project/repository/UserProjectRepository.java index e294b62..6b49eea 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/project/repository/UserProjectRepository.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/project/repository/UserProjectRepository.java @@ -19,4 +19,6 @@ public interface UserProjectRepository extends JpaRepository List findAllByProjectIdOrderByReviewCountDesc(Long projectId); Boolean existsByMemberIdAndProjectId(Long memberId, Long projectId); + + boolean existsByProjectIdAndNickname(Long projectId, String memberProjectNickname); } diff --git a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/project/service/Impl/ProjectServiceImpl.java b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/project/service/Impl/ProjectServiceImpl.java index 50ec38f..eb0873b 100644 --- a/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/project/service/Impl/ProjectServiceImpl.java +++ b/puzzlingServer/src/main/java/com/puzzling/puzzlingServer/api/project/service/Impl/ProjectServiceImpl.java @@ -184,6 +184,9 @@ public ProjectJoinResponseDto joinProject(Long memberId, ProjectJoinRequestDto p if (userProjectRepository.existsByMemberIdAndProjectId(memberId, projectJoinRequestDto.getProjectId())){ throw new BadRequestException(("이미 프로젝트에 참여한 팀원입니다.")); } + if (userProjectRepository.existsByProjectIdAndNickname(projectJoinRequestDto.getProjectId(),projectJoinRequestDto.getMemberProjectNickname())){ + throw new BadRequestException(("이미 프로젝트에 있는 닉네임입니다.")); + } Member member = findMemberById(memberId); Project project = findProjectById(projectJoinRequestDto.getProjectId());