diff --git a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java index 1a06ec321..5aeb972bf 100644 --- a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java +++ b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java @@ -20,13 +20,13 @@ public interface ApplicationRepository extends JpaRepository boolean existsByNicknameForApply(String nicknameForApply); - List findAllByFirstChoiceUniversityAndVerifyStatusAndTerm( + List findAllByFirstChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse( UniversityInfoForApply firstChoiceUniversity, VerifyStatus verifyStatus, String term); - List findAllBySecondChoiceUniversityAndVerifyStatusAndTerm( + List findAllBySecondChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse( UniversityInfoForApply secondChoiceUniversity, VerifyStatus verifyStatus, String term); - List findAllByThirdChoiceUniversityAndVerifyStatusAndTerm( + List findAllByThirdChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse( UniversityInfoForApply thirdChoiceUniversity, VerifyStatus verifyStatus, String term); @Query(""" diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java index 3208d24af..157c6adcd 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java @@ -97,7 +97,7 @@ private List getFirstChoiceApplicants(List applicationRepository.findAllByFirstChoiceUniversityAndVerifyStatusAndTerm(uia, VerifyStatus.APPROVED, term) + uia -> applicationRepository.findAllByFirstChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse(uia, VerifyStatus.APPROVED, term) ); } @@ -105,7 +105,7 @@ private List getSecondChoiceApplicants(List applicationRepository.findAllBySecondChoiceUniversityAndVerifyStatusAndTerm(uia, VerifyStatus.APPROVED, term) + uia -> applicationRepository.findAllBySecondChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse(uia, VerifyStatus.APPROVED, term) ); } @@ -113,7 +113,7 @@ private List getThirdChoiceApplicants(List applicationRepository.findAllByThirdChoiceUniversityAndVerifyStatusAndTerm(uia, VerifyStatus.APPROVED, term) + uia -> applicationRepository.findAllByThirdChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse(uia, VerifyStatus.APPROVED, term) ); } diff --git a/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java b/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java index f06116ebb..583c31d80 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java @@ -1,9 +1,21 @@ package com.example.solidconnection.application.service; +import com.example.solidconnection.application.domain.Application; +import com.example.solidconnection.application.domain.Gpa; +import com.example.solidconnection.application.domain.LanguageTest; import com.example.solidconnection.application.dto.ApplicantResponse; import com.example.solidconnection.application.dto.ApplicationsResponse; import com.example.solidconnection.application.dto.UniversityApplicantsResponse; +import com.example.solidconnection.application.repository.ApplicationRepository; +import com.example.solidconnection.score.domain.GpaScore; +import com.example.solidconnection.score.domain.LanguageTestScore; +import com.example.solidconnection.score.repository.GpaScoreRepository; +import com.example.solidconnection.score.repository.LanguageTestScoreRepository; +import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.support.integration.BaseIntegrationTest; +import com.example.solidconnection.type.LanguageTestType; +import com.example.solidconnection.type.VerifyStatus; +import com.example.solidconnection.university.domain.UniversityInfoForApply; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -19,6 +31,15 @@ class ApplicationQueryServiceTest extends BaseIntegrationTest { @Autowired private ApplicationQueryService applicationQueryService; + @Autowired + private ApplicationRepository applicationRepository; + + @Autowired + private GpaScoreRepository gpaScoreRepository; + + @Autowired + private LanguageTestScoreRepository languageTestScoreRepository; + @Nested class 지원자_목록_조회_테스트 { @@ -143,6 +164,26 @@ class 지원자_목록_조회_테스트 { List.of(ApplicantResponse.of(이전학기_지원서, false))) )); } + + @Test + void 동일_유저의_여러_지원서_중_최신_지원서만_조회된다() { + // given + Application firstApplication = createApplication(테스트유저_1, 괌대학_A_지원_정보); + firstApplication.setIsDeleteTrue(); + applicationRepository.save(firstApplication); + Application secondApplication = createApplication(테스트유저_1, 네바다주립대학_라스베이거스_지원_정보); + + + // when + ApplicationsResponse response = applicationQueryService.getApplicants( + 테스트유저_1, "", ""); + + // then + assertThat(response.firstChoice().stream() + .flatMap(univ -> univ.applicants().stream()) + .filter(ApplicantResponse::isMine)) + .containsExactly(ApplicantResponse.of(secondApplication, true)); + } } @Nested @@ -211,4 +252,39 @@ class 경쟁자_목록_조회_테스트 { assertThat(response.thirdChoice()).isEmpty(); } } + + private GpaScore createApprovedGpaScore(SiteUser siteUser) { + GpaScore gpaScore = new GpaScore( + new Gpa(4.0, 4.5, "/gpa-report.pdf"), + siteUser + ); + gpaScore.setVerifyStatus(VerifyStatus.APPROVED); + return gpaScoreRepository.save(gpaScore); + } + + private LanguageTestScore createApprovedLanguageTestScore(SiteUser siteUser) { + LanguageTestScore languageTestScore = new LanguageTestScore( + new LanguageTest(LanguageTestType.TOEIC, "100", "/gpa-report.pdf"), + siteUser + ); + languageTestScore.setVerifyStatus(VerifyStatus.APPROVED); + return languageTestScoreRepository.save(languageTestScore); + } + + private Application createApplication( + SiteUser siteUser, + UniversityInfoForApply universityInfoForApply) { + Application application = new Application( + siteUser, + createApprovedGpaScore(siteUser).getGpa(), + createApprovedLanguageTestScore(siteUser).getLanguageTest(), + term, + universityInfoForApply, + null, + null, + null + ); + application.setVerifyStatus(VerifyStatus.APPROVED); + return applicationRepository.save(application); + } }