From 53d8cec5d7131599d1116a88b36b9a226bcbcd08 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 Date: Thu, 30 Oct 2025 21:19:51 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=EC=A7=80=EC=9B=90=EC=84=9C=20?= =?UTF-8?q?=EC=A0=9C=EC=B6=9C=20=EC=8B=9C=20=EC=A7=80=EC=9B=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=99=EB=AA=85=20=EC=9D=91=EB=8B=B5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/ApplicationSubmissionResponse.java | 14 +++++-- .../dto/UnivApplyInfoResponse.java | 41 +++++++++++++++++++ .../service/ApplicationSubmissionService.java | 20 ++++++++- 3 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/example/solidconnection/application/dto/UnivApplyInfoResponse.java 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 4fd403d3a..02e322264 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -20,7 +20,12 @@ import com.example.solidconnection.score.repository.LanguageTestScoreRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +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.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -36,6 +41,7 @@ public class ApplicationSubmissionService { private final GpaScoreRepository gpaScoreRepository; private final LanguageTestScoreRepository languageTestScoreRepository; private final SiteUserRepository siteUserRepository; + private final UnivApplyInfoRepository univApplyInfoRepository; @Value("${university.term}") private String term; @@ -50,7 +56,7 @@ public ApplicationSubmissionResponse apply(long siteUserId, ApplyRequest applyRe GpaScore gpaScore = getValidGpaScore(siteUser, applyRequest.gpaScoreId()); LanguageTestScore languageTestScore = getValidLanguageTestScore(siteUser, applyRequest.languageTestScoreId()); - long firstChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.firstChoiceUnivApplyInfoId(); + Long firstChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.firstChoiceUnivApplyInfoId(); Long secondChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.secondChoiceUnivApplyInfoId(); Long thirdChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.thirdChoiceUnivApplyInfoId(); @@ -78,7 +84,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) { From 16f46141926d83e1cad91953d7bd3bf39427e2ac Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 Date: Thu, 30 Oct 2025 21:20:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?test:=20=EC=A7=80=EC=9B=90=EC=84=9C=20?= =?UTF-8?q?=EC=A0=9C=EC=B6=9C=20=EC=8B=9C=20=EC=A7=80=EC=9B=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=99=EB=AA=85=20=EC=9D=91=EB=8B=B5=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ApplicationSubmissionServiceTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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 5281faa3e..ae67432c5 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java @@ -86,8 +86,16 @@ void setUp() { // then Application savedApplication = applicationRepository.findBySiteUserIdAndTerm(user.getId(), term).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())