Skip to content

Commit 093b6af

Browse files
authored
refactor: 모의지원 시 지원한 대학 정보 응답 추가 (#539)
* refactor: 지원서 제출 시 지원 대학명 응답 추가 * test: 지원서 제출 시 지원 대학명 응답 관련 테스트 수정
1 parent f653186 commit 093b6af

4 files changed

Lines changed: 78 additions & 5 deletions

File tree

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
package com.example.solidconnection.application.dto;
22

33
import com.example.solidconnection.application.domain.Application;
4+
import com.example.solidconnection.university.domain.UnivApplyInfo;
5+
import java.util.List;
46

57
public record ApplicationSubmissionResponse(
6-
int applyCount
8+
int totalApplyCount,
9+
int applyCount,
10+
UnivApplyInfoResponse appliedUniversities
711
) {
812

9-
public static ApplicationSubmissionResponse from(Application application) {
10-
return new ApplicationSubmissionResponse(application.getUpdateCount());
13+
public static ApplicationSubmissionResponse of(int totalApplyCount, Application application, List<UnivApplyInfo> uniApplyInfos) {
14+
return new ApplicationSubmissionResponse(
15+
totalApplyCount,
16+
application.getUpdateCount(),
17+
UnivApplyInfoResponse.of(application, uniApplyInfos)
18+
);
1119
}
1220
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.example.solidconnection.application.dto;
2+
3+
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
4+
5+
import com.example.solidconnection.application.domain.Application;
6+
import com.example.solidconnection.university.domain.UnivApplyInfo;
7+
import com.fasterxml.jackson.annotation.JsonInclude;
8+
import com.fasterxml.jackson.annotation.JsonProperty;
9+
import java.util.List;
10+
import java.util.Map;
11+
import java.util.stream.Collectors;
12+
13+
public record UnivApplyInfoResponse(
14+
15+
@JsonProperty("firstChoiceUniversity")
16+
String firstChoiceUnivApplyInfo,
17+
18+
@JsonProperty("secondChoiceUniversity")
19+
@JsonInclude(NON_NULL)
20+
String secondChoiceUnivApplyInfo,
21+
22+
@JsonProperty("thirdChoiceUniversity")
23+
@JsonInclude(NON_NULL)
24+
String thirdChoiceUnivApplyInfo) {
25+
26+
public static UnivApplyInfoResponse of(Application application, List<UnivApplyInfo> univApplyInfos) {
27+
Map<Long, String> univApplyInfoMap = univApplyInfos.stream()
28+
.collect(Collectors.toMap(
29+
UnivApplyInfo::getId,
30+
UnivApplyInfo::getKoreanName
31+
));
32+
33+
return new UnivApplyInfoResponse(
34+
univApplyInfoMap.get(application.getFirstChoiceUnivApplyInfoId()),
35+
application.getSecondChoiceUnivApplyInfoId() != null
36+
? univApplyInfoMap.get(application.getSecondChoiceUnivApplyInfoId()) : null,
37+
application.getThirdChoiceUnivApplyInfoId() != null
38+
? univApplyInfoMap.get(application.getThirdChoiceUnivApplyInfoId()) : null
39+
);
40+
}
41+
}

src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@
2323
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
2424
import com.example.solidconnection.term.domain.Term;
2525
import com.example.solidconnection.term.repository.TermRepository;
26+
import com.example.solidconnection.university.domain.UnivApplyInfo;
27+
import com.example.solidconnection.university.repository.UnivApplyInfoRepository;
28+
import java.util.List;
29+
import java.util.Objects;
2630
import java.util.Optional;
31+
import java.util.stream.Stream;
2732
import lombok.RequiredArgsConstructor;
2833
import org.springframework.stereotype.Service;
2934
import org.springframework.transaction.annotation.Transactional;
@@ -39,6 +44,7 @@ public class ApplicationSubmissionService {
3944
private final LanguageTestScoreRepository languageTestScoreRepository;
4045
private final SiteUserRepository siteUserRepository;
4146
private final TermRepository termRepository;
47+
private final UnivApplyInfoRepository univApplyInfoRepository;
4248

4349
// 학점 및 어학성적이 모두 유효한 경우에만 지원서 등록이 가능하다.
4450
// 기존에 있던 status field 우선 APRROVED로 입력시킨다.
@@ -52,7 +58,7 @@ public ApplicationSubmissionResponse apply(long siteUserId, ApplyRequest applyRe
5258
Term term = termRepository.findByIsCurrentTrue()
5359
.orElseThrow(() -> new CustomException(CURRENT_TERM_NOT_FOUND));
5460

55-
long firstChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.firstChoiceUnivApplyInfoId();
61+
Long firstChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.firstChoiceUnivApplyInfoId();
5662
Long secondChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.secondChoiceUnivApplyInfoId();
5763
Long thirdChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.thirdChoiceUnivApplyInfoId();
5864

@@ -80,7 +86,17 @@ public ApplicationSubmissionResponse apply(long siteUserId, ApplyRequest applyRe
8086
newApplication.setVerifyStatus(VerifyStatus.APPROVED);
8187
applicationRepository.save(newApplication);
8288

83-
return ApplicationSubmissionResponse.from(newApplication);
89+
List<Long> univApplyInfoIds = Stream.of(
90+
firstChoiceUnivApplyInfoId,
91+
secondChoiceUnivApplyInfoId,
92+
thirdChoiceUnivApplyInfoId
93+
)
94+
.filter(Objects::nonNull)
95+
.toList();
96+
97+
List<UnivApplyInfo> uniApplyInfos = univApplyInfoRepository.findAllByIds(univApplyInfoIds);
98+
99+
return ApplicationSubmissionResponse.of(APPLICATION_UPDATE_COUNT_LIMIT, newApplication, uniApplyInfos);
84100
}
85101

86102
private GpaScore getValidGpaScore(SiteUser siteUser, Long gpaScoreId) {

src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,16 @@ void setUp() {
9191
// then
9292
Application savedApplication = applicationRepository.findBySiteUserIdAndTermId(user.getId(), term.getId()).orElseThrow();
9393
assertAll(
94+
() -> assertThat(response.totalApplyCount())
95+
.isEqualTo(APPLICATION_UPDATE_COUNT_LIMIT),
9496
() -> assertThat(response.applyCount())
9597
.isEqualTo(savedApplication.getUpdateCount()),
98+
() -> assertThat(response.appliedUniversities().firstChoiceUnivApplyInfo())
99+
.isEqualTo(괌대학_A_지원_정보.getKoreanName()),
100+
() -> assertThat(response.appliedUniversities().secondChoiceUnivApplyInfo())
101+
.isEqualTo(괌대학_B_지원_정보.getKoreanName()),
102+
() -> assertThat(response.appliedUniversities().thirdChoiceUnivApplyInfo())
103+
.isEqualTo(서던덴마크대학교_지원_정보.getKoreanName()),
96104
() -> assertThat(savedApplication.getVerifyStatus())
97105
.isEqualTo(VerifyStatus.APPROVED),
98106
() -> assertThat(savedApplication.isDelete())

0 commit comments

Comments
 (0)