Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ public interface ApplicationRepository extends JpaRepository<Application, Long>

boolean existsByNicknameForApply(String nicknameForApply);

List<Application> findAllByFirstChoiceUniversityAndVerifyStatusAndTerm(
List<Application> findAllByFirstChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse(
UniversityInfoForApply firstChoiceUniversity, VerifyStatus verifyStatus, String term);

List<Application> findAllBySecondChoiceUniversityAndVerifyStatusAndTerm(
List<Application> findAllBySecondChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse(
UniversityInfoForApply secondChoiceUniversity, VerifyStatus verifyStatus, String term);

List<Application> findAllByThirdChoiceUniversityAndVerifyStatusAndTerm(
List<Application> findAllByThirdChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse(
UniversityInfoForApply thirdChoiceUniversity, VerifyStatus verifyStatus, String term);

@Query("""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,23 +97,23 @@ private List<UniversityApplicantsResponse> getFirstChoiceApplicants(List<Univers
return getApplicantsByChoice(
universities,
siteUser,
uia -> applicationRepository.findAllByFirstChoiceUniversityAndVerifyStatusAndTerm(uia, VerifyStatus.APPROVED, term)
uia -> applicationRepository.findAllByFirstChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse(uia, VerifyStatus.APPROVED, term)
);
}

private List<UniversityApplicantsResponse> getSecondChoiceApplicants(List<University> universities, SiteUser siteUser, String term) {
return getApplicantsByChoice(
universities,
siteUser,
uia -> applicationRepository.findAllBySecondChoiceUniversityAndVerifyStatusAndTerm(uia, VerifyStatus.APPROVED, term)
uia -> applicationRepository.findAllBySecondChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse(uia, VerifyStatus.APPROVED, term)
);
}

private List<UniversityApplicantsResponse> getThirdChoiceApplicants(List<University> universities, SiteUser siteUser, String term) {
return getApplicantsByChoice(
universities,
siteUser,
uia -> applicationRepository.findAllByThirdChoiceUniversityAndVerifyStatusAndTerm(uia, VerifyStatus.APPROVED, term)
uia -> applicationRepository.findAllByThirdChoiceUniversityAndVerifyStatusAndTermAndIsDeleteFalse(uia, VerifyStatus.APPROVED, term)
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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 지원자_목록_조회_테스트 {

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
}