From 0a6a6361b34784e47da46d3ed49c2381ec667348 Mon Sep 17 00:00:00 2001 From: hseong3243 <48748265+hseong3243@users.noreply.github.com> Date: Mon, 6 Nov 2023 12:06:18 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=B3=B4=ED=98=B8=EC=86=8C=EC=97=90=20?= =?UTF-8?q?=EB=8B=AC=EB=A6=B0=20=ED=9B=84=EA=B8=B0=20=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20api=20=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=B4=89=EC=82=AC=EC=9E=90=EC=9D=98=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EA=B0=9C=EC=88=98=EB=A5=BC=20=EC=9E=98=EB=AA=BB=20=EA=B0=80?= =?UTF-8?q?=EC=A0=B8=EC=98=A4=EB=8A=94=20=EB=A1=9C=EC=A7=81=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=9C=EB=8B=A4.=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 봉사자의 리뷰 개수를 가져오는 로직을 수정한다. * refactor: Volunteer 클래스 메서드 순서 변경 --- .../domain/applicant/Applicant.java | 10 ++++++++ .../domain/recruitment/Recruitment.java | 4 +++ .../anifriends/domain/review/Review.java | 1 + .../response/FindShelterReviewsResponse.java | 4 +-- .../domain/volunteer/Volunteer.java | 25 +++++++++++++------ .../response/FindVolunteerMyPageResponse.java | 2 +- .../review/service/ReviewServiceTest.java | 2 +- .../controller/VolunteerControllerTest.java | 2 +- 8 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/clova/anifriends/domain/applicant/Applicant.java b/src/main/java/com/clova/anifriends/domain/applicant/Applicant.java index 77ba4c3a5..7894f7e51 100644 --- a/src/main/java/com/clova/anifriends/domain/applicant/Applicant.java +++ b/src/main/java/com/clova/anifriends/domain/applicant/Applicant.java @@ -56,8 +56,10 @@ public Applicant( validateRecruitment(recruitment); checkConcurrency(recruitment); this.recruitment = recruitment; + recruitment.addApplicant(this); validateVolunteer(volunteer); this.volunteer = volunteer; + volunteer.addApplicant(this); this.status = ApplicantStatus.PENDING; } @@ -77,6 +79,10 @@ public Long getApplicantId() { return applicantId; } + public Review getReview() { + return review; + } + private void validateRecruitment(Recruitment recruitment) { if (recruitment == null) { throw new ApplicantBadRequestException("봉사는 필수 입력 항목입니다."); @@ -105,4 +111,8 @@ public boolean isAttendance() { public boolean hasReview() { return review != null; } + + public void registerReview(Review review) { + this.review = review; + } } diff --git a/src/main/java/com/clova/anifriends/domain/recruitment/Recruitment.java b/src/main/java/com/clova/anifriends/domain/recruitment/Recruitment.java index dea9ab56c..b95af3c38 100644 --- a/src/main/java/com/clova/anifriends/domain/recruitment/Recruitment.java +++ b/src/main/java/com/clova/anifriends/domain/recruitment/Recruitment.java @@ -158,4 +158,8 @@ public void closeRecruitment() { public List getApplicants() { return Collections.unmodifiableList(applicants); } + + public void addApplicant(Applicant applicant) { + applicants.add(applicant); + } } diff --git a/src/main/java/com/clova/anifriends/domain/review/Review.java b/src/main/java/com/clova/anifriends/domain/review/Review.java index 3abafc187..e28d50a33 100644 --- a/src/main/java/com/clova/anifriends/domain/review/Review.java +++ b/src/main/java/com/clova/anifriends/domain/review/Review.java @@ -49,6 +49,7 @@ public Review( validateApplicant(applicant); validateImageUrlsSize(imageUrls); this.applicant = applicant; + this.applicant.registerReview(this); this.content = new ReviewContent(content); this.imageUrls = imageUrls == null ? null : imageUrls.stream() .map(url -> new ReviewImage(this, url)) diff --git a/src/main/java/com/clova/anifriends/domain/review/dto/response/FindShelterReviewsResponse.java b/src/main/java/com/clova/anifriends/domain/review/dto/response/FindShelterReviewsResponse.java index 27b4f487f..8b228da96 100644 --- a/src/main/java/com/clova/anifriends/domain/review/dto/response/FindShelterReviewsResponse.java +++ b/src/main/java/com/clova/anifriends/domain/review/dto/response/FindShelterReviewsResponse.java @@ -19,7 +19,7 @@ public record FindShelterReviewResponse( String volunteerName, int temperature, String volunteerImageUrl, - int VolunteerReviewCount) { + long VolunteerReviewCount) { public static FindShelterReviewResponse from(Review review) { Volunteer volunteer = review.getApplicant().getVolunteer(); @@ -31,7 +31,7 @@ public static FindShelterReviewResponse from(Review review) { volunteer.getName(), volunteer.getTemperature(), volunteer.getVolunteerImageUrl(), - volunteer.getApplications().size() + volunteer.getReviewCount() ); } } diff --git a/src/main/java/com/clova/anifriends/domain/volunteer/Volunteer.java b/src/main/java/com/clova/anifriends/domain/volunteer/Volunteer.java index 710c5b965..56fe613bb 100644 --- a/src/main/java/com/clova/anifriends/domain/volunteer/Volunteer.java +++ b/src/main/java/com/clova/anifriends/domain/volunteer/Volunteer.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -64,7 +65,7 @@ public class Volunteer extends BaseTimeEntity { private VolunteerName name; @OneToMany(mappedBy = "volunteer", fetch = FetchType.LAZY) - private List applications = new ArrayList<>(); + private List applicants = new ArrayList<>(); @OneToOne(mappedBy = "volunteer") private VolunteerImage volunteerImage; @@ -94,6 +95,20 @@ private LocalDate validateBirthDate(String birthDate) { } } + public void addApplicant(Applicant applicant) { + applicants.add(applicant); + } + + public void updateVolunteerImage(VolunteerImage volunteerImage) { + this.volunteerImage = volunteerImage; + } + + public long getReviewCount() { + return applicants.stream() + .filter(applicant -> Objects.nonNull(applicant.getReview())) + .count(); + } + public Long getVolunteerId() { return volunteerId; } @@ -130,11 +145,7 @@ public String getVolunteerImageUrl() { return this.volunteerImage == null ? null : volunteerImage.getImageUrl(); } - public List getApplications() { - return Collections.unmodifiableList(applications); - } - - public void updateVolunteerImage(VolunteerImage volunteerImage) { - this.volunteerImage = volunteerImage; + public List getApplicants() { + return Collections.unmodifiableList(applicants); } } diff --git a/src/main/java/com/clova/anifriends/domain/volunteer/dto/response/FindVolunteerMyPageResponse.java b/src/main/java/com/clova/anifriends/domain/volunteer/dto/response/FindVolunteerMyPageResponse.java index 08198485e..55c1adeb9 100644 --- a/src/main/java/com/clova/anifriends/domain/volunteer/dto/response/FindVolunteerMyPageResponse.java +++ b/src/main/java/com/clova/anifriends/domain/volunteer/dto/response/FindVolunteerMyPageResponse.java @@ -21,7 +21,7 @@ public static FindVolunteerMyPageResponse from(Volunteer volunteer) { volunteer.getBirthDate(), volunteer.getPhoneNumber(), volunteer.getTemperature(), - volunteer.getApplications().stream() + volunteer.getApplicants().stream() .filter(applicant -> applicant.getStatus().equals(ApplicantStatus.ATTENDANCE)) .count(), volunteer.getVolunteerImageUrl() diff --git a/src/test/java/com/clova/anifriends/domain/review/service/ReviewServiceTest.java b/src/test/java/com/clova/anifriends/domain/review/service/ReviewServiceTest.java index b3345c873..0c929a11c 100644 --- a/src/test/java/com/clova/anifriends/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/com/clova/anifriends/domain/review/service/ReviewServiceTest.java @@ -24,9 +24,9 @@ import com.clova.anifriends.domain.review.Review; import com.clova.anifriends.domain.review.dto.response.FindReviewResponse; import com.clova.anifriends.domain.review.dto.response.FindShelterReviewsResponse; +import com.clova.anifriends.domain.review.dto.response.FindVolunteerReviewsResponse; import com.clova.anifriends.domain.review.exception.ApplicantNotFoundException; import com.clova.anifriends.domain.review.exception.ReviewBadRequestException; -import com.clova.anifriends.domain.review.dto.response.FindVolunteerReviewsResponse; import com.clova.anifriends.domain.review.exception.ReviewNotFoundException; import com.clova.anifriends.domain.review.repository.ReviewRepository; import com.clova.anifriends.domain.shelter.Shelter; diff --git a/src/test/java/com/clova/anifriends/domain/volunteer/controller/VolunteerControllerTest.java b/src/test/java/com/clova/anifriends/domain/volunteer/controller/VolunteerControllerTest.java index 59cc6e5f4..77d3af1c4 100644 --- a/src/test/java/com/clova/anifriends/domain/volunteer/controller/VolunteerControllerTest.java +++ b/src/test/java/com/clova/anifriends/domain/volunteer/controller/VolunteerControllerTest.java @@ -74,7 +74,7 @@ void findVolunteerMyPage() throws Exception { volunteer.getBirthDate(), volunteer.getPhoneNumber(), volunteer.getTemperature(), - volunteer.getApplications().stream() + volunteer.getApplicants().stream() .filter(applicant -> applicant.getStatus().equals(ApplicantStatus.ATTENDANCE)) .count(), VolunteerImageFixture.volunteerImage(volunteer).getImageUrl());