diff --git a/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java b/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java index 0a258ef12..c6ea2a2ae 100644 --- a/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java +++ b/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java @@ -3,20 +3,17 @@ import com.example.solidconnection.common.resolver.AuthorizedUser; import com.example.solidconnection.university.dto.IsLikeResponse; import com.example.solidconnection.university.dto.UnivApplyInfoDetailResponse; -import com.example.solidconnection.university.dto.UnivApplyInfoFilterSearchRequest; import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponses; import com.example.solidconnection.university.dto.UnivApplyInfoRecommendsResponse; import com.example.solidconnection.university.service.LikedUnivApplyInfoService; import com.example.solidconnection.university.service.UnivApplyInfoQueryService; import com.example.solidconnection.university.service.UnivApplyInfoRecommendService; -import jakarta.validation.Valid; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -87,14 +84,6 @@ public ResponseEntity getUnivApplyInfoDetails( return ResponseEntity.ok(univApplyInfoDetailResponse); } - @GetMapping("/search/filter") - public ResponseEntity searchUnivApplyInfoByFilter( - @Valid @ModelAttribute UnivApplyInfoFilterSearchRequest request - ) { - UnivApplyInfoPreviewResponses response = univApplyInfoQueryService.searchUnivApplyInfoByFilter(request); - return ResponseEntity.ok(response); - } - @GetMapping("/search/text") public ResponseEntity searchUnivApplyInfoByText( @RequestParam(required = false) String value diff --git a/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java b/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java index a727a74ed..64d264f35 100644 --- a/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java +++ b/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java @@ -10,6 +10,7 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; @@ -36,8 +37,9 @@ public class UnivApplyInfo extends BaseEntity { @Column(nullable = false, name = "term_id") private long termId; - @Column(name = "home_university_id") - private Long homeUniversityId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "home_university_id") + private HomeUniversity homeUniversity; @Column(nullable = false, length = 100) private String koreanName; diff --git a/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoFilterSearchRequest.java b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoFilterSearchRequest.java deleted file mode 100644 index a49079319..000000000 --- a/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoFilterSearchRequest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.example.solidconnection.university.dto; - -import com.example.solidconnection.university.domain.LanguageTestType; -import jakarta.validation.constraints.NotNull; -import java.util.List; - -public record UnivApplyInfoFilterSearchRequest( - - @NotNull(message = "어학 시험 종류를 선택해주세요.") - LanguageTestType languageTestType, - String testScore, - List countryCode -) { - -} diff --git a/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponse.java b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponse.java index 37deee8f2..1a6d1ce93 100644 --- a/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponse.java +++ b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponse.java @@ -9,6 +9,7 @@ public record UnivApplyInfoPreviewResponse( long id, String term, String koreanName, + String homeUniversityName, String region, String country, String logoImageUrl, @@ -16,17 +17,22 @@ public record UnivApplyInfoPreviewResponse( int studentCapacity, List languageRequirements) { - public static UnivApplyInfoPreviewResponse from(UnivApplyInfo univApplyInfo, String termName) { + public static UnivApplyInfoPreviewResponse of(UnivApplyInfo univApplyInfo, String termName) { List languageRequirementResponses = new ArrayList<>( univApplyInfo.getLanguageRequirements().stream() .map(LanguageRequirementResponse::from) .toList()); Collections.sort(languageRequirementResponses); + String homeUniversityName = univApplyInfo.getHomeUniversity() != null + ? univApplyInfo.getHomeUniversity().getName() + : null; + return new UnivApplyInfoPreviewResponse( univApplyInfo.getId(), termName, univApplyInfo.getKoreanName(), + homeUniversityName, univApplyInfo.getUniversity().getRegion().getKoreanName(), univApplyInfo.getUniversity().getCountry().getKoreanName(), univApplyInfo.getUniversity().getLogoImageUrl(), diff --git a/src/main/java/com/example/solidconnection/university/repository/HomeUniversityRepository.java b/src/main/java/com/example/solidconnection/university/repository/HomeUniversityRepository.java new file mode 100644 index 000000000..0cfc0593c --- /dev/null +++ b/src/main/java/com/example/solidconnection/university/repository/HomeUniversityRepository.java @@ -0,0 +1,13 @@ +package com.example.solidconnection.university.repository; + +import com.example.solidconnection.university.domain.HomeUniversity; +import java.util.List; +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface HomeUniversityRepository extends JpaRepository { + + List findAllByIdIn(List ids); + + Optional findByName(String name); +} diff --git a/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java b/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java index 684703b58..e5a94d69a 100644 --- a/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java @@ -17,8 +17,13 @@ public interface LikedUnivApplyInfoRepository extends JpaRepository findBySiteUserIdAndUnivApplyInfoId(long siteUserId, long univApplyInfoId); @Query(""" - SELECT u + SELECT DISTINCT u FROM UnivApplyInfo u + LEFT JOIN FETCH u.languageRequirements lr + LEFT JOIN FETCH u.homeUniversity hu + LEFT JOIN FETCH u.university univ + LEFT JOIN FETCH univ.country c + LEFT JOIN FETCH univ.region r JOIN LikedUnivApplyInfo l ON u.id = l.univApplyInfoId WHERE l.siteUserId = :siteUserId """) diff --git a/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java index 5bb56cfc0..1cc25ee35 100644 --- a/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java @@ -19,6 +19,7 @@ public interface UnivApplyInfoRepository extends JpaRepository findAllByRegionCodeAndKeywordsAndTermId(String regionCode, List keywords, Long term); - List findAllByFilter(LanguageTestType testType, String testScore, Long termId, List countryKoreanNames); - List findAllByText(String text, Long termId); } diff --git a/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java b/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java index e15a56d05..cfb5e3a7a 100644 --- a/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java +++ b/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java @@ -2,10 +2,10 @@ import com.example.solidconnection.location.country.domain.QCountry; import com.example.solidconnection.location.region.domain.QRegion; -import com.example.solidconnection.university.domain.LanguageTestType; +import com.example.solidconnection.university.domain.QHomeUniversity; +import com.example.solidconnection.university.domain.QHostUniversity; import com.example.solidconnection.university.domain.QLanguageRequirement; import com.example.solidconnection.university.domain.QUnivApplyInfo; -import com.example.solidconnection.university.domain.QHostUniversity; import com.example.solidconnection.university.domain.UnivApplyInfo; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.dsl.BooleanExpression; @@ -34,6 +34,7 @@ public UnivApplyInfoFilterRepositoryImpl(EntityManager em) { public List findAllByRegionCodeAndKeywordsAndTermId(String regionCode, List keywords, Long termId) { QUnivApplyInfo univApplyInfo = QUnivApplyInfo.univApplyInfo; QHostUniversity university = QHostUniversity.hostUniversity; + QHomeUniversity homeUniversity = QHomeUniversity.homeUniversity; QCountry country = QCountry.country; QLanguageRequirement languageRequirement = QLanguageRequirement.languageRequirement; @@ -41,6 +42,7 @@ public List findAllByRegionCodeAndKeywordsAndTermId(String region .selectFrom(univApplyInfo) .join(univApplyInfo.university, university).fetchJoin() .join(university.country, country).fetchJoin() + .leftJoin(univApplyInfo.homeUniversity, homeUniversity).fetchJoin() .leftJoin(univApplyInfo.languageRequirements, languageRequirement).fetchJoin() .where( regionCodeEq(country, regionCode) @@ -74,51 +76,6 @@ private BooleanExpression createKeywordCondition(StringPath namePath, List findAllByFilter( - LanguageTestType testType, String testScore, Long termId, List countryCodes - ) { - QHostUniversity university = QHostUniversity.hostUniversity; - QUnivApplyInfo univApplyInfo = QUnivApplyInfo.univApplyInfo; - QCountry country = QCountry.country; - QLanguageRequirement languageRequirement = QLanguageRequirement.languageRequirement; - - List filteredUnivApplyInfo = queryFactory.selectFrom(univApplyInfo) - .join(univApplyInfo.university, university) - .join(university.country, country) - .join(univApplyInfo.languageRequirements, languageRequirement) - .fetchJoin() - .where( - languageTestTypeEq(languageRequirement, testType), - termIdEq(univApplyInfo, termId), - countryCodesIn(country, countryCodes) - ) - .distinct() - .fetch(); - - if (testScore == null || testScore.isBlank()) { - return filteredUnivApplyInfo; - } - - /* - * 시험 유형에 따라 성적 비교 방식이 다르다. - * 입력된 점수가 대학에서 요구하는 최소 점수보다 높은지를 '쿼리로' 비교하기엔 쿼리가 지나치게 복잡해진다. - * 따라서 이 부분만 자바 코드로 필터링한다. - * */ - return filteredUnivApplyInfo.stream() - .filter(uai -> isGivenScoreOverMinPassScore(uai, testType, testScore)) - .toList(); - } - - private BooleanExpression languageTestTypeEq( - QLanguageRequirement languageRequirement, LanguageTestType givenTestType - ) { - if (givenTestType == null) { - return null; - } - return languageRequirement.languageTestType.eq(givenTestType); - } - private BooleanExpression termIdEq(QUnivApplyInfo univApplyInfo, Long givenTermId) { if (givenTermId == null) { return null; @@ -126,27 +83,11 @@ private BooleanExpression termIdEq(QUnivApplyInfo univApplyInfo, Long givenTermI return univApplyInfo.termId.eq(givenTermId); } - private BooleanExpression countryCodesIn(QCountry country, List givenCountryCodes) { - if (givenCountryCodes == null || givenCountryCodes.isEmpty()) { - return null; - } - return country.code.in(givenCountryCodes); - } - - private boolean isGivenScoreOverMinPassScore( - UnivApplyInfo univApplyInfo, LanguageTestType givenTestType, String givenTestScore - ) { - return univApplyInfo.getLanguageRequirements().stream() - .filter(languageRequirement -> languageRequirement.getLanguageTestType().equals(givenTestType)) - .findFirst() - .map(requirement -> givenTestType.compare(givenTestScore, requirement.getMinScore())) - .orElse(-1) >= 0; - } - @Override public List findAllByText(String text, Long termId) { QUnivApplyInfo univApplyInfo = QUnivApplyInfo.univApplyInfo; QHostUniversity university = QHostUniversity.hostUniversity; + QHomeUniversity homeUniversity = QHomeUniversity.homeUniversity; QLanguageRequirement languageRequirement = QLanguageRequirement.languageRequirement; QCountry country = QCountry.country; QRegion region = QRegion.region; @@ -155,6 +96,7 @@ public List findAllByText(String text, Long termId) { .join(univApplyInfo.university, university).fetchJoin() .join(university.country, country).fetchJoin() .join(region).on(country.regionCode.eq(region.code)) + .leftJoin(univApplyInfo.homeUniversity, homeUniversity).fetchJoin() .leftJoin(univApplyInfo.languageRequirements, languageRequirement).fetchJoin() .where(termIdEq(univApplyInfo, termId)); diff --git a/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java b/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java index c353edaf0..83ee9feb6 100644 --- a/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java +++ b/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java @@ -18,7 +18,6 @@ import java.util.Set; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -46,7 +45,7 @@ public List getLikedUnivApplyInfos(long siteUserId return univApplyInfos.stream() .map(univApplyInfo -> { String termName = termMap.getOrDefault(univApplyInfo.getTermId(), "Unknown"); - return UnivApplyInfoPreviewResponse.from(univApplyInfo, termName); + return UnivApplyInfoPreviewResponse.of(univApplyInfo, termName); }) .toList(); } diff --git a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java index b8aa878f7..5c11911ad 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java @@ -7,10 +7,9 @@ import com.example.solidconnection.common.exception.CustomException; 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.domain.HostUniversity; +import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.dto.UnivApplyInfoDetailResponse; -import com.example.solidconnection.university.dto.UnivApplyInfoFilterSearchRequest; import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponses; import com.example.solidconnection.university.repository.UnivApplyInfoRepository; @@ -42,34 +41,16 @@ public UnivApplyInfoDetailResponse getUnivApplyInfoDetail(Long univApplyInfoId) return UnivApplyInfoDetailResponse.of(university, univApplyInfo, term.getName()); } - @Transactional(readOnly = true) - public UnivApplyInfoPreviewResponses searchUnivApplyInfoByFilter(UnivApplyInfoFilterSearchRequest request) { - Term term = termRepository.findByIsCurrentTrue() - .orElseThrow(() -> new CustomException(CURRENT_TERM_NOT_FOUND)); - - List responses = univApplyInfoRepository - .findAllByFilter(request.languageTestType(), request.testScore(), term.getId(), request.countryCode()) - .stream() - .map(univApplyInfo -> UnivApplyInfoPreviewResponse.from( - univApplyInfo, - term.getName() - )) - .toList(); - return new UnivApplyInfoPreviewResponses(responses); - } - @Transactional(readOnly = true) @ThunderingHerdCaching(key = "univApplyInfoTextSearch:{0}", cacheManager = "customCacheManager", ttlSec = 86400) public UnivApplyInfoPreviewResponses searchUnivApplyInfoByText(String text) { Term term = termRepository.findByIsCurrentTrue() .orElseThrow(() -> new CustomException(CURRENT_TERM_NOT_FOUND)); - List responses = univApplyInfoRepository.findAllByText(text, term.getId()) - .stream() - .map(univApplyInfo -> UnivApplyInfoPreviewResponse.from( - univApplyInfo, - term.getName() - )) + List univApplyInfos = univApplyInfoRepository.findAllByText(text, term.getId()); + + List responses = univApplyInfos.stream() + .map(univApplyInfo -> UnivApplyInfoPreviewResponse.of(univApplyInfo, term.getName())) .toList(); return new UnivApplyInfoPreviewResponses(responses); } diff --git a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java index a6a2b85fc..872524d63 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java @@ -51,11 +51,8 @@ public UnivApplyInfoRecommendsResponse getPersonalRecommends(long siteUserId) { } return new UnivApplyInfoRecommendsResponse(trimmedRecommends.stream() - .map(univApplyInfo -> UnivApplyInfoPreviewResponse.from( - univApplyInfo, - term.getName() - )) - .toList()); + .map(univApplyInfo -> UnivApplyInfoPreviewResponse.of(univApplyInfo, term.getName())) + .toList()); } private List getGeneralRecommendsExcludingSelected(List alreadyPicked) { @@ -76,11 +73,9 @@ public UnivApplyInfoRecommendsResponse getGeneralRecommends() { .orElseThrow(() -> new CustomException(CURRENT_TERM_NOT_FOUND)); List generalRecommends = new ArrayList<>(generalUnivApplyInfoRecommendService.getGeneralRecommends()); + return new UnivApplyInfoRecommendsResponse(generalRecommends.stream() - .map(univApplyInfo -> UnivApplyInfoPreviewResponse.from( - univApplyInfo, - term.getName() - )) - .toList()); + .map(univApplyInfo -> UnivApplyInfoPreviewResponse.of(univApplyInfo, term.getName())) + .toList()); } } diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index ce4fca9cf..3fa29bd0f 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -148,81 +148,81 @@ VALUES (1, 'US', 'AMERICAS', 'University of Guam', 'university_of_guam', '괌대 'https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/bunkyo_gakuin_university/logo.png', 'https://solid-connection.s3.ap-northeast-2.amazonaws.com/original/bunkyo_gakuin_university/1.png'); -INSERT INTO university_info_for_apply(term_id, university_id, korean_name, semester_requirement, student_capacity, +INSERT INTO university_info_for_apply(term_id, university_id, home_university_id, korean_name, semester_requirement, student_capacity, semester_available_for_dispatch, tuition_fee_type, details_for_major, details_for_apply, details_for_language, details_for_english_course, details_for_accommodation, details) -VALUES (1, 1, '괌대학(A형)', 2, 1, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '파견대학에 지원하는 전공과 본교 전공이 일치해야함', NULL, +VALUES (1, 1, 1, '괌대학(A형)', 2, 1, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '파견대학에 지원하는 전공과 본교 전공이 일치해야함', NULL, '외국어 성적 유효기간이 파견대학의 지원시까지 유효해야함', NULL, NULL, NULL), - (1, 1, '괌대학(B형)', 2, 2, 'IRRELEVANT', 'OVERSEAS_UNIVERSITY_PAYMENT', '파견대학에 지원하는 전공과 본교 전공이 일치해야함', NULL, + (1, 1, 1, '괌대학(B형)', 2, 2, 'IRRELEVANT', 'OVERSEAS_UNIVERSITY_PAYMENT', '파견대학에 지원하는 전공과 본교 전공이 일치해야함', NULL, '외국어 성적 유효기간이 파견대학의 지원시까지 유효해야함', NULL, NULL, '등록금 관련 정보: https://www.uog.edu/financial-aid/cost-to-attend'), - (1, 2, '네바다주립대학 라스베이거스(B형)', 2, 5, 'IRRELEVANT', 'OVERSEAS_UNIVERSITY_PAYMENT', + (1, 2, 1, '네바다주립대학 라스베이거스(B형)', 2, 5, 'IRRELEVANT', 'OVERSEAS_UNIVERSITY_PAYMENT', '- 지원가능전공: 공학계열 관련 전공자
- 파견대학에 지원하는 전공과 본교 전공이 일치해야함', NULL, '영어 점수는 다음의 세부영역 점수를 각각 만족해야 함
- IELTS : 모든 영역에서 5.5 이상', NULL, NULL, ' - The Engineering International Programs (EIP) Programs 안의 글로벌 하이브리드 프로그램으로 선발됨
※ 하이브리드 프로그램: 정규 과목 + 비정규 General Education Courses 과목 수강으로 구성, 정규(약 6학점) / 비정규 (약 135시간 이상) 수업 수강 (세부사항 변동 가능)
- 기숙사가 있지만 기숙사 확정이 늦게 발표되고 전원보장이 어려워, 외부숙소로 진행될 수도 있음, 한 학기 기숙사 비용: 약 $4,500~$6,000
- 한 학기 등록금: 약 $7,500
- International Program and Service Fees $2,500'), - (1, 3, '메모리얼 대학 세인트존스(A형)', 2, 4, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', + (1, 3, 1, '메모리얼 대학 세인트존스(A형)', 2, 4, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', '타전공 지원 및 수강 가능
- 지원불가능전공: Medicine, Pharmacy, Social work, Nursing
- Computer Science, Music 지원 제한적', NULL, '영어 점수는 다음의 세부영역 점수를 각각 만족해야함
- TOEFL iBT : 읽기/쓰기 20점, 듣기/말하기 17점 이상
- IELTS : 모든 영역에서 6.0 이상
- 외국어 성적 유효기간이 파견대학의 학기 시작하는 날까지 유효해야함 ', NULL, NULL, NULL), - (1, 3, '메모리얼 대학 세인트존스(B형)', 2, 5, 'IRRELEVANT', 'OVERSEAS_UNIVERSITY_PAYMENT', + (1, 3, 1, '메모리얼 대학 세인트존스(B형)', 2, 5, 'IRRELEVANT', 'OVERSEAS_UNIVERSITY_PAYMENT', '타전공 지원 및 수강 가능
- 지원불가능전공: Medicine, Pharmacy, Social work, Nursing
- Computer Science, Music 지원 제한적', NULL, '영어 점수는 다음의 세부영역 점수를 각각 만족해야함
- TOEFL iBT : 읽기/쓰기 20점, 듣기/말하기 17점 이상
- IELTS : 모든 영역에서 6.0 이상
- 외국어 성적 유효기간이 파견대학의 학기 시작하는 날까지 유효해야함 ', NULL, NULL, '국제학생 등록금 적용 (학점당 $2,080)'), - (1, 4, '서던퀸스랜드대학(B형)', 2, 5, 'ONE_SEMESTER', 'OVERSEAS_UNIVERSITY_PAYMENT', + (1, 4, 1, '서던퀸스랜드대학(B형)', 2, 5, 'ONE_SEMESTER', 'OVERSEAS_UNIVERSITY_PAYMENT', '- 타전공 지원 및 수강 가능
- 미술 계열, 간호학, 약학, 교육학 등 제한 있음
- 학과별 지원 자격요건이 있는 경우 모두 충족해야 하며, 사전 승인 필요', NULL, '영어 점수는 다음의 세부영역 점수를 각각 만족해야 함
- IELTS: 각 영역 최소 5.5 이상
- 외국어 성적 유효기간이 파견대학의 지원시까지 유효해야함 ', NULL, NULL, '서던퀸스랜드대학은 Trimester로 운영되므로 학사일정을 반드시 참고하길 바람
- In-state 등록금 납부
(등록금 관련 정보 : https://www.unisq.edu.au/international/partnerships/study-abroad-exchange/fees-scholarships)'), - (1, 5, '시드니대학', 2, 5, 'IRRELEVANT', 'OVERSEAS_UNIVERSITY_PAYMENT', + (1, 5, 1, '시드니대학', 2, 5, 'IRRELEVANT', 'OVERSEAS_UNIVERSITY_PAYMENT', '타전공 지원 및 수강 가능
- MECO, CAEL, LAWS unit 수강 여석 제한 있음', NULL, '영어 점수는 다음의 세부영역 점수를 각각 만족해야함
- IELTS: 모든 영역에서 6.0 이상
- TOEFL IBT: 읽기/듣기/말하기 17점, 쓰기 19점 이상
- 어학성적은 파견학기 시작시까지 유효하여야함', NULL, NULL, 'OSHC(Overseas Student Health Cover) 국제학생 보험가입 의무 (2023년 기준 AUD 348/학기, 학기마다 비용 상이)'), - (1, 6, '커틴대학(A형)', 2, 3, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', + (1, 6, 1, '커틴대학(A형)', 2, 3, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', '타전공 지원 및 수강 가능
지원 불가능 전공: Physiotherapy, Medicine, Nursing, Occupational Therapy ', NULL, '영어 점수는 다음의 세부영역 점수를 각각 만족해야함
- IELTS: 모든 영역에서 6.0 이상
- TOEFL IBT: 읽기 13점, 쓰기 21점, 듣기 13점, 말하기 18점 이상
- 어학성적은 파견학기 시작시까지 유효하여야함', NULL, NULL, '※ 24-1학기에 한하여 ''Destination Australia Cheung Kong Exchange Program Scholarship'' 지급 예정 (신청자 중 가장 총점이 우수한 학생 1명에게 AUD$6000 지급, 상세 내용은 국제처 홈페이지 해외대학정보 공지글 참고)'), - (1, 7, '서던덴마크대학교', 4, 2, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', + (1, 7, 1, '서던덴마크대학교', 4, 2, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '- 주전공과 지원전공이 반드시 일치할 필요는 없으나 본교에서 기초과목을 이수하여야 함
- 교환학생에게 제공되는 수업만 수강 가능
- Faculty of Engineering 내에서 2/3이상의 수업을 수강하여야 함
- 30 ECTS 수강', '- 어학성적표가 해당 대학 신청서 제출 시 유효하여야 함(~10월 1일)', NULL, NULL, '- 교외 숙소', NULL), - (1, 8, '코펜하겐 IT대학', 2, 2, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', + (1, 8, 1, '코펜하겐 IT대학', 2, 2, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', '- 본교 기초과목 이수사항에 따라 지원이 제한될 수 있으나 소속전공과 정확하게 일치 하지 않아도 지원은 가능(연관 전공이어야 함)
- 최소 7.5 ECTS, 최대 30ECTS 수강 가능
- 교차 수강 가능(선수과목이 지정되어있는 과목은 사전에 이수하여야 수강이 가능함)', '- 어학성적표가 해당 대학 신청서 제출 시 유효하여야 함(~11월 1일)', NULL, NULL, '- 제공(학교 운영 기숙사 아님)
- 선착순 배정', NULL), - (1, 9, '노이울름 대학', 2, 3, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '타전공 지원 및 수강 가능', NULL, + (1, 9, 1, '노이울름 대학', 2, 3, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '타전공 지원 및 수강 가능', NULL, '영어 점수는 다음의 세부영역 점수를 각각 만족해야 함
- TOEFL IBT: 읽기 18점; 듣기 17점, 말하기 20점, 쓰기 17점
- TOEIC: 읽기 385점, 듣기 400점, 말하기 160점, 쓰기 150점
외국어 성적 유효기간이 파견대학의 학기 시작하는 시점까지 유효해야 함', NULL, NULL, NULL), - (1, 10, '헐대학', 4, 3, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', + (1, 10, 1, '헐대학', 4, 3, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', '제한학과 많음. (Factsheet참조및Factsheet언급된 제한학과 외에도 학기마다 제한학과 발생가능성있음). 지원 전 권역 담당자랑 사전상담 요망. 학기당 30ECTS수강해야 LA승인남. 성적처리 늦은 편이라 8차 학기 수학자는 성적처리 늦은 거 감안하고 추가 이에 따른 불편함이 있음을 인지후 지원요망. ', '지원 전 권역 담당자와 사전상담 요망', '- 영어 점수는 다음의 세부영역 점수를 각각 만족해야 함
- TOEFL iBT : 듣기 및 쓰기 18점, 읽기 18점, 말하기 20점, 쓰기 18점 이상
- IELTS : 모든 영역에서 6.0이상', NULL, NULL, '영국 생활비 및 숙소비용 유럽권 지역 중 상대적으로 매우 높은편. 지원전 반드시 사전고려 요망'), - (1, 11, '그라츠 대학', 3, 2, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '-주전공 혹은 제2전공(혹은 연계전공과) 유관학과여아 함', + (1, 11, 1, '그라츠 대학', 3, 2, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '-주전공 혹은 제2전공(혹은 연계전공과) 유관학과여아 함', '선발인원 중 차순위 합격자는 학기제한(1개 학기)이 있을 수 있음', NULL, NULL, '학교인근 외부 숙소는 있지만, 외부업체운영숙소라 대학관할아님', NULL), - (1, 12, '그라츠공과대학', 2, 2, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '-주전공 혹은 제2전공(혹은 연계전공과) 유관학과여아 함', + (1, 12, 1, '그라츠공과대학', 2, 2, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '-주전공 혹은 제2전공(혹은 연계전공과) 유관학과여아 함', '선발인원 중 차순위 합격자는 학기제한(1개 학기)이 있을 수 있음', '- 영어 점수는 다음의 세부영역 점수를 각각 만족해야 함
- TOEFL IBT: 읽기 18점 이상, 쓰기 17점 이상, 말하기 20점 이상, 듣기 17점 이상
- IELTS: 쓰기 5.5점 이상, 말하기 6점 이상
''- TOEIC의 경우 S/W 점수 합산 310점 이상 ', NULL, '자체기숙사는 없음. 교환학생이 많이 지원한 학기에는 예약이 어려울 수도 있음(선착순 경우많음). 더블룸 기준약 한달에 € 340 per month (기숙사 종류게 따라 가격 차이 유) 예산잡으면됨.', NULL), - (1, 13, '린츠 카톨릭 대학교', 3, 2, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', + (1, 13, 1, '린츠 카톨릭 대학교', 3, 2, 'ONE_SEMESTER', 'HOME_UNIVERSITY_PAYMENT', '- 지원가능전공: History, Philosophy, Art History, theology
(영어과목 수가 그리 많지는 않으므로, 사전 확인필요)
''- 학기당 최소 15ECTS 수강신청해야 함', '봄학기에는 영어과목이 극히 제한적으로 열린다고 함. 지원 전 권역 담당자와 사전상담 요망', NULL, NULL, '학교에서 몇가지 기숙사 옵션 합격시 연결예정.', NULL), - (1, 14, '빈 공과대학교', 3, 2, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', + (1, 14, 1, '빈 공과대학교', 3, 2, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '지원전공과 일치하지 않아도 지원가능하나 유사전공자만 지원가능하며, 본전공과 일치하지않으면 입학 및 수강에 불리할 수 있음
''-학기당 최소 15.ECTS 수강신청해야함', '선발인원 중 차순위 합격자는 학기제한(1개 학기)이 있을 수 있음', NULL, NULL, '기숙사없음', NULL), - (1, 15, 'IPSA', 4, 3, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', + (1, 15, 1, 'IPSA', 4, 3, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', '- 소속전공과 지원전공이 일치 또는 유사하여야 함 : 전공이 제한적이므로 반드시 홈페이지에서 지원 가능 전공을 확인할 것
- 최대 30ECTS 수강', '- 어학성적표가 해당 대학 신청서 제출 시 유효하여야 함(~11월 15일)', NULL, NULL, '- 미제공', NULL), - (1, 16, '메이지대학', 2, 3, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', + (1, 16, 1, '메이지대학', 2, 3, 'IRRELEVANT', 'HOME_UNIVERSITY_PAYMENT', 'https://www.meiji.ac.jp/cip/english/admissions/co7mm90000000461-att/co7mm900000004d1.pdf', '*해당 학교 일정 상 10월초까지 서류제출 필요', '학부별로 기준 상이, 관련페이지 참조', NULL, NULL, NULL), - (1, 17, '바이카여자대학', 2, 1, 'IRRELEVANT', NULL, + (1, 17, 1, '바이카여자대학', 2, 1, 'IRRELEVANT', NULL, '교환학생 지원가능 : Department of Global English, Department of Japanese culture, Department of Media and Information, Department of Psychology.', '여학생만 신청가능', NULL, NULL, - '기숙사 없음, 계약된 외부 기숙사 사용-“Maison de Claire Ibaraki” 62,300엔/월, 2식 포함, 계약시 66,000엔 청구 (2023년 6월기준)', NULL), - (1, 18, '분쿄가쿠인대학', 2, 3, 'ONE_YEAR', 'HOME_UNIVERSITY_PAYMENT', NULL, NULL, NULL, NULL, + '기숙사 없음, 계약된 외부 기숙사 사용-"Maison de Claire Ibaraki" 62,300엔/월, 2식 포함, 계약시 66,000엔 청구 (2023년 6월기준)', NULL), + (1, 18, 1, '분쿄가쿠인대학', 2, 3, 'ONE_YEAR', 'HOME_UNIVERSITY_PAYMENT', NULL, NULL, NULL, NULL, '기숙사 보유, off campus, 식사 미제공, 45,000~50,000엔/월', NULL); INSERT INTO language_requirement(language_test_type, min_score, university_info_for_apply_id) diff --git a/src/test/java/com/example/solidconnection/university/fixture/HomeUniversityFixture.java b/src/test/java/com/example/solidconnection/university/fixture/HomeUniversityFixture.java new file mode 100644 index 000000000..97391a06d --- /dev/null +++ b/src/test/java/com/example/solidconnection/university/fixture/HomeUniversityFixture.java @@ -0,0 +1,18 @@ +package com.example.solidconnection.university.fixture; + +import com.example.solidconnection.university.domain.HomeUniversity; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.test.context.TestComponent; + +@TestComponent +@RequiredArgsConstructor +public class HomeUniversityFixture { + + private final HomeUniversityFixtureBuilder homeUniversityFixtureBuilder; + + public HomeUniversity 인하대학교() { + return homeUniversityFixtureBuilder.homeUniversity() + .name("인하대학교") + .create(); + } +} diff --git a/src/test/java/com/example/solidconnection/university/fixture/HomeUniversityFixtureBuilder.java b/src/test/java/com/example/solidconnection/university/fixture/HomeUniversityFixtureBuilder.java new file mode 100644 index 000000000..092b2a0c2 --- /dev/null +++ b/src/test/java/com/example/solidconnection/university/fixture/HomeUniversityFixtureBuilder.java @@ -0,0 +1,29 @@ +package com.example.solidconnection.university.fixture; + +import com.example.solidconnection.university.domain.HomeUniversity; +import com.example.solidconnection.university.repository.HomeUniversityRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.test.context.TestComponent; + +@TestComponent +@RequiredArgsConstructor +public class HomeUniversityFixtureBuilder { + + private final HomeUniversityRepository homeUniversityRepository; + + private String name; + + public HomeUniversityFixtureBuilder homeUniversity() { + return new HomeUniversityFixtureBuilder(homeUniversityRepository); + } + + public HomeUniversityFixtureBuilder name(String name) { + this.name = name; + return this; + } + + public HomeUniversity create() { + return homeUniversityRepository.findByName(name) + .orElseGet(() -> homeUniversityRepository.save(new HomeUniversity(null, name))); + } +} diff --git a/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixture.java b/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixture.java index fdfd11187..8fbfa8ab5 100644 --- a/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixture.java +++ b/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixture.java @@ -10,12 +10,14 @@ public class UnivApplyInfoFixture { private final UnivApplyInfoFixtureBuilder univApplyInfoFixtureBuilder; private final UniversityFixture universityFixture; + private final HomeUniversityFixture homeUniversityFixture; public UnivApplyInfo 괌대학_A_지원_정보(long termId) { return univApplyInfoFixtureBuilder.univApplyInfo() .termId(termId) .koreanName("괌대학(A형)") .university(universityFixture.괌_대학()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -24,6 +26,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("괌대학(B형)") .university(universityFixture.괌_대학()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -32,6 +35,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("네바다주립대학 라스베이거스(B형)") .university(universityFixture.네바다주립_대학_라스베이거스()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -40,6 +44,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("아칸소 주립 대학") .university(universityFixture.아칸소_주립_대학()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -48,6 +53,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("메모리얼 대학 세인트존스(A형)") .university(universityFixture.메모리얼_대학_세인트존스()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -56,6 +62,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("서던덴마크대학교") .university(universityFixture.서던덴마크_대학()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -64,6 +71,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("코펜하겐 IT대학") .university(universityFixture.코펜하겐IT_대학()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -72,6 +80,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("그라츠 대학") .university(universityFixture.그라츠_대학()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -80,6 +89,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("그라츠공과대학") .university(universityFixture.그라츠공과_대학()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -88,6 +98,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("린츠 카톨릭 대학교") .university(universityFixture.린츠_카톨릭_대학()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } @@ -96,6 +107,7 @@ public class UnivApplyInfoFixture { .termId(termId) .koreanName("메이지대학") .university(universityFixture.메이지_대학()) + .homeUniversity(homeUniversityFixture.인하대학교()) .create(); } } diff --git a/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixtureBuilder.java b/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixtureBuilder.java index f304c2bd5..2320f2544 100644 --- a/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixtureBuilder.java @@ -3,8 +3,9 @@ import static com.example.solidconnection.university.domain.SemesterAvailableForDispatch.ONE_SEMESTER; import static com.example.solidconnection.university.domain.TuitionFeeType.HOME_UNIVERSITY_PAYMENT; -import com.example.solidconnection.university.domain.UnivApplyInfo; +import com.example.solidconnection.university.domain.HomeUniversity; import com.example.solidconnection.university.domain.HostUniversity; +import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.repository.UnivApplyInfoRepository; import java.util.HashSet; import lombok.RequiredArgsConstructor; @@ -19,6 +20,7 @@ public class UnivApplyInfoFixtureBuilder { private long termId; private String koreanName; private HostUniversity university; + private HomeUniversity homeUniversity; public UnivApplyInfoFixtureBuilder univApplyInfo() { return new UnivApplyInfoFixtureBuilder(univApplyInfoRepository); @@ -39,9 +41,14 @@ public UnivApplyInfoFixtureBuilder university(HostUniversity university) { return this; } + public UnivApplyInfoFixtureBuilder homeUniversity(HomeUniversity homeUniversity) { + this.homeUniversity = homeUniversity; + return this; + } + public UnivApplyInfo create() { UnivApplyInfo univApplyInfo = new UnivApplyInfo( - null, termId, null, koreanName, 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, + null, termId, homeUniversity, koreanName, 1, HOME_UNIVERSITY_PAYMENT, ONE_SEMESTER, "1", "detailsForLanguage", "gpaRequirement", "gpaRequirementCriteria", "detailsForApply", "detailsForMajor", "detailsForAccommodation", "detailsForEnglishCourse", "details", diff --git a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java index cf8a0590d..26f9772eb 100644 --- a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java @@ -1,11 +1,9 @@ package com.example.solidconnection.university.service; import static com.example.solidconnection.common.exception.ErrorCode.UNIV_APPLY_INFO_NOT_FOUND; -import static com.example.solidconnection.university.domain.LanguageTestType.TOEIC; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; -import static org.junit.jupiter.api.Assertions.assertAll; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.times; @@ -15,10 +13,8 @@ import com.example.solidconnection.term.fixture.TermFixture; import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.dto.UnivApplyInfoDetailResponse; -import com.example.solidconnection.university.dto.UnivApplyInfoFilterSearchRequest; import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponses; -import com.example.solidconnection.university.fixture.LanguageRequirementFixture; import com.example.solidconnection.university.fixture.UnivApplyInfoFixture; import com.example.solidconnection.university.repository.UnivApplyInfoRepository; import java.util.List; @@ -42,9 +38,6 @@ class UnivApplyInfoQueryServiceTest { @Autowired private UnivApplyInfoFixture univApplyInfoFixture; - @Autowired - private LanguageRequirementFixture languageRequirementFixture; - @Autowired private TermFixture termFixture; @@ -98,70 +91,6 @@ class 대학_지원_정보_상세_조회 { } } - @Nested - class 대학_지원_정보_필터링_검색 { - - @Test - void 어학_시험_종류로_필터링한다() { - // given - UnivApplyInfoFilterSearchRequest request = new UnivApplyInfoFilterSearchRequest(TOEIC, null, null); - UnivApplyInfo 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(term.getId()); - languageRequirementFixture.토익_800(괌대학_A_지원_정보); - UnivApplyInfo 괌대학_B_지원_정보 = univApplyInfoFixture.괌대학_B_지원_정보(term.getId()); - languageRequirementFixture.토플_70(괌대학_B_지원_정보); - - // when - UnivApplyInfoPreviewResponses response = univApplyInfoQueryService.searchUnivApplyInfoByFilter(request); - - // then - assertThat(response.univApplyInfoPreviews()) - .containsExactly(UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보, term.getName())); - } - - @Test - void 어학_시험_점수가_기준치_이상인_곳을_필터링한다() { - // given - UnivApplyInfoFilterSearchRequest request = new UnivApplyInfoFilterSearchRequest(TOEIC, "800", null); - UnivApplyInfo 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(term.getId()); - languageRequirementFixture.토익_800(괌대학_A_지원_정보); - UnivApplyInfo 괌대학_B_지원_정보 = univApplyInfoFixture.괌대학_B_지원_정보(term.getId()); - languageRequirementFixture.토익_900(괌대학_B_지원_정보); - - // when - UnivApplyInfoPreviewResponses response = univApplyInfoQueryService.searchUnivApplyInfoByFilter(request); - - // then - assertThat(response.univApplyInfoPreviews()) - .containsExactly(UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보, term.getName())); - } - - @Test - void 국가_코드로_필터링한다() { - // given - UnivApplyInfoFilterSearchRequest request1 = new UnivApplyInfoFilterSearchRequest(TOEIC, null, List.of("US")); - UnivApplyInfoFilterSearchRequest request2 = new UnivApplyInfoFilterSearchRequest(TOEIC, null, List.of("US", "CA")); - UnivApplyInfo 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(term.getId()); - languageRequirementFixture.토익_800(괌대학_A_지원_정보); - UnivApplyInfo 메모리얼대학_세인트존스_A_지원_정보 = univApplyInfoFixture.메모리얼대학_세인트존스_A_지원_정보(term.getId()); - languageRequirementFixture.토익_800(메모리얼대학_세인트존스_A_지원_정보); - - // when - UnivApplyInfoPreviewResponses response1 = univApplyInfoQueryService.searchUnivApplyInfoByFilter(request1); - UnivApplyInfoPreviewResponses response2 = univApplyInfoQueryService.searchUnivApplyInfoByFilter(request2); - - // then - assertAll( - () -> assertThat(response1.univApplyInfoPreviews()) - .containsExactly(UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보, term.getName())), - () -> assertThat(response2.univApplyInfoPreviews()) - .containsExactlyInAnyOrder( - UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보, term.getName()) - ) - ); - } - } - @Nested class 대학_지원_정보_텍스트_검색 { @@ -177,8 +106,8 @@ class 대학_지원_정보_텍스트_검색 { // then assertThat(response.univApplyInfoPreviews()) .containsExactly( - UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(메이지대학_지원_정보, term.getName()) + UnivApplyInfoPreviewResponse.of(괌대학_A_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(메이지대학_지원_정보, term.getName()) ); } @@ -199,8 +128,8 @@ class 각각의_검색_대상에_대해_검색한다 { // then assertThat(response.univApplyInfoPreviews()) .containsExactly( - UnivApplyInfoPreviewResponse.from(메이지대학_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보, term.getName()) + UnivApplyInfoPreviewResponse.of(메이지대학_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(메모리얼대학_세인트존스_A_지원_정보, term.getName()) ); } @@ -218,8 +147,8 @@ class 각각의_검색_대상에_대해_검색한다 { // then assertThat(response.univApplyInfoPreviews()) .containsExactly( - UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(괌대학_B_지원_정보, term.getName()) + UnivApplyInfoPreviewResponse.of(괌대학_A_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(괌대학_B_지원_정보, term.getName()) ); } @@ -237,8 +166,8 @@ class 각각의_검색_대상에_대해_검색한다 { // then assertThat(response.univApplyInfoPreviews()) .containsExactly( - UnivApplyInfoPreviewResponse.from(린츠_카톨릭대학_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(서던덴마크대학교_지원_정보, term.getName()) + UnivApplyInfoPreviewResponse.of(린츠_카톨릭대학_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(서던덴마크대학교_지원_정보, term.getName()) ); } } @@ -257,9 +186,9 @@ class 각각의_검색_대상에_대해_검색한다 { // then assertThat(response.univApplyInfoPreviews()) .containsExactly( - UnivApplyInfoPreviewResponse.from(대학지원정보_아, term.getName()), - UnivApplyInfoPreviewResponse.from(국가_아, term.getName()), - UnivApplyInfoPreviewResponse.from(권역_아, term.getName()) + UnivApplyInfoPreviewResponse.of(대학지원정보_아, term.getName()), + UnivApplyInfoPreviewResponse.of(국가_아, term.getName()), + UnivApplyInfoPreviewResponse.of(권역_아, term.getName()) ); } diff --git a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java index 9eeeb2c2b..b1aa7d249 100644 --- a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java @@ -93,10 +93,10 @@ void setUp() { assertThat(response.recommendedUniversities()) .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsAll(List.of( - UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(괌대학_B_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보, term.getName()) + UnivApplyInfoPreviewResponse.of(괌대학_A_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(괌대학_B_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(메모리얼대학_세인트존스_A_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(네바다주립대학_라스베이거스_지원_정보, term.getName()) )); } @@ -112,8 +112,8 @@ void setUp() { assertThat(response.recommendedUniversities()) .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsAll(List.of( - UnivApplyInfoPreviewResponse.from(서던덴마크대학교_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(코펜하겐IT대학_지원_정보, term.getName()) + UnivApplyInfoPreviewResponse.of(서던덴마크대학교_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(코펜하겐IT대학_지원_정보, term.getName()) )); } @@ -130,12 +130,12 @@ void setUp() { assertThat(response.recommendedUniversities()) .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsExactlyInAnyOrder( - UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(괌대학_B_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(서던덴마크대학교_지원_정보, term.getName()), - UnivApplyInfoPreviewResponse.from(코펜하겐IT대학_지원_정보, term.getName()) + UnivApplyInfoPreviewResponse.of(괌대학_A_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(괌대학_B_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(메모리얼대학_세인트존스_A_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(네바다주립대학_라스베이거스_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(서던덴마크대학교_지원_정보, term.getName()), + UnivApplyInfoPreviewResponse.of(코펜하겐IT대학_지원_정보, term.getName()) ); } @@ -149,10 +149,7 @@ void setUp() { .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsExactlyInAnyOrderElementsOf( generalUnivApplyInfoRecommendService.getGeneralRecommends().stream() - .map(univApplyInfo -> UnivApplyInfoPreviewResponse.from( - univApplyInfo, - term.getName() - )) + .map(univApplyInfo -> UnivApplyInfoPreviewResponse.of(univApplyInfo, term.getName())) .toList() ); } @@ -167,10 +164,7 @@ void setUp() { .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsExactlyInAnyOrderElementsOf( generalUnivApplyInfoRecommendService.getGeneralRecommends().stream() - .map(univApplyInfo -> UnivApplyInfoPreviewResponse.from( - univApplyInfo, - term.getName() - )) + .map(univApplyInfo -> UnivApplyInfoPreviewResponse.of(univApplyInfo, term.getName())) .toList() ); }