diff --git a/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java b/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java index a2636c135..df33252fd 100644 --- a/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java +++ b/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java @@ -1,12 +1,20 @@ package com.example.solidconnection.application.dto; import com.example.solidconnection.application.domain.Application; +import com.example.solidconnection.university.domain.UnivApplyInfo; +import java.util.List; public record ApplicationSubmissionResponse( - int applyCount + int totalApplyCount, + int applyCount, + UnivApplyInfoResponse appliedUniversities ) { - public static ApplicationSubmissionResponse from(Application application) { - return new ApplicationSubmissionResponse(application.getUpdateCount()); + public static ApplicationSubmissionResponse of(int totalApplyCount, Application application, List uniApplyInfos) { + return new ApplicationSubmissionResponse( + totalApplyCount, + application.getUpdateCount(), + UnivApplyInfoResponse.of(application, uniApplyInfos) + ); } } diff --git a/src/main/java/com/example/solidconnection/application/dto/UnivApplyInfoResponse.java b/src/main/java/com/example/solidconnection/application/dto/UnivApplyInfoResponse.java new file mode 100644 index 000000000..7755eea55 --- /dev/null +++ b/src/main/java/com/example/solidconnection/application/dto/UnivApplyInfoResponse.java @@ -0,0 +1,41 @@ +package com.example.solidconnection.application.dto; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + +import com.example.solidconnection.application.domain.Application; +import com.example.solidconnection.university.domain.UnivApplyInfo; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public record UnivApplyInfoResponse( + + @JsonProperty("firstChoiceUniversity") + String firstChoiceUnivApplyInfo, + + @JsonProperty("secondChoiceUniversity") + @JsonInclude(NON_NULL) + String secondChoiceUnivApplyInfo, + + @JsonProperty("thirdChoiceUniversity") + @JsonInclude(NON_NULL) + String thirdChoiceUnivApplyInfo) { + + public static UnivApplyInfoResponse of(Application application, List univApplyInfos) { + Map univApplyInfoMap = univApplyInfos.stream() + .collect(Collectors.toMap( + UnivApplyInfo::getId, + UnivApplyInfo::getKoreanName + )); + + return new UnivApplyInfoResponse( + univApplyInfoMap.get(application.getFirstChoiceUnivApplyInfoId()), + application.getSecondChoiceUnivApplyInfoId() != null + ? univApplyInfoMap.get(application.getSecondChoiceUnivApplyInfoId()) : null, + application.getThirdChoiceUnivApplyInfoId() != null + ? univApplyInfoMap.get(application.getThirdChoiceUnivApplyInfoId()) : null + ); + } +} diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java index 3f0337aab..9d7fcbe1f 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -23,7 +23,12 @@ import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.term.domain.Term; import com.example.solidconnection.term.repository.TermRepository; +import com.example.solidconnection.university.domain.UnivApplyInfo; +import com.example.solidconnection.university.repository.UnivApplyInfoRepository; +import java.util.List; +import java.util.Objects; import java.util.Optional; +import java.util.stream.Stream; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,6 +44,7 @@ public class ApplicationSubmissionService { private final LanguageTestScoreRepository languageTestScoreRepository; private final SiteUserRepository siteUserRepository; private final TermRepository termRepository; + private final UnivApplyInfoRepository univApplyInfoRepository; // 학점 및 어학성적이 모두 유효한 경우에만 지원서 등록이 가능하다. // 기존에 있던 status field 우선 APRROVED로 입력시킨다. @@ -52,7 +58,7 @@ public ApplicationSubmissionResponse apply(long siteUserId, ApplyRequest applyRe Term term = termRepository.findByIsCurrentTrue() .orElseThrow(() -> new CustomException(CURRENT_TERM_NOT_FOUND)); - long firstChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.firstChoiceUnivApplyInfoId(); + Long firstChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.firstChoiceUnivApplyInfoId(); Long secondChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.secondChoiceUnivApplyInfoId(); Long thirdChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.thirdChoiceUnivApplyInfoId(); @@ -80,7 +86,17 @@ public ApplicationSubmissionResponse apply(long siteUserId, ApplyRequest applyRe newApplication.setVerifyStatus(VerifyStatus.APPROVED); applicationRepository.save(newApplication); - return ApplicationSubmissionResponse.from(newApplication); + List univApplyInfoIds = Stream.of( + firstChoiceUnivApplyInfoId, + secondChoiceUnivApplyInfoId, + thirdChoiceUnivApplyInfoId + ) + .filter(Objects::nonNull) + .toList(); + + List uniApplyInfos = univApplyInfoRepository.findAllByIds(univApplyInfoIds); + + return ApplicationSubmissionResponse.of(APPLICATION_UPDATE_COUNT_LIMIT, newApplication, uniApplyInfos); } private GpaScore getValidGpaScore(SiteUser siteUser, Long gpaScoreId) { diff --git a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java index 10a72de0b..192b4f601 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java @@ -91,8 +91,16 @@ void setUp() { // then Application savedApplication = applicationRepository.findBySiteUserIdAndTermId(user.getId(), term.getId()).orElseThrow(); assertAll( + () -> assertThat(response.totalApplyCount()) + .isEqualTo(APPLICATION_UPDATE_COUNT_LIMIT), () -> assertThat(response.applyCount()) .isEqualTo(savedApplication.getUpdateCount()), + () -> assertThat(response.appliedUniversities().firstChoiceUnivApplyInfo()) + .isEqualTo(괌대학_A_지원_정보.getKoreanName()), + () -> assertThat(response.appliedUniversities().secondChoiceUnivApplyInfo()) + .isEqualTo(괌대학_B_지원_정보.getKoreanName()), + () -> assertThat(response.appliedUniversities().thirdChoiceUnivApplyInfo()) + .isEqualTo(서던덴마크대학교_지원_정보.getKoreanName()), () -> assertThat(savedApplication.getVerifyStatus()) .isEqualTo(VerifyStatus.APPROVED), () -> assertThat(savedApplication.isDelete())