diff --git a/src/main/java/com/example/solidconnection/application/dto/UniversityApplicantsResponse.java b/src/main/java/com/example/solidconnection/application/dto/ApplicantsResponse.java similarity index 82% rename from src/main/java/com/example/solidconnection/application/dto/UniversityApplicantsResponse.java rename to src/main/java/com/example/solidconnection/application/dto/ApplicantsResponse.java index 1fe24546f..72fbc9c22 100644 --- a/src/main/java/com/example/solidconnection/application/dto/UniversityApplicantsResponse.java +++ b/src/main/java/com/example/solidconnection/application/dto/ApplicantsResponse.java @@ -6,14 +6,14 @@ import java.util.List; -public record UniversityApplicantsResponse( +public record ApplicantsResponse( String koreanName, int studentCapacity, String region, String country, List applicants) { - public static UniversityApplicantsResponse of(UnivApplyInfo univApplyInfo, List applications, SiteUser siteUser) { - return new UniversityApplicantsResponse( + public static ApplicantsResponse of(UnivApplyInfo univApplyInfo, List applications, SiteUser siteUser) { + return new ApplicantsResponse( univApplyInfo.getKoreanName(), univApplyInfo.getStudentCapacity(), univApplyInfo.getUniversity().getRegion().getKoreanName(), diff --git a/src/main/java/com/example/solidconnection/application/dto/ApplicationsResponse.java b/src/main/java/com/example/solidconnection/application/dto/ApplicationsResponse.java index a3429c1ef..13c641bb0 100644 --- a/src/main/java/com/example/solidconnection/application/dto/ApplicationsResponse.java +++ b/src/main/java/com/example/solidconnection/application/dto/ApplicationsResponse.java @@ -3,7 +3,7 @@ import java.util.List; public record ApplicationsResponse( - List firstChoice, - List secondChoice, - List thirdChoice) { + List firstChoice, + List secondChoice, + List thirdChoice) { } diff --git a/src/main/java/com/example/solidconnection/application/dto/ApplyRequest.java b/src/main/java/com/example/solidconnection/application/dto/ApplyRequest.java index 7c4da1c99..cab079b21 100644 --- a/src/main/java/com/example/solidconnection/application/dto/ApplyRequest.java +++ b/src/main/java/com/example/solidconnection/application/dto/ApplyRequest.java @@ -1,5 +1,6 @@ package com.example.solidconnection.application.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; @@ -12,6 +13,7 @@ public record ApplyRequest( Long languageTestScoreId, @Valid - UniversityChoiceRequest universityChoiceRequest + @JsonProperty("universityChoiceRequest") + UnivApplyInfoChoiceRequest univApplyInfoChoiceRequest ) { } diff --git a/src/main/java/com/example/solidconnection/application/dto/UnivApplyInfoChoiceRequest.java b/src/main/java/com/example/solidconnection/application/dto/UnivApplyInfoChoiceRequest.java new file mode 100644 index 000000000..9598a191b --- /dev/null +++ b/src/main/java/com/example/solidconnection/application/dto/UnivApplyInfoChoiceRequest.java @@ -0,0 +1,17 @@ +package com.example.solidconnection.application.dto; + +import com.example.solidconnection.university.dto.validation.ValidUnivApplyInfoChoice; +import com.fasterxml.jackson.annotation.JsonProperty; + +@ValidUnivApplyInfoChoice +public record UnivApplyInfoChoiceRequest( + + @JsonProperty("firstChoiceUniversityId") + Long firstChoiceUnivApplyInfoId, + + @JsonProperty("secondChoiceUniversityId") + Long secondChoiceUnivApplyInfoId, + + @JsonProperty("thirdChoiceUniversityId") + Long thirdChoiceUnivApplyInfoId) { +} diff --git a/src/main/java/com/example/solidconnection/application/dto/UniversityChoiceRequest.java b/src/main/java/com/example/solidconnection/application/dto/UniversityChoiceRequest.java deleted file mode 100644 index 220b803b3..000000000 --- a/src/main/java/com/example/solidconnection/application/dto/UniversityChoiceRequest.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.solidconnection.application.dto; - -import com.example.solidconnection.university.dto.validation.ValidUniversityChoice; - -@ValidUniversityChoice -public record UniversityChoiceRequest( - Long firstChoiceUniversityId, - Long secondChoiceUniversityId, - Long thirdChoiceUniversityId) { -} diff --git a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java index 0cbf1cf68..9a7754896 100644 --- a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java +++ b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java @@ -23,14 +23,14 @@ public interface ApplicationRepository extends JpaRepository SELECT a FROM Application a JOIN FETCH a.siteUser - WHERE (a.firstChoiceUnivApplyInfoId IN :universityIds - OR a.secondChoiceUnivApplyInfoId IN :universityIds - OR a.thirdChoiceUnivApplyInfoId IN :universityIds) + WHERE (a.firstChoiceUnivApplyInfoId IN :univApplyInfoIds + OR a.secondChoiceUnivApplyInfoId IN :univApplyInfoIds + OR a.thirdChoiceUnivApplyInfoId IN :univApplyInfoIds) AND a.verifyStatus = :status AND a.term = :term AND a.isDelete = false """) - List findAllByUnivApplyInfoIds(@Param("universityIds") List universityIds, @Param("status") VerifyStatus status, @Param("term") String term); + List findAllByUnivApplyInfoIds(@Param("univApplyInfoIds") List univApplyInfoIds, @Param("status") VerifyStatus status, @Param("term") String term); @Query(""" SELECT a diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java index dbfa28990..2d7adbc58 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java @@ -3,13 +3,13 @@ import com.example.solidconnection.application.domain.Application; import com.example.solidconnection.application.domain.VerifyStatus; import com.example.solidconnection.application.dto.ApplicationsResponse; -import com.example.solidconnection.application.dto.UniversityApplicantsResponse; +import com.example.solidconnection.application.dto.ApplicantsResponse; import com.example.solidconnection.application.repository.ApplicationRepository; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; -import com.example.solidconnection.university.repository.custom.UniversityFilterRepositoryImpl; +import com.example.solidconnection.university.repository.UnivApplyInfoRepository; +import com.example.solidconnection.university.repository.custom.UnivApplyInfoFilterRepositoryImpl; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -31,8 +31,8 @@ public class ApplicationQueryService { private final ApplicationRepository applicationRepository; - private final UniversityInfoForApplyRepository universityInfoForApplyRepository; - private final UniversityFilterRepositoryImpl universityFilterRepository; + private final UnivApplyInfoRepository univApplyInfoRepository; + private final UnivApplyInfoFilterRepositoryImpl universityFilterRepository; @Value("${university.term}") public String term; @@ -41,7 +41,7 @@ public class ApplicationQueryService { @Transactional(readOnly = true) public ApplicationsResponse getApplicants(SiteUser siteUser, String regionCode, String keyword) { // 1. 대학 지원 정보 필터링 (regionCode, keyword) - List univApplyInfos = universityFilterRepository.findByRegionCodeAndKeywords(regionCode, List.of(keyword)); + List univApplyInfos = universityFilterRepository.findAllByRegionCodeAndKeywords(regionCode, List.of(keyword)); if (univApplyInfos.isEmpty()) { return new ApplicationsResponse(List.of(), List.of(), List.of()); } @@ -58,7 +58,7 @@ public ApplicationsResponse getApplicants(SiteUser siteUser, String regionCode, public ApplicationsResponse getApplicantsByUserApplications(SiteUser siteUser) { Application userLatestApplication = applicationRepository.getApplicationBySiteUserAndTerm(siteUser, term); - List universityInfoForApplyIds = Stream.of( + List univApplyInfoIds = Stream.of( userLatestApplication.getFirstChoiceUnivApplyInfoId(), userLatestApplication.getSecondChoiceUnivApplyInfoId(), userLatestApplication.getThirdChoiceUnivApplyInfoId() @@ -66,30 +66,30 @@ public ApplicationsResponse getApplicantsByUserApplications(SiteUser siteUser) { .filter(Objects::nonNull) .collect(Collectors.toList()); - if (universityInfoForApplyIds.isEmpty()) { + if (univApplyInfoIds.isEmpty()) { return new ApplicationsResponse(List.of(), List.of(), List.of()); } - List applications = applicationRepository.findAllByUnivApplyInfoIds(universityInfoForApplyIds, VerifyStatus.APPROVED, term); - List universityInfosForApply = universityInfoForApplyRepository.findAllByUniversityIds(universityInfoForApplyIds); + List applications = applicationRepository.findAllByUnivApplyInfoIds(univApplyInfoIds, VerifyStatus.APPROVED, term); + List univApplyInfos = univApplyInfoRepository.findAllByIds(univApplyInfoIds); - return classifyApplicationsByChoice(universityInfosForApply, applications, siteUser); + return classifyApplicationsByChoice(univApplyInfos, applications, siteUser); } private ApplicationsResponse classifyApplicationsByChoice( - List universityInfosForApply, + List univApplyInfos, List applications, SiteUser siteUser) { Map> firstChoiceMap = createChoiceMap(applications, Application::getFirstChoiceUnivApplyInfoId); Map> secondChoiceMap = createChoiceMap(applications, Application::getSecondChoiceUnivApplyInfoId); Map> thirdChoiceMap = createChoiceMap(applications, Application::getThirdChoiceUnivApplyInfoId); - List firstChoiceApplicants = - createUniversityApplicantsResponses(universityInfosForApply, firstChoiceMap, siteUser); - List secondChoiceApplicants = - createUniversityApplicantsResponses(universityInfosForApply, secondChoiceMap, siteUser); - List thirdChoiceApplicants = - createUniversityApplicantsResponses(universityInfosForApply, thirdChoiceMap, siteUser); + List firstChoiceApplicants = + createUniversityApplicantsResponses(univApplyInfos, firstChoiceMap, siteUser); + List secondChoiceApplicants = + createUniversityApplicantsResponses(univApplyInfos, secondChoiceMap, siteUser); + List thirdChoiceApplicants = + createUniversityApplicantsResponses(univApplyInfos, thirdChoiceMap, siteUser); return new ApplicationsResponse(firstChoiceApplicants, secondChoiceApplicants, thirdChoiceApplicants); } @@ -109,12 +109,12 @@ private Map> createChoiceMap( return choiceMap; } - private List createUniversityApplicantsResponses( - List universityInfosForApply, + private List createUniversityApplicantsResponses( + List univApplyInfos, Map> choiceMap, SiteUser siteUser) { - return universityInfosForApply.stream() - .map(uia -> UniversityApplicantsResponse.of(uia, choiceMap.getOrDefault(uia.getId(), List.of()), siteUser)) + return univApplyInfos.stream() + .map(uia -> ApplicantsResponse.of(uia, choiceMap.getOrDefault(uia.getId(), List.of()), siteUser)) .toList(); } 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 ea44840ee..2d307992b 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -4,7 +4,7 @@ import com.example.solidconnection.application.domain.VerifyStatus; import com.example.solidconnection.application.dto.ApplicationSubmissionResponse; import com.example.solidconnection.application.dto.ApplyRequest; -import com.example.solidconnection.application.dto.UniversityChoiceRequest; +import com.example.solidconnection.application.dto.UnivApplyInfoChoiceRequest; import com.example.solidconnection.application.repository.ApplicationRepository; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.score.domain.GpaScore; @@ -42,13 +42,13 @@ public class ApplicationSubmissionService { // 기존에 있던 status field 우선 APRROVED로 입력시킨다. @Transactional public ApplicationSubmissionResponse apply(SiteUser siteUser, ApplyRequest applyRequest) { - UniversityChoiceRequest universityChoiceRequest = applyRequest.universityChoiceRequest(); + UnivApplyInfoChoiceRequest univApplyInfoChoiceRequest = applyRequest.univApplyInfoChoiceRequest(); GpaScore gpaScore = getValidGpaScore(siteUser, applyRequest.gpaScoreId()); LanguageTestScore languageTestScore = getValidLanguageTestScore(siteUser, applyRequest.languageTestScoreId()); - long firstChoiceUniversityId = universityChoiceRequest.firstChoiceUniversityId(); - Long secondChoiceUniversityId = universityChoiceRequest.secondChoiceUniversityId(); - Long thirdChoiceUniversityId = universityChoiceRequest.thirdChoiceUniversityId(); + long firstChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.firstChoiceUnivApplyInfoId(); + Long secondChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.secondChoiceUnivApplyInfoId(); + Long thirdChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.thirdChoiceUnivApplyInfoId(); Optional existingApplication = applicationRepository.findBySiteUserAndTerm(siteUser, term); int updateCount = existingApplication @@ -65,9 +65,9 @@ public ApplicationSubmissionResponse apply(SiteUser siteUser, ApplyRequest apply languageTestScore.getLanguageTest(), term, updateCount, - firstChoiceUniversityId, - secondChoiceUniversityId, - thirdChoiceUniversityId, + firstChoiceUnivApplyInfoId, + secondChoiceUnivApplyInfoId, + thirdChoiceUnivApplyInfoId, getRandomNickname() ); diff --git a/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java b/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java index 00e600201..ecacb1700 100644 --- a/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java +++ b/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java @@ -33,8 +33,8 @@ public enum ErrorCode { SIGN_UP_TOKEN_NOT_ISSUED_BY_SERVER(HttpStatus.BAD_REQUEST.value(), "회원가입 토큰이 우리 서버에서 발급되지 않았습니다."), // data not found - UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "존재하지 않는 대학교 지원 정보입니다."), - UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND_FOR_TERM(HttpStatus.NOT_FOUND.value(), "해당하는 대학교가 이번 모집 기간에 열리지 않았습니다."), + UNIV_APPLY_INFO_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "존재하지 않는 대학교 지원 정보입니다."), + UNIV_APPLY_INFO_NOT_FOUND_FOR_TERM(HttpStatus.NOT_FOUND.value(), "해당하는 대학교가 이번 모집 기간에 열리지 않았습니다."), APPLICATION_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "사용자의 대학 지원 정보를 찾을 수 없습니다."), USER_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "회원을 찾을 수 없습니다."), UNIVERSITY_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "대학교를 찾을 수 없습니다."), @@ -71,7 +71,7 @@ public enum ErrorCode { PROFILE_IMAGE_NEEDED(HttpStatus.BAD_REQUEST.value(), "프로필 이미지가 필요합니다."), FIRST_CHOICE_REQUIRED(HttpStatus.BAD_REQUEST.value(), "1지망 대학교를 입력해주세요."), THIRD_CHOICE_REQUIRES_SECOND(HttpStatus.BAD_REQUEST.value(), "2지망 없이 3지망을 선택할 수 없습니다."), - DUPLICATE_UNIVERSITY_CHOICE(HttpStatus.BAD_REQUEST.value(), "지망 선택이 중복되었습니다."), + DUPLICATE_UNIV_APPLY_INFO_CHOICE(HttpStatus.BAD_REQUEST.value(), "지망 선택이 중복되었습니다."), // community INVALID_POST_CATEGORY(HttpStatus.BAD_REQUEST.value(), "잘못된 카테고리명입니다."), @@ -86,8 +86,8 @@ public enum ErrorCode { CAN_NOT_UPDATE_DEPRECATED_COMMENT(HttpStatus.BAD_REQUEST.value(), "이미 삭제된 댓글을 수정할 수 없습니다."), INVALID_POST_LIKE(HttpStatus.BAD_REQUEST.value(), "존재하지 않는 게시글 좋아요입니다."), DUPLICATE_POST_LIKE(HttpStatus.BAD_REQUEST.value(), "이미 좋아요한 게시글입니다."), - ALREADY_LIKED_UNIVERSITY(HttpStatus.BAD_REQUEST.value(), "이미 좋아요한 대학입니다."), - NOT_LIKED_UNIVERSITY(HttpStatus.BAD_REQUEST.value(), "좋아요하지 않은 대학입니다."), + ALREADY_LIKED_UNIV_APPLY_INFO(HttpStatus.BAD_REQUEST.value(), "이미 좋아요한 대학입니다."), + NOT_LIKED_UNIV_APPLY_INFO(HttpStatus.BAD_REQUEST.value(), "좋아요하지 않은 대학입니다."), // score INVALID_GPA_SCORE_STATUS(HttpStatus.BAD_REQUEST.value(), "학점이 승인되지 않았습니다."), diff --git a/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java b/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java index 9185362cf..d84ed61ec 100644 --- a/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java +++ b/src/main/java/com/example/solidconnection/siteuser/dto/MyPageResponse.java @@ -3,6 +3,7 @@ import com.example.solidconnection.siteuser.domain.AuthType; import com.example.solidconnection.siteuser.domain.Role; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.fasterxml.jackson.annotation.JsonProperty; public record MyPageResponse( String nickname, @@ -12,9 +13,11 @@ public record MyPageResponse( String email, int likedPostCount, int likedMentorCount, - int likedUniversityCount) { - public static MyPageResponse of(SiteUser siteUser, int likedUniversityCount) { + @JsonProperty("likedUniversityCount") + int likedUnivApplyInfoCount) { + + public static MyPageResponse of(SiteUser siteUser, int likedUnivApplyInfoCount) { return new MyPageResponse( siteUser.getNickname(), siteUser.getProfileImageUrl(), @@ -23,7 +26,7 @@ public static MyPageResponse of(SiteUser siteUser, int likedUniversityCount) { siteUser.getEmail(), 0, // TODO: 커뮤니티 기능 생기면 업데이트 필요 0, // TODO: 멘토 기능 생기면 업데이트 필요 - likedUniversityCount + likedUnivApplyInfoCount ); } } diff --git a/src/main/java/com/example/solidconnection/siteuser/repository/LikedUniversityRepository.java b/src/main/java/com/example/solidconnection/siteuser/repository/LikedUniversityRepository.java deleted file mode 100644 index f0d328c0a..000000000 --- a/src/main/java/com/example/solidconnection/siteuser/repository/LikedUniversityRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.solidconnection.siteuser.repository; - -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.university.domain.LikedUniversity; -import com.example.solidconnection.university.domain.UnivApplyInfo; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.List; -import java.util.Optional; - -public interface LikedUniversityRepository extends JpaRepository { - - List findAllBySiteUser_Id(long siteUserId); - - int countBySiteUser_Id(long siteUserId); - - Optional findBySiteUserAndUnivApplyInfo(SiteUser siteUser, UnivApplyInfo univApplyInfo); -} diff --git a/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java index 7e22fd4bf..c524487e8 100644 --- a/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java +++ b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java @@ -6,10 +6,10 @@ import com.example.solidconnection.s3.service.S3Service; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.dto.MyPageResponse; -import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; +import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.university.domain.LikedUniversity; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; +import com.example.solidconnection.university.domain.LikedUnivApplyInfo; +import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -31,7 +31,7 @@ public class MyPageService { public static final DateTimeFormatter NICKNAME_LAST_CHANGE_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); private final SiteUserRepository siteUserRepository; - private final LikedUniversityRepository likedUniversityRepository; + private final LikedUnivApplyInfoRepository likedUnivApplyInfoRepository; private final S3Service s3Service; /* @@ -39,8 +39,8 @@ public class MyPageService { * */ @Transactional(readOnly = true) public MyPageResponse getMyPageInfo(SiteUser siteUser) { - int likedUniversityCount = likedUniversityRepository.countBySiteUser_Id(siteUser.getId()); - return MyPageResponse.of(siteUser, likedUniversityCount); + int likedUnivApplyInfoCount = likedUnivApplyInfoRepository.countBySiteUser_Id(siteUser.getId()); + return MyPageResponse.of(siteUser, likedUnivApplyInfoCount); } /* @@ -94,10 +94,10 @@ private boolean isDefaultProfileImage(String profileImageUrl) { * 관심 대학교 목록을 조회한다. * */ @Transactional(readOnly = true) - public List getWishUniversity(SiteUser siteUser) { - List likedUniversities = likedUniversityRepository.findAllBySiteUser_Id(siteUser.getId()); - return likedUniversities.stream() - .map(likedUniversity -> UniversityInfoForApplyPreviewResponse.from(likedUniversity.getUnivApplyInfo())) + public List getWishUnivApplyInfo(SiteUser siteUser) { + List likedUnivApplyInfos = likedUnivApplyInfoRepository.findAllBySiteUser_Id(siteUser.getId()); + return likedUnivApplyInfos.stream() + .map(likedUnivApplyInfo -> UnivApplyInfoPreviewResponse.from(likedUnivApplyInfo.getUnivApplyInfo())) .toList(); } } diff --git a/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java b/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java new file mode 100644 index 000000000..d39518e5d --- /dev/null +++ b/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java @@ -0,0 +1,104 @@ +package com.example.solidconnection.university.controller; + +import com.example.solidconnection.common.resolver.AuthorizedUser; +import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.service.MyPageService; +import com.example.solidconnection.university.domain.LanguageTestType; +import com.example.solidconnection.university.dto.IsLikeResponse; +import com.example.solidconnection.university.dto.LikeResultResponse; +import com.example.solidconnection.university.dto.UnivApplyInfoDetailResponse; +import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; +import com.example.solidconnection.university.dto.UnivApplyInfoRecommendsResponse; +import com.example.solidconnection.university.service.UnivApplyInfoLikeService; +import com.example.solidconnection.university.service.UnivApplyInfoQueryService; +import com.example.solidconnection.university.service.UnivApplyInfoRecommendService; +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.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RequiredArgsConstructor +@RequestMapping("/univ-apply-infos") +@RestController +public class UnivApplyInfoController { + + private final UnivApplyInfoQueryService univApplyInfoQueryService; + private final UnivApplyInfoLikeService univApplyInfoLikeService; + private final UnivApplyInfoRecommendService univApplyInfoRecommendService; + private final MyPageService myPageService; + + @GetMapping("/recommend") + public ResponseEntity getUnivApplyInfoRecommends( + @AuthorizedUser(required = false) SiteUser siteUser + ) { + if (siteUser == null) { + return ResponseEntity.ok(univApplyInfoRecommendService.getGeneralRecommends()); + } else { + return ResponseEntity.ok(univApplyInfoRecommendService.getPersonalRecommends(siteUser)); + } + } + + // todo: return 타입 UnivApplyInfoPreviewResponses 같이 객체로 묶어서 반환하는 것으로 변경 필요 + @GetMapping("/like") + public ResponseEntity> getMyWishUnivApplyInfo( /* todo: wish 가 아니라 liked 로 변경 필요 - 코드 용어 통일 */ + @AuthorizedUser SiteUser siteUser + ) { + List wishUniversities = myPageService.getWishUnivApplyInfo(siteUser); + return ResponseEntity.ok(wishUniversities); + } + + @GetMapping("/{univ-apply-info-id}/like") + public ResponseEntity getIsLiked( + @AuthorizedUser SiteUser siteUser, + @PathVariable("univ-apply-info-id") Long univApplyInfoId + ) { + IsLikeResponse isLiked = univApplyInfoLikeService.getIsLiked(siteUser, univApplyInfoId); + return ResponseEntity.ok(isLiked); + } + + @PostMapping("/{univ-apply-info-id}/like") + public ResponseEntity addWishUnivApplyInfo( + @AuthorizedUser SiteUser siteUser, + @PathVariable("univ-apply-info-id") Long univApplyInfoId + ) { + LikeResultResponse likeResultResponse = univApplyInfoLikeService.likeUnivApplyInfo(siteUser, univApplyInfoId); + return ResponseEntity.ok(likeResultResponse); + } + + @DeleteMapping("/{univ-apply-info-id}/like") + public ResponseEntity cancelWishUnivApplyInfo( + @AuthorizedUser SiteUser siteUser, + @PathVariable("univ-apply-info-id") Long univApplyInfoId + ) { + LikeResultResponse likeResultResponse = univApplyInfoLikeService.cancelLikeUnivApplyInfo(siteUser, univApplyInfoId); + return ResponseEntity.ok(likeResultResponse); + } + + @GetMapping("/{univ-apply-info-id}") + public ResponseEntity getUnivApplyInfoDetails( + @PathVariable("univ-apply-info-id") Long univApplyInfoId + ) { + UnivApplyInfoDetailResponse univApplyInfoDetailResponse = univApplyInfoQueryService.getUnivApplyInfoDetail(univApplyInfoId); + return ResponseEntity.ok(univApplyInfoDetailResponse); + } + + // todo: return타입 UniversityInfoForApplyPreviewResponses로 추후 수정 필요 + @GetMapping("/search") + public ResponseEntity> searchUnivApplyInfo( + @RequestParam(required = false, defaultValue = "") String region, + @RequestParam(required = false, defaultValue = "") List keyword, + @RequestParam(required = false, defaultValue = "") LanguageTestType testType, + @RequestParam(required = false, defaultValue = "") String testScore + ) { + List univApplyInfoPreviewResponse + = univApplyInfoQueryService.searchUnivApplyInfo(region, keyword, testType, testScore).univApplyInfoPreviews(); + return ResponseEntity.ok(univApplyInfoPreviewResponse); + } +} diff --git a/src/main/java/com/example/solidconnection/university/controller/UniversityController.java b/src/main/java/com/example/solidconnection/university/controller/UniversityController.java deleted file mode 100644 index 6345876a9..000000000 --- a/src/main/java/com/example/solidconnection/university/controller/UniversityController.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.example.solidconnection.university.controller; - -import com.example.solidconnection.common.resolver.AuthorizedUser; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.service.MyPageService; -import com.example.solidconnection.university.domain.LanguageTestType; -import com.example.solidconnection.university.dto.IsLikeResponse; -import com.example.solidconnection.university.dto.LikeResultResponse; -import com.example.solidconnection.university.dto.UniversityDetailResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.dto.UniversityRecommendsResponse; -import com.example.solidconnection.university.service.UniversityLikeService; -import com.example.solidconnection.university.service.UniversityQueryService; -import com.example.solidconnection.university.service.UniversityRecommendService; -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.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -@RequiredArgsConstructor -@RequestMapping("/universities") -@RestController -public class UniversityController { - - private final UniversityQueryService universityQueryService; - private final UniversityLikeService universityLikeService; - private final UniversityRecommendService universityRecommendService; - private final MyPageService myPageService; - - @GetMapping("/recommend") - public ResponseEntity getUniversityRecommends( - @AuthorizedUser(required = false) SiteUser siteUser - ) { - if (siteUser == null) { - return ResponseEntity.ok(universityRecommendService.getGeneralRecommends()); - } else { - return ResponseEntity.ok(universityRecommendService.getPersonalRecommends(siteUser)); - } - } - - @GetMapping("/like") - public ResponseEntity> getMyWishUniversity( - @AuthorizedUser SiteUser siteUser - ) { - List wishUniversities = myPageService.getWishUniversity(siteUser); - return ResponseEntity.ok(wishUniversities); - } - - @GetMapping("/{universityInfoForApplyId}/like") - public ResponseEntity getIsLiked( - @AuthorizedUser SiteUser siteUser, - @PathVariable Long universityInfoForApplyId - ) { - IsLikeResponse isLiked = universityLikeService.getIsLiked(siteUser, universityInfoForApplyId); - return ResponseEntity.ok(isLiked); - } - - @PostMapping("/{universityInfoForApplyId}/like") - public ResponseEntity addWishUniversity( - @AuthorizedUser SiteUser siteUser, - @PathVariable Long universityInfoForApplyId - ) { - LikeResultResponse likeResultResponse = universityLikeService.likeUniversity(siteUser, universityInfoForApplyId); - return ResponseEntity.ok(likeResultResponse); - } - - @DeleteMapping("/{universityInfoForApplyId}/like") - public ResponseEntity cancelWishUniversity( - @AuthorizedUser SiteUser siteUser, - @PathVariable Long universityInfoForApplyId - ) { - LikeResultResponse likeResultResponse = universityLikeService.cancelLikeUniversity(siteUser, universityInfoForApplyId); - return ResponseEntity.ok(likeResultResponse); - } - - @GetMapping("/{universityInfoForApplyId}") - public ResponseEntity getUniversityDetails( - @PathVariable Long universityInfoForApplyId - ) { - UniversityDetailResponse universityDetailResponse = universityQueryService.getUniversityDetail(universityInfoForApplyId); - return ResponseEntity.ok(universityDetailResponse); - } - - // todo return타입 UniversityInfoForApplyPreviewResponses로 추후 수정 필요 - @GetMapping("/search") - public ResponseEntity> searchUniversity( - @RequestParam(required = false, defaultValue = "") String region, - @RequestParam(required = false, defaultValue = "") List keyword, - @RequestParam(required = false, defaultValue = "") LanguageTestType testType, - @RequestParam(required = false, defaultValue = "") String testScore - ) { - List universityInfoForApplyPreviewResponse - = universityQueryService.searchUniversity(region, keyword, testType, testScore).universityInfoForApplyPreviewResponses(); - return ResponseEntity.ok(universityInfoForApplyPreviewResponse); - } -} diff --git a/src/main/java/com/example/solidconnection/university/domain/LikedUniversity.java b/src/main/java/com/example/solidconnection/university/domain/LikedUnivApplyInfo.java similarity index 89% rename from src/main/java/com/example/solidconnection/university/domain/LikedUniversity.java rename to src/main/java/com/example/solidconnection/university/domain/LikedUnivApplyInfo.java index 036346d5a..08612fa42 100644 --- a/src/main/java/com/example/solidconnection/university/domain/LikedUniversity.java +++ b/src/main/java/com/example/solidconnection/university/domain/LikedUnivApplyInfo.java @@ -19,13 +19,15 @@ @Builder @AllArgsConstructor @NoArgsConstructor -@Table(uniqueConstraints = { +@Table( + name = "liked_university_info_for_apply", + uniqueConstraints = { @UniqueConstraint( name = "uk_liked_university_site_user_id_university_info_for_apply_id", columnNames = {"site_user_id", "university_info_for_apply_id"} ) }) -public class LikedUniversity { +public class LikedUnivApplyInfo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/example/solidconnection/university/dto/UniversityDetailResponse.java b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoDetailResponse.java similarity index 94% rename from src/main/java/com/example/solidconnection/university/dto/UniversityDetailResponse.java rename to src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoDetailResponse.java index 86da18e7e..673254d88 100644 --- a/src/main/java/com/example/solidconnection/university/dto/UniversityDetailResponse.java +++ b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoDetailResponse.java @@ -5,7 +5,7 @@ import java.util.List; -public record UniversityDetailResponse( +public record UnivApplyInfoDetailResponse( long id, String term, String koreanName, @@ -33,10 +33,10 @@ public record UniversityDetailResponse( String accommodationUrl, String englishCourseUrl) { - public static UniversityDetailResponse of( + public static UnivApplyInfoDetailResponse of( University university, UnivApplyInfo univApplyInfo) { - return new UniversityDetailResponse( + return new UnivApplyInfoDetailResponse( univApplyInfo.getId(), univApplyInfo.getTerm(), univApplyInfo.getKoreanName(), diff --git a/src/main/java/com/example/solidconnection/university/dto/UniversityInfoForApplyPreviewResponse.java b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponse.java similarity index 86% rename from src/main/java/com/example/solidconnection/university/dto/UniversityInfoForApplyPreviewResponse.java rename to src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponse.java index bca888d03..4f7f7c3f1 100644 --- a/src/main/java/com/example/solidconnection/university/dto/UniversityInfoForApplyPreviewResponse.java +++ b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponse.java @@ -5,7 +5,7 @@ import java.util.Collections; import java.util.List; -public record UniversityInfoForApplyPreviewResponse( +public record UnivApplyInfoPreviewResponse( long id, String term, String koreanName, @@ -16,14 +16,14 @@ public record UniversityInfoForApplyPreviewResponse( int studentCapacity, List languageRequirements) { - public static UniversityInfoForApplyPreviewResponse from(UnivApplyInfo univApplyInfo) { + public static UnivApplyInfoPreviewResponse from(UnivApplyInfo univApplyInfo) { List languageRequirementResponses = new java.util.ArrayList<>( univApplyInfo.getLanguageRequirements().stream() .map(LanguageRequirementResponse::from) .toList()); Collections.sort(languageRequirementResponses); - return new UniversityInfoForApplyPreviewResponse( + return new UnivApplyInfoPreviewResponse( univApplyInfo.getId(), univApplyInfo.getTerm(), univApplyInfo.getKoreanName(), diff --git a/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponses.java b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponses.java new file mode 100644 index 000000000..2afec8262 --- /dev/null +++ b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoPreviewResponses.java @@ -0,0 +1,9 @@ +package com.example.solidconnection.university.dto; + +import java.util.List; + +public record UnivApplyInfoPreviewResponses( + List univApplyInfoPreviews + // todo: #345 응답 형식으로 바로 배열이 아니라, univApplyInfoPreviews로 감싸 응답한다고 전달 후, 코드 변경 필요 +) { +} diff --git a/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoRecommendsResponse.java b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoRecommendsResponse.java new file mode 100644 index 000000000..759f1d813 --- /dev/null +++ b/src/main/java/com/example/solidconnection/university/dto/UnivApplyInfoRecommendsResponse.java @@ -0,0 +1,8 @@ +package com.example.solidconnection.university.dto; + +import java.util.List; + +public record UnivApplyInfoRecommendsResponse( + List recommendedUniversities) { + // todo: #345 프론트에 recommendedUnivApplyInfos 로 응답한다고 전달 후, 인자명 변경 필요 +} diff --git a/src/main/java/com/example/solidconnection/university/dto/UniversityInfoForApplyPreviewResponses.java b/src/main/java/com/example/solidconnection/university/dto/UniversityInfoForApplyPreviewResponses.java deleted file mode 100644 index 3c8a00df4..000000000 --- a/src/main/java/com/example/solidconnection/university/dto/UniversityInfoForApplyPreviewResponses.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.solidconnection.university.dto; - -import java.util.List; - -public record UniversityInfoForApplyPreviewResponses( - List universityInfoForApplyPreviewResponses -) { -} diff --git a/src/main/java/com/example/solidconnection/university/dto/UniversityRecommendsResponse.java b/src/main/java/com/example/solidconnection/university/dto/UniversityRecommendsResponse.java deleted file mode 100644 index 057061f3e..000000000 --- a/src/main/java/com/example/solidconnection/university/dto/UniversityRecommendsResponse.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.solidconnection.university.dto; - -import java.util.List; - -public record UniversityRecommendsResponse( - List recommendedUniversities) { -} diff --git a/src/main/java/com/example/solidconnection/university/dto/validation/ValidUniversityChoice.java b/src/main/java/com/example/solidconnection/university/dto/validation/ValidUnivApplyInfoChoice.java similarity index 82% rename from src/main/java/com/example/solidconnection/university/dto/validation/ValidUniversityChoice.java rename to src/main/java/com/example/solidconnection/university/dto/validation/ValidUnivApplyInfoChoice.java index 658de067c..7d925287a 100644 --- a/src/main/java/com/example/solidconnection/university/dto/validation/ValidUniversityChoice.java +++ b/src/main/java/com/example/solidconnection/university/dto/validation/ValidUnivApplyInfoChoice.java @@ -10,8 +10,8 @@ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) -@Constraint(validatedBy = ValidUniversityChoiceValidator.class) -public @interface ValidUniversityChoice { +@Constraint(validatedBy = ValidUnivApplyInfoChoiceValidator.class) +public @interface ValidUnivApplyInfoChoice { String message() default "유효하지 않은 지망 대학 선택입니다."; Class[] groups() default {}; diff --git a/src/main/java/com/example/solidconnection/university/dto/validation/ValidUniversityChoiceValidator.java b/src/main/java/com/example/solidconnection/university/dto/validation/ValidUnivApplyInfoChoiceValidator.java similarity index 59% rename from src/main/java/com/example/solidconnection/university/dto/validation/ValidUniversityChoiceValidator.java rename to src/main/java/com/example/solidconnection/university/dto/validation/ValidUnivApplyInfoChoiceValidator.java index 63d47b0de..a49d631d1 100644 --- a/src/main/java/com/example/solidconnection/university/dto/validation/ValidUniversityChoiceValidator.java +++ b/src/main/java/com/example/solidconnection/university/dto/validation/ValidUnivApplyInfoChoiceValidator.java @@ -1,6 +1,6 @@ package com.example.solidconnection.university.dto.validation; -import com.example.solidconnection.application.dto.UniversityChoiceRequest; +import com.example.solidconnection.application.dto.UnivApplyInfoChoiceRequest; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; @@ -9,14 +9,14 @@ import java.util.Set; import java.util.stream.Stream; -import static com.example.solidconnection.common.exception.ErrorCode.DUPLICATE_UNIVERSITY_CHOICE; +import static com.example.solidconnection.common.exception.ErrorCode.DUPLICATE_UNIV_APPLY_INFO_CHOICE; import static com.example.solidconnection.common.exception.ErrorCode.FIRST_CHOICE_REQUIRED; import static com.example.solidconnection.common.exception.ErrorCode.THIRD_CHOICE_REQUIRES_SECOND; -public class ValidUniversityChoiceValidator implements ConstraintValidator { +public class ValidUnivApplyInfoChoiceValidator implements ConstraintValidator { @Override - public boolean isValid(UniversityChoiceRequest request, ConstraintValidatorContext context) { + public boolean isValid(UnivApplyInfoChoiceRequest request, ConstraintValidatorContext context) { context.disableDefaultConstraintViolation(); if (isFirstChoiceNotSelected(request)) { @@ -32,7 +32,7 @@ public boolean isValid(UniversityChoiceRequest request, ConstraintValidatorConte } if (isDuplicate(request)) { - context.buildConstraintViolationWithTemplate(DUPLICATE_UNIVERSITY_CHOICE.getMessage()) + context.buildConstraintViolationWithTemplate(DUPLICATE_UNIV_APPLY_INFO_CHOICE.getMessage()) .addConstraintViolation(); return false; } @@ -40,20 +40,20 @@ public boolean isValid(UniversityChoiceRequest request, ConstraintValidatorConte return true; } - private boolean isFirstChoiceNotSelected(UniversityChoiceRequest request) { - return request.firstChoiceUniversityId() == null; + private boolean isFirstChoiceNotSelected(UnivApplyInfoChoiceRequest request) { + return request.firstChoiceUnivApplyInfoId() == null; } - private boolean isThirdChoiceWithoutSecond(UniversityChoiceRequest request) { - return request.thirdChoiceUniversityId() != null && request.secondChoiceUniversityId() == null; + private boolean isThirdChoiceWithoutSecond(UnivApplyInfoChoiceRequest request) { + return request.thirdChoiceUnivApplyInfoId() != null && request.secondChoiceUnivApplyInfoId() == null; } - private boolean isDuplicate(UniversityChoiceRequest request) { + private boolean isDuplicate(UnivApplyInfoChoiceRequest request) { Set uniqueIds = new HashSet<>(); return Stream.of( - request.firstChoiceUniversityId(), - request.secondChoiceUniversityId(), - request.thirdChoiceUniversityId() + request.firstChoiceUnivApplyInfoId(), + request.secondChoiceUnivApplyInfoId(), + request.thirdChoiceUnivApplyInfoId() ) .filter(Objects::nonNull) .anyMatch(id -> !uniqueIds.add(id)); diff --git a/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java b/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java new file mode 100644 index 000000000..bca7a7eef --- /dev/null +++ b/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java @@ -0,0 +1,18 @@ +package com.example.solidconnection.university.repository; + +import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.university.domain.LikedUnivApplyInfo; +import com.example.solidconnection.university.domain.UnivApplyInfo; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + +public interface LikedUnivApplyInfoRepository extends JpaRepository { + + List findAllBySiteUser_Id(long siteUserId); + + int countBySiteUser_Id(long siteUserId); + + Optional findBySiteUserAndUnivApplyInfo(SiteUser siteUser, UnivApplyInfo univApplyInfo); +} diff --git a/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java new file mode 100644 index 000000000..389f66531 --- /dev/null +++ b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java @@ -0,0 +1,62 @@ +package com.example.solidconnection.university.repository; + +import com.example.solidconnection.common.exception.CustomException; +import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.university.domain.UnivApplyInfo; +import com.example.solidconnection.university.repository.custom.UnivApplyInfoFilterRepository; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +import static com.example.solidconnection.common.exception.ErrorCode.UNIV_APPLY_INFO_NOT_FOUND; + +@Repository +public interface UnivApplyInfoRepository extends JpaRepository, UnivApplyInfoFilterRepository { + + @Query(""" + SELECT uai + FROM UnivApplyInfo uai + JOIN University u ON uai.university = u + WHERE (u.country.code IN ( + SELECT c.code + FROM InterestedCountry ic + JOIN ic.country c + WHERE ic.siteUser = :siteUser + ) + OR u.region.code IN ( + SELECT r.code + FROM InterestedRegion ir + JOIN ir.region r + WHERE ir.siteUser = :siteUser + )) + AND uai.term = :term + """) + List findAllBySiteUsersInterestedCountryOrRegionAndTerm(@Param("siteUser") SiteUser siteUser, @Param("term") String term); + + @Query(value = """ + SELECT * + FROM university_info_for_apply + WHERE term = :term + ORDER BY RAND() + LIMIT :limitNum + """, nativeQuery = true) + List findRandomByTerm(@Param("term") String term, @Param("limitNum") int limitNum); + + default UnivApplyInfo getUnivApplyInfoById(Long id) { + return findById(id) + .orElseThrow(() -> new CustomException(UNIV_APPLY_INFO_NOT_FOUND)); + } + + @Query(""" + SELECT DISTINCT uai + FROM UnivApplyInfo uai + JOIN FETCH uai.university u + JOIN FETCH u.country c + JOIN FETCH u.region r + WHERE uai.id IN :ids + """) + List findAllByIds(@Param("ids") List ids); +} diff --git a/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java b/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java deleted file mode 100644 index 1ef541334..000000000 --- a/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.example.solidconnection.university.repository; - -import com.example.solidconnection.common.exception.CustomException; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.domain.University; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -import static com.example.solidconnection.common.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; - -@Repository -public interface UniversityInfoForApplyRepository extends JpaRepository { - - Optional findByIdAndTerm(Long id, String term); - - Optional findFirstByKoreanNameAndTerm(String koreanName, String term); - - @Query(""" - SELECT uifa - FROM UnivApplyInfo uifa - WHERE uifa.university IN :universities - AND uifa.term = :term - """) - List findByUniversitiesAndTerm(@Param("universities") List universities, @Param("term") String term); - - @Query(""" - SELECT uifa - FROM UnivApplyInfo uifa - JOIN University u ON uifa.university = u - WHERE (u.country.code IN ( - SELECT c.code - FROM InterestedCountry ic - JOIN ic.country c - WHERE ic.siteUser = :siteUser - ) - OR u.region.code IN ( - SELECT r.code - FROM InterestedRegion ir - JOIN ir.region r - WHERE ir.siteUser = :siteUser - )) - AND uifa.term = :term - """) - List findUniversityInfoForAppliesBySiteUsersInterestedCountryOrRegionAndTerm(@Param("siteUser") SiteUser siteUser, @Param("term") String term); - - @Query(value = """ - SELECT * - FROM university_info_for_apply - WHERE term = :term - ORDER BY RAND() - LIMIT :limitNum - """, nativeQuery = true) - List findRandomByTerm(@Param("term") String term, @Param("limitNum") int limitNum); - - default UnivApplyInfo getUniversityInfoForApplyById(Long id) { - return findById(id) - .orElseThrow(() -> new CustomException(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND)); - } - - @Query(""" - SELECT DISTINCT uifa - FROM UnivApplyInfo uifa - JOIN FETCH uifa.university u - JOIN FETCH u.country c - JOIN FETCH u.region r - WHERE uifa.id IN :ids - """) - List findAllByUniversityIds(@Param("ids") List ids); - - @Query(""" - SELECT DISTINCT uifa - FROM UnivApplyInfo uifa - JOIN FETCH uifa.university u - JOIN FETCH u.country c - JOIN FETCH u.region r - WHERE u.id IN :universityIds - """) - List findByUniversityIdsWithUniversityAndLocation(@Param("universityIds") List universityIds); -} diff --git a/src/main/java/com/example/solidconnection/university/repository/UniversityRepository.java b/src/main/java/com/example/solidconnection/university/repository/UniversityRepository.java index b19285469..b5a9adb59 100644 --- a/src/main/java/com/example/solidconnection/university/repository/UniversityRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/UniversityRepository.java @@ -2,7 +2,6 @@ import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.university.domain.University; -import com.example.solidconnection.university.repository.custom.UniversityFilterRepository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -13,7 +12,7 @@ import static com.example.solidconnection.common.exception.ErrorCode.UNIVERSITY_NOT_FOUND; @Repository -public interface UniversityRepository extends JpaRepository, UniversityFilterRepository { +public interface UniversityRepository extends JpaRepository { @Query("SELECT u FROM University u WHERE u.country.code IN :countryCodes OR u.region.code IN :regionCodes") List findByCountryCodeInOrRegionCodeIn(@Param("countryCodes") List countryCodes, @Param("regionCodes") List regionCodes); diff --git a/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepository.java b/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepository.java similarity index 59% rename from src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepository.java rename to src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepository.java index f3c9767b9..588bfbf9f 100644 --- a/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepository.java @@ -5,10 +5,10 @@ import java.util.List; -public interface UniversityFilterRepository { +public interface UnivApplyInfoFilterRepository { - List findByRegionCodeAndKeywords(String regionCode, List keywords); + List findAllByRegionCodeAndKeywords(String regionCode, List keywords); - List findByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm( + List findAllByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm( String regionCode, List keywords, LanguageTestType testType, String testScore, String term); } diff --git a/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java b/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java similarity index 89% rename from src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java rename to src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java index ee8416b9c..50c9bcf67 100644 --- a/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java +++ b/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java @@ -18,17 +18,17 @@ import java.util.List; @Repository -public class UniversityFilterRepositoryImpl implements UniversityFilterRepository { +public class UnivApplyInfoFilterRepositoryImpl implements UnivApplyInfoFilterRepository { private final JPAQueryFactory queryFactory; @Autowired - public UniversityFilterRepositoryImpl(EntityManager em) { + public UnivApplyInfoFilterRepositoryImpl(EntityManager em) { this.queryFactory = new JPAQueryFactory(em); } @Override - public List findByRegionCodeAndKeywords(String regionCode, List keywords) { + public List findAllByRegionCodeAndKeywords(String regionCode, List keywords) { QUnivApplyInfo univApplyInfo = QUnivApplyInfo.univApplyInfo; QUniversity university = QUniversity.university; QCountry country = QCountry.country; @@ -74,7 +74,7 @@ private BooleanExpression createKeywordCondition(StringPath namePath, List findByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm( + public List findAllByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm( String regionCode, List keywords, LanguageTestType testType, String testScore, String term) { QUniversity university = QUniversity.university; QCountry country = QCountry.country; @@ -94,7 +94,7 @@ public List findByRegionCodeAndKeywordsAndLanguageTestTypeAndTest if (testScore == null || testScore.isEmpty()) { if (testType != null) { return filteredUnivApplyInfo.stream() - .filter(uifa -> uifa.getLanguageRequirements().stream() + .filter(uai -> uai.getLanguageRequirements().stream() .anyMatch(lr -> lr.getLanguageTestType().equals(testType))) .toList(); } @@ -102,7 +102,7 @@ public List findByRegionCodeAndKeywordsAndLanguageTestTypeAndTest } return filteredUnivApplyInfo.stream() - .filter(uifa -> compareMyTestScoreToMinPassScore(uifa, testType, testScore) >= 0) + .filter(uai -> compareMyTestScoreToMinPassScore(uai, testType, testScore) >= 0) .toList(); } diff --git a/src/main/java/com/example/solidconnection/university/service/GeneralUniversityRecommendService.java b/src/main/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendService.java similarity index 64% rename from src/main/java/com/example/solidconnection/university/service/GeneralUniversityRecommendService.java rename to src/main/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendService.java index af2921c9a..1835f4ed0 100644 --- a/src/main/java/com/example/solidconnection/university/service/GeneralUniversityRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendService.java @@ -1,7 +1,7 @@ package com.example.solidconnection.university.service; import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; +import com.example.solidconnection.university.repository.UnivApplyInfoRepository; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; @@ -11,25 +11,25 @@ import java.util.List; -import static com.example.solidconnection.university.service.UniversityRecommendService.RECOMMEND_UNIVERSITY_NUM; +import static com.example.solidconnection.university.service.UnivApplyInfoRecommendService.RECOMMEND_UNIV_APPLY_INFO_NUM; @Service @RequiredArgsConstructor -public class GeneralUniversityRecommendService { +public class GeneralUnivApplyInfoRecommendService { /* * 해당 시기에 열리는 대학교들 중 랜덤으로 선택해서 목록을 구성한다. * */ - private final UniversityInfoForApplyRepository universityInfoForApplyRepository; + private final UnivApplyInfoRepository univApplyInfoRepository; @Getter - private List recommendUniversities; + private List generalRecommends; @Value("${university.term}") public String term; @EventListener(ApplicationReadyEvent.class) public void init() { - recommendUniversities = universityInfoForApplyRepository.findRandomByTerm(term, RECOMMEND_UNIVERSITY_NUM); + generalRecommends = univApplyInfoRepository.findRandomByTerm(term, RECOMMEND_UNIV_APPLY_INFO_NUM); } } diff --git a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java new file mode 100644 index 000000000..0d3fc4d96 --- /dev/null +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java @@ -0,0 +1,79 @@ +package com.example.solidconnection.university.service; + +import com.example.solidconnection.common.exception.CustomException; +import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository; +import com.example.solidconnection.university.domain.LikedUnivApplyInfo; +import com.example.solidconnection.university.domain.UnivApplyInfo; +import com.example.solidconnection.university.dto.IsLikeResponse; +import com.example.solidconnection.university.dto.LikeResultResponse; +import com.example.solidconnection.university.repository.UnivApplyInfoRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_UNIV_APPLY_INFO; +import static com.example.solidconnection.common.exception.ErrorCode.NOT_LIKED_UNIV_APPLY_INFO; + +@RequiredArgsConstructor +@Service +public class UnivApplyInfoLikeService { + + public static final String LIKE_SUCCESS_MESSAGE = "LIKE_SUCCESS"; + public static final String LIKE_CANCELED_MESSAGE = "LIKE_CANCELED"; + + private final UnivApplyInfoRepository univApplyInfoRepository; + private final LikedUnivApplyInfoRepository likedUnivApplyInfoRepository; + + @Value("${university.term}") + public String term; + + /* + * 대학교를 '좋아요' 한다. + * */ + @Transactional + public LikeResultResponse likeUnivApplyInfo(SiteUser siteUser, Long univApplyInfoId) { + UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); + + Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo); + if (optionalLikedUnivApplyInfo.isPresent()) { + throw new CustomException(ALREADY_LIKED_UNIV_APPLY_INFO); + } + + LikedUnivApplyInfo likedUnivApplyInfo = LikedUnivApplyInfo.builder() + .univApplyInfo(univApplyInfo) + .siteUser(siteUser) + .build(); + likedUnivApplyInfoRepository.save(likedUnivApplyInfo); + return new LikeResultResponse(LIKE_SUCCESS_MESSAGE); + } + + /* + * 대학교 '좋아요'를 취소한다. + * */ + @Transactional + public LikeResultResponse cancelLikeUnivApplyInfo(SiteUser siteUser, long univApplyInfoId) { + UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); + + Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo); + if (optionalLikedUnivApplyInfo.isEmpty()) { + throw new CustomException(NOT_LIKED_UNIV_APPLY_INFO); + } + + likedUnivApplyInfoRepository.delete(optionalLikedUnivApplyInfo.get()); + return new LikeResultResponse(LIKE_CANCELED_MESSAGE); + } + + /* + * '좋아요'한 대학교인지 확인한다. + * */ + @Transactional(readOnly = true) + public IsLikeResponse getIsLiked(SiteUser siteUser, Long univApplyInfoId) { + UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); + boolean isLike = likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo).isPresent(); + return new IsLikeResponse(isLike); + } +} diff --git a/src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java similarity index 54% rename from src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java rename to src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java index 5c4415396..86717c382 100644 --- a/src/main/java/com/example/solidconnection/university/service/UniversityQueryService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoQueryService.java @@ -4,11 +4,11 @@ import com.example.solidconnection.university.domain.LanguageTestType; import com.example.solidconnection.university.domain.University; import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.dto.UniversityDetailResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponses; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; -import com.example.solidconnection.university.repository.custom.UniversityFilterRepositoryImpl; +import com.example.solidconnection.university.dto.UnivApplyInfoDetailResponse; +import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; +import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponses; +import com.example.solidconnection.university.repository.UnivApplyInfoRepository; +import com.example.solidconnection.university.repository.custom.UnivApplyInfoFilterRepositoryImpl; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -18,10 +18,10 @@ @RequiredArgsConstructor @Service -public class UniversityQueryService { +public class UnivApplyInfoQueryService { - private final UniversityInfoForApplyRepository universityInfoForApplyRepository; - private final UniversityFilterRepositoryImpl universityFilterRepository; + private final UnivApplyInfoRepository univApplyInfoRepository; + private final UnivApplyInfoFilterRepositoryImpl universityFilterRepository; // todo: 구현체 숨기고 univApplyInfoRepository만 사용하도록 @Value("${university.term}") public String term; @@ -31,13 +31,13 @@ public class UniversityQueryService { * - 대학교(University) 정보와 대학 지원 정보(UniversityInfoForApply) 정보를 조합하여 반환한다. * */ @Transactional(readOnly = true) - @ThunderingHerdCaching(key = "university:{0}", cacheManager = "customCacheManager", ttlSec = 86400) - public UniversityDetailResponse getUniversityDetail(Long universityInfoForApplyId) { + @ThunderingHerdCaching(key = "univApplyInfo:{0}", cacheManager = "customCacheManager", ttlSec = 86400) + public UnivApplyInfoDetailResponse getUnivApplyInfoDetail(Long univApplyInfoId) { UnivApplyInfo univApplyInfo - = universityInfoForApplyRepository.getUniversityInfoForApplyById(universityInfoForApplyId); + = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); University university = univApplyInfo.getUniversity(); - return UniversityDetailResponse.of(university, univApplyInfo); + return UnivApplyInfoDetailResponse.of(university, univApplyInfo); } /* @@ -48,14 +48,14 @@ public UniversityDetailResponse getUniversityDetail(Long universityInfoForApplyI * - 언어 시험 점수는 합격 최소 점수보다 높은 것이 조건이다. * */ @Transactional(readOnly = true) - @ThunderingHerdCaching(key = "university:{0}:{1}:{2}:{3}", cacheManager = "customCacheManager", ttlSec = 86400) - public UniversityInfoForApplyPreviewResponses searchUniversity( + @ThunderingHerdCaching(key = "univApplyInfo:{0}:{1}:{2}:{3}", cacheManager = "customCacheManager", ttlSec = 86400) + public UnivApplyInfoPreviewResponses searchUnivApplyInfo( String regionCode, List keywords, LanguageTestType testType, String testScore) { - return new UniversityInfoForApplyPreviewResponses(universityFilterRepository - .findByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm(regionCode, keywords, testType, testScore, term) + return new UnivApplyInfoPreviewResponses(universityFilterRepository + .findAllByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm(regionCode, keywords, testType, testScore, term) .stream() - .map(UniversityInfoForApplyPreviewResponse::from) + .map(UnivApplyInfoPreviewResponse::from) .toList()); } } diff --git a/src/main/java/com/example/solidconnection/university/service/UniversityRecommendService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java similarity index 54% rename from src/main/java/com/example/solidconnection/university/service/UniversityRecommendService.java rename to src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java index 94447316d..aa6f34f79 100644 --- a/src/main/java/com/example/solidconnection/university/service/UniversityRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java @@ -3,9 +3,9 @@ import com.example.solidconnection.cache.annotation.ThunderingHerdCaching; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.dto.UniversityRecommendsResponse; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; +import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; +import com.example.solidconnection.university.dto.UnivApplyInfoRecommendsResponse; +import com.example.solidconnection.university.repository.UnivApplyInfoRepository; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -17,12 +17,12 @@ @RequiredArgsConstructor @Service -public class UniversityRecommendService { +public class UnivApplyInfoRecommendService { - public static final int RECOMMEND_UNIVERSITY_NUM = 6; + public static final int RECOMMEND_UNIV_APPLY_INFO_NUM = 6; - private final UniversityInfoForApplyRepository universityInfoForApplyRepository; - private final GeneralUniversityRecommendService generalUniversityRecommendService; + private final UnivApplyInfoRepository univApplyInfoRepository; + private final GeneralUnivApplyInfoRecommendService generalUnivApplyInfoRecommendService; @Value("${university.term}") private String term; @@ -34,29 +34,29 @@ public class UniversityRecommendService { * - 맞춤 추천 대학교의 수가 6개보다 적다면, 공통 추천 대학교 후보에서 이번 term 에 열리는 학교들을 부족한 수 만큼 불러온다. * */ @Transactional(readOnly = true) - public UniversityRecommendsResponse getPersonalRecommends(SiteUser siteUser) { + public UnivApplyInfoRecommendsResponse getPersonalRecommends(SiteUser siteUser) { // 맞춤 추천 대학교를 불러온다. - List personalRecommends = universityInfoForApplyRepository - .findUniversityInfoForAppliesBySiteUsersInterestedCountryOrRegionAndTerm(siteUser, term); - List trimmedRecommendUniversities - = personalRecommends.subList(0, Math.min(RECOMMEND_UNIVERSITY_NUM, personalRecommends.size())); - Collections.shuffle(trimmedRecommendUniversities); + List personalRecommends = univApplyInfoRepository + .findAllBySiteUsersInterestedCountryOrRegionAndTerm(siteUser, term); + List trimmedRecommends + = personalRecommends.subList(0, Math.min(RECOMMEND_UNIV_APPLY_INFO_NUM, personalRecommends.size())); + Collections.shuffle(trimmedRecommends); // 맞춤 추천 대학교의 수가 6개보다 적다면, 일반 추천 대학교를 부족한 수 만큼 불러온다. - if (trimmedRecommendUniversities.size() < RECOMMEND_UNIVERSITY_NUM) { - trimmedRecommendUniversities.addAll(getGeneralRecommendsExcludingSelected(trimmedRecommendUniversities)); + if (trimmedRecommends.size() < RECOMMEND_UNIV_APPLY_INFO_NUM) { + trimmedRecommends.addAll(getGeneralRecommendsExcludingSelected(trimmedRecommends)); } - return new UniversityRecommendsResponse(trimmedRecommendUniversities.stream() - .map(UniversityInfoForApplyPreviewResponse::from) + return new UnivApplyInfoRecommendsResponse(trimmedRecommends.stream() + .map(UnivApplyInfoPreviewResponse::from) .toList()); } private List getGeneralRecommendsExcludingSelected(List alreadyPicked) { - List generalRecommend = new ArrayList<>(generalUniversityRecommendService.getRecommendUniversities()); + List generalRecommend = new ArrayList<>(generalUnivApplyInfoRecommendService.getGeneralRecommends()); generalRecommend.removeAll(alreadyPicked); Collections.shuffle(generalRecommend); - return generalRecommend.subList(0, RECOMMEND_UNIVERSITY_NUM - alreadyPicked.size()); + return generalRecommend.subList(0, RECOMMEND_UNIV_APPLY_INFO_NUM - alreadyPicked.size()); } /* @@ -64,10 +64,10 @@ private List getGeneralRecommendsExcludingSelected(List generalRecommends = new ArrayList<>(generalUniversityRecommendService.getRecommendUniversities()); - return new UniversityRecommendsResponse(generalRecommends.stream() - .map(UniversityInfoForApplyPreviewResponse::from) + public UnivApplyInfoRecommendsResponse getGeneralRecommends() { + List generalRecommends = new ArrayList<>(generalUnivApplyInfoRecommendService.getGeneralRecommends()); + return new UnivApplyInfoRecommendsResponse(generalRecommends.stream() + .map(UnivApplyInfoPreviewResponse::from) .toList()); } } diff --git a/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java b/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java deleted file mode 100644 index 7544ed7a8..000000000 --- a/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.example.solidconnection.university.service; - -import com.example.solidconnection.common.exception.CustomException; -import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; -import com.example.solidconnection.university.domain.LikedUniversity; -import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.dto.IsLikeResponse; -import com.example.solidconnection.university.dto.LikeResultResponse; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Optional; - -import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_UNIVERSITY; -import static com.example.solidconnection.common.exception.ErrorCode.NOT_LIKED_UNIVERSITY; - -@RequiredArgsConstructor -@Service -public class UniversityLikeService { - - public static final String LIKE_SUCCESS_MESSAGE = "LIKE_SUCCESS"; - public static final String LIKE_CANCELED_MESSAGE = "LIKE_CANCELED"; - - private final UniversityInfoForApplyRepository universityInfoForApplyRepository; - private final LikedUniversityRepository likedUniversityRepository; - - @Value("${university.term}") - public String term; - - /* - * 대학교를 '좋아요' 한다. - * */ - @Transactional - public LikeResultResponse likeUniversity(SiteUser siteUser, Long universityInfoForApplyId) { - UnivApplyInfo univApplyInfo = universityInfoForApplyRepository.getUniversityInfoForApplyById(universityInfoForApplyId); - - Optional optionalLikedUniversity = likedUniversityRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo); - if (optionalLikedUniversity.isPresent()) { - throw new CustomException(ALREADY_LIKED_UNIVERSITY); - } - - LikedUniversity likedUniversity = LikedUniversity.builder() - .univApplyInfo(univApplyInfo) - .siteUser(siteUser) - .build(); - likedUniversityRepository.save(likedUniversity); - return new LikeResultResponse(LIKE_SUCCESS_MESSAGE); - } - - /* - * 대학교 '좋아요'를 취소한다. - * */ - @Transactional - public LikeResultResponse cancelLikeUniversity(SiteUser siteUser, long universityInfoForApplyId) throws CustomException { - UnivApplyInfo univApplyInfo = universityInfoForApplyRepository.getUniversityInfoForApplyById(universityInfoForApplyId); - - Optional optionalLikedUniversity = likedUniversityRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo); - if (optionalLikedUniversity.isEmpty()) { - throw new CustomException(NOT_LIKED_UNIVERSITY); - } - - likedUniversityRepository.delete(optionalLikedUniversity.get()); - return new LikeResultResponse(LIKE_CANCELED_MESSAGE); - } - - /* - * '좋아요'한 대학교인지 확인한다. - * */ - @Transactional(readOnly = true) - public IsLikeResponse getIsLiked(SiteUser siteUser, Long universityInfoForApplyId) { - UnivApplyInfo univApplyInfo = universityInfoForApplyRepository.getUniversityInfoForApplyById(universityInfoForApplyId); - boolean isLike = likedUniversityRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo).isPresent(); - return new IsLikeResponse(isLike); - } -} diff --git a/src/main/resources/db/migration/V17__rename_like_university.sql b/src/main/resources/db/migration/V17__rename_like_university.sql new file mode 100644 index 000000000..1d244157a --- /dev/null +++ b/src/main/resources/db/migration/V17__rename_like_university.sql @@ -0,0 +1 @@ +ALTER TABLE liked_university RENAME liked_university_info_for_apply; diff --git a/src/test/java/com/example/solidconnection/application/fixture/ApplicationFixture.java b/src/test/java/com/example/solidconnection/application/fixture/ApplicationFixture.java index 43854ca80..9cfc7a805 100644 --- a/src/test/java/com/example/solidconnection/application/fixture/ApplicationFixture.java +++ b/src/test/java/com/example/solidconnection/application/fixture/ApplicationFixture.java @@ -4,7 +4,6 @@ import com.example.solidconnection.application.domain.Gpa; import com.example.solidconnection.application.domain.LanguageTest; import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.university.domain.UnivApplyInfo; import lombok.RequiredArgsConstructor; import org.springframework.boot.test.context.TestComponent; @@ -20,9 +19,9 @@ public class ApplicationFixture { String term, Gpa gpa, LanguageTest languageTest, - Long firstChoiceUniversityApplyInfoId, - Long secondChoiceUniversityApplyInfoId, - Long thirdChoiceUniversityApplyInfoId + Long firstChoiceUnivApplyInfoId, + Long secondChoiceUnivApplyInfoId, + Long thirdChoiceUnivApplyInfoId ) { return applicationFixtureBuilder.application() .siteUser(siteUser) @@ -30,9 +29,9 @@ public class ApplicationFixture { .languageTest(languageTest) .nicknameForApply(nicknameForApply) .term(term) - .firstChoiceUniversityApplyInfoId(firstChoiceUniversityApplyInfoId) - .secondChoiceUniversityApplyInfoId(secondChoiceUniversityApplyInfoId) - .thirdChoiceUniversityApplyInfoId(thirdChoiceUniversityApplyInfoId) + .firstChoiceUnivApplyInfoId(firstChoiceUnivApplyInfoId) + .secondChoiceUnivApplyInfoId(secondChoiceUnivApplyInfoId) + .thirdChoiceUnivApplyInfoId(thirdChoiceUnivApplyInfoId) .create(); } } diff --git a/src/test/java/com/example/solidconnection/application/fixture/ApplicationFixtureBuilder.java b/src/test/java/com/example/solidconnection/application/fixture/ApplicationFixtureBuilder.java index 2f1ae7bbe..d860504e4 100644 --- a/src/test/java/com/example/solidconnection/application/fixture/ApplicationFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/application/fixture/ApplicationFixtureBuilder.java @@ -17,9 +17,9 @@ public class ApplicationFixtureBuilder { private Gpa gpa; private LanguageTest languageTest; - private Long firstChoiceUniversityApplyInfoId; - private Long secondChoiceUniversityApplyInfoId; - private Long thirdChoiceUniversityApplyInfoId; + private Long firstChoiceUnivApplyInfoId; + private Long secondChoiceUnivApplyInfoId; + private Long thirdChoiceUnivApplyInfoId; private SiteUser siteUser; private String nicknameForApply; private String term; @@ -38,18 +38,18 @@ public ApplicationFixtureBuilder languageTest(LanguageTest languageTest) { return this; } - public ApplicationFixtureBuilder firstChoiceUniversityApplyInfoId(Long firstChoiceUniversityApplyInfoId) { - this.firstChoiceUniversityApplyInfoId = firstChoiceUniversityApplyInfoId; + public ApplicationFixtureBuilder firstChoiceUnivApplyInfoId(Long firstChoiceUnivApplyInfoId) { + this.firstChoiceUnivApplyInfoId = firstChoiceUnivApplyInfoId; return this; } - public ApplicationFixtureBuilder secondChoiceUniversityApplyInfoId(Long secondChoiceUniversityApplyInfoId) { - this.secondChoiceUniversityApplyInfoId = secondChoiceUniversityApplyInfoId; + public ApplicationFixtureBuilder secondChoiceUnivApplyInfoId(Long secondChoiceUnivApplyInfoId) { + this.secondChoiceUnivApplyInfoId = secondChoiceUnivApplyInfoId; return this; } - public ApplicationFixtureBuilder thirdChoiceUniversityApplyInfoId(Long thirdChoiceUniversityApplyInfoId) { - this.thirdChoiceUniversityApplyInfoId = thirdChoiceUniversityApplyInfoId; + public ApplicationFixtureBuilder thirdChoiceUnivApplyInfoId(Long thirdChoiceUnivApplyInfoId) { + this.thirdChoiceUnivApplyInfoId = thirdChoiceUnivApplyInfoId; return this; } @@ -74,9 +74,9 @@ public Application create() { gpa, languageTest, term, - firstChoiceUniversityApplyInfoId, - secondChoiceUniversityApplyInfoId, - thirdChoiceUniversityApplyInfoId, + firstChoiceUnivApplyInfoId, + secondChoiceUnivApplyInfoId, + thirdChoiceUnivApplyInfoId, nicknameForApply ); application.setVerifyStatus(VerifyStatus.APPROVED); diff --git a/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java b/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java index 2f93b08f0..488e85e63 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java @@ -4,7 +4,7 @@ import com.example.solidconnection.application.domain.VerifyStatus; 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.dto.ApplicantsResponse; import com.example.solidconnection.application.fixture.ApplicationFixture; import com.example.solidconnection.application.repository.ApplicationRepository; import com.example.solidconnection.location.region.fixture.RegionFixture; @@ -140,11 +140,11 @@ class 지원자_목록_조회_테스트 { // then assertThat(response.firstChoice()).containsAll(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, + ApplicantsResponse.of(괌대학_A_지원_정보, List.of(application1), user1), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, + ApplicantsResponse.of(괌대학_B_지원_정보, List.of(application2), user1), - UniversityApplicantsResponse.of(서던덴마크대학교_지원_정보, + ApplicantsResponse.of(서던덴마크대학교_지원_정보, List.of(application3), user1) )); } @@ -192,9 +192,9 @@ class 지원자_목록_조회_테스트 { // then assertThat(response.firstChoice()).containsExactlyInAnyOrder( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, + ApplicantsResponse.of(괌대학_A_지원_정보, List.of(application1), user1), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, + ApplicantsResponse.of(괌대학_B_지원_정보, List.of(application2), user1) ); } @@ -242,9 +242,9 @@ class 지원자_목록_조회_테스트 { // then assertThat(response.firstChoice()).containsExactlyInAnyOrder( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, + ApplicantsResponse.of(괌대학_A_지원_정보, List.of(application1), user1), - UniversityApplicantsResponse.of(괌대학_B_지원_정보, + ApplicantsResponse.of(괌대학_B_지원_정보, List.of(application2), user1) ); } @@ -272,7 +272,7 @@ class 지원자_목록_조회_테스트 { // then assertThat(response.firstChoice()).doesNotContainAnyElementsOf(List.of( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, + ApplicantsResponse.of(괌대학_A_지원_정보, List.of(application), user1) )); } @@ -358,7 +358,7 @@ class 경쟁자_목록_조회_테스트 { // then assertThat(response.firstChoice()).containsExactlyInAnyOrder( - UniversityApplicantsResponse.of(괌대학_A_지원_정보, + ApplicantsResponse.of(괌대학_A_지원_정보, List.of(application1, application2), user1) ); } 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 4d23073f7..b9389739f 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java @@ -4,7 +4,7 @@ import com.example.solidconnection.application.domain.VerifyStatus; import com.example.solidconnection.application.dto.ApplicationSubmissionResponse; import com.example.solidconnection.application.dto.ApplyRequest; -import com.example.solidconnection.application.dto.UniversityChoiceRequest; +import com.example.solidconnection.application.dto.UnivApplyInfoChoiceRequest; import com.example.solidconnection.application.repository.ApplicationRepository; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.score.domain.GpaScore; @@ -73,12 +73,12 @@ void setUp() { // given GpaScore gpaScore = gpaScoreFixture.GPA_점수(VerifyStatus.APPROVED, user); LanguageTestScore languageTestScore = languageTestScoreFixture.어학_점수(VerifyStatus.APPROVED, user); - UniversityChoiceRequest universityChoiceRequest = new UniversityChoiceRequest( + UnivApplyInfoChoiceRequest univApplyInfoChoiceRequest = new UnivApplyInfoChoiceRequest( 괌대학_A_지원_정보.getId(), 괌대학_B_지원_정보.getId(), 서던덴마크대학교_지원_정보.getId() ); - ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), universityChoiceRequest); + ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), univApplyInfoChoiceRequest); // when ApplicationSubmissionResponse response = applicationSubmissionService.apply(user, request); @@ -106,12 +106,12 @@ void setUp() { // given GpaScore gpaScore = gpaScoreFixture.GPA_점수(VerifyStatus.PENDING, user); LanguageTestScore languageTestScore = languageTestScoreFixture.어학_점수(VerifyStatus.APPROVED, user); - UniversityChoiceRequest universityChoiceRequest = new UniversityChoiceRequest( + UnivApplyInfoChoiceRequest univApplyInfoChoiceRequest = new UnivApplyInfoChoiceRequest( 괌대학_A_지원_정보.getId(), null, null ); - ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), universityChoiceRequest); + ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), univApplyInfoChoiceRequest); // when & then assertThatCode(() -> @@ -126,12 +126,12 @@ void setUp() { // given GpaScore gpaScore = gpaScoreFixture.GPA_점수(VerifyStatus.APPROVED, user); LanguageTestScore languageTestScore = languageTestScoreFixture.어학_점수(VerifyStatus.PENDING, user); - UniversityChoiceRequest universityChoiceRequest = new UniversityChoiceRequest( + UnivApplyInfoChoiceRequest univApplyInfoChoiceRequest = new UnivApplyInfoChoiceRequest( 괌대학_A_지원_정보.getId(), null, null ); - ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), universityChoiceRequest); + ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), univApplyInfoChoiceRequest); // when & then assertThatCode(() -> @@ -146,12 +146,12 @@ void setUp() { // given GpaScore gpaScore = gpaScoreFixture.GPA_점수(VerifyStatus.APPROVED, user); LanguageTestScore languageTestScore = languageTestScoreFixture.어학_점수(VerifyStatus.APPROVED, user); - UniversityChoiceRequest universityChoiceRequest = new UniversityChoiceRequest( + UnivApplyInfoChoiceRequest univApplyInfoChoiceRequest = new UnivApplyInfoChoiceRequest( 괌대학_A_지원_정보.getId(), null, null ); - ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), universityChoiceRequest); + ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), univApplyInfoChoiceRequest); for (int i = 0; i < APPLICATION_UPDATE_COUNT_LIMIT; i++) { applicationSubmissionService.apply(user, request); diff --git a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java index 59e0d6455..62732f1c1 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java @@ -10,11 +10,11 @@ import com.example.solidconnection.siteuser.dto.MyPageResponse; import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.siteuser.fixture.SiteUserFixtureBuilder; -import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; +import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.university.domain.LikedUniversity; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; +import com.example.solidconnection.university.domain.LikedUnivApplyInfo; +import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; import com.example.solidconnection.university.fixture.UnivApplyInfoFixture; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -54,7 +54,7 @@ class MyPageServiceTest { private SiteUserRepository siteUserRepository; @Autowired - private LikedUniversityRepository likedUniversityRepository; + private LikedUnivApplyInfoRepository likedUnivApplyInfoRepository; @Autowired private SiteUserFixture siteUserFixture; @@ -75,7 +75,7 @@ void setUp() { @Test void 마이페이지_정보를_조회한다() { // given - int likedUniversityCount = createLikedUniversities(user); + int likedUnivApplyInfoCount = createLikedUnivApplyInfos(user); // when MyPageResponse response = myPageService.getMyPageInfo(user); @@ -87,20 +87,20 @@ void setUp() { () -> assertThat(response.role()).isEqualTo(user.getRole()), () -> assertThat(response.email()).isEqualTo(user.getEmail()), () -> assertThat(response.likedPostCount()).isEqualTo(user.getPostLikeList().size()), - () -> assertThat(response.likedUniversityCount()).isEqualTo(likedUniversityCount) + () -> assertThat(response.likedUnivApplyInfoCount()).isEqualTo(likedUnivApplyInfoCount) ); } @Test - void 관심_대학교_목록을_조회한다() { + void 관심_대학_지원_정보_목록을_조회한다() { // given - int likedUniversityCount = createLikedUniversities(user); + int likedUnivApplyInfo = createLikedUnivApplyInfos(user); // when - List response = myPageService.getWishUniversity(user); + List response = myPageService.getWishUnivApplyInfo(user); // then - assertThat(response).hasSize(likedUniversityCount); + assertThat(response).hasSize(likedUnivApplyInfo); } @Nested @@ -192,15 +192,15 @@ void setUp() { } } - private int createLikedUniversities(SiteUser testUser) { - LikedUniversity likedUniversity1 = new LikedUniversity(null, univApplyInfoFixture.괌대학_A_지원_정보(), testUser); - LikedUniversity likedUniversity2 = new LikedUniversity(null, univApplyInfoFixture.메이지대학_지원_정보(), testUser); - LikedUniversity likedUniversity3 = new LikedUniversity(null, univApplyInfoFixture.코펜하겐IT대학_지원_정보(), testUser); + private int createLikedUnivApplyInfos(SiteUser testUser) { + LikedUnivApplyInfo likedUnivApplyInfo1 = new LikedUnivApplyInfo(null, univApplyInfoFixture.괌대학_A_지원_정보(), testUser); + LikedUnivApplyInfo likedUnivApplyInfo2 = new LikedUnivApplyInfo(null, univApplyInfoFixture.메이지대학_지원_정보(), testUser); + LikedUnivApplyInfo likedUnivApplyInfo3 = new LikedUnivApplyInfo(null, univApplyInfoFixture.코펜하겐IT대학_지원_정보(), testUser); - likedUniversityRepository.save(likedUniversity1); - likedUniversityRepository.save(likedUniversity2); - likedUniversityRepository.save(likedUniversity3); - return likedUniversityRepository.countBySiteUser_Id(testUser.getId()); + likedUnivApplyInfoRepository.save(likedUnivApplyInfo1); + likedUnivApplyInfoRepository.save(likedUnivApplyInfo2); + likedUnivApplyInfoRepository.save(likedUnivApplyInfo3); + return likedUnivApplyInfoRepository.countBySiteUser_Id(testUser.getId()); } private MockMultipartFile createValidImageFile() { diff --git a/src/test/java/com/example/solidconnection/university/dto/validation/ValidUniversityChoiceValidatorTest.java b/src/test/java/com/example/solidconnection/university/dto/validation/ValidUnivApplyInfoChoiceValidatorTest.java similarity index 64% rename from src/test/java/com/example/solidconnection/university/dto/validation/ValidUniversityChoiceValidatorTest.java rename to src/test/java/com/example/solidconnection/university/dto/validation/ValidUnivApplyInfoChoiceValidatorTest.java index e08f49e6a..84a41d801 100644 --- a/src/test/java/com/example/solidconnection/university/dto/validation/ValidUniversityChoiceValidatorTest.java +++ b/src/test/java/com/example/solidconnection/university/dto/validation/ValidUnivApplyInfoChoiceValidatorTest.java @@ -1,6 +1,6 @@ package com.example.solidconnection.university.dto.validation; -import com.example.solidconnection.application.dto.UniversityChoiceRequest; +import com.example.solidconnection.application.dto.UnivApplyInfoChoiceRequest; import jakarta.validation.ConstraintViolation; import jakarta.validation.Validation; import jakarta.validation.Validator; @@ -11,13 +11,13 @@ import java.util.Set; -import static com.example.solidconnection.common.exception.ErrorCode.DUPLICATE_UNIVERSITY_CHOICE; +import static com.example.solidconnection.common.exception.ErrorCode.DUPLICATE_UNIV_APPLY_INFO_CHOICE; import static com.example.solidconnection.common.exception.ErrorCode.FIRST_CHOICE_REQUIRED; import static com.example.solidconnection.common.exception.ErrorCode.THIRD_CHOICE_REQUIRES_SECOND; import static org.assertj.core.api.Assertions.assertThat; @DisplayName("대학 선택 유효성 검사 테스트") -class ValidUniversityChoiceValidatorTest { +class ValidUnivApplyInfoChoiceValidatorTest { private static final String MESSAGE = "message"; @@ -32,10 +32,10 @@ void setUp() { @Test void 정상적인_지망_선택은_유효하다() { // given - UniversityChoiceRequest request = new UniversityChoiceRequest(1L, 2L, 3L); + UnivApplyInfoChoiceRequest request = new UnivApplyInfoChoiceRequest(1L, 2L, 3L); // when - Set> violations = validator.validate(request); + Set> violations = validator.validate(request); // then assertThat(violations).isEmpty(); @@ -44,10 +44,10 @@ void setUp() { @Test void 첫_번째_지망만_선택하는_것은_유효하다() { // given - UniversityChoiceRequest request = new UniversityChoiceRequest(1L, null, null); + UnivApplyInfoChoiceRequest request = new UnivApplyInfoChoiceRequest(1L, null, null); // when - Set> violations = validator.validate(request); + Set> violations = validator.validate(request); // then assertThat(violations).isEmpty(); @@ -56,10 +56,10 @@ void setUp() { @Test void 두_번째_지망_없이_세_번째_지망을_선택하면_예외_응답을_반환한다() { // given - UniversityChoiceRequest request = new UniversityChoiceRequest(1L, null, 3L); + UnivApplyInfoChoiceRequest request = new UnivApplyInfoChoiceRequest(1L, null, 3L); // when - Set> violations = validator.validate(request); + Set> violations = validator.validate(request); // then assertThat(violations) @@ -70,10 +70,10 @@ void setUp() { @Test void 첫_번째_지망을_선택하지_않으면_예외_응답을_반환한다() { // given - UniversityChoiceRequest request = new UniversityChoiceRequest(null, 2L, 3L); + UnivApplyInfoChoiceRequest request = new UnivApplyInfoChoiceRequest(null, 2L, 3L); // when - Set> violations = validator.validate(request); + Set> violations = validator.validate(request); // then assertThat(violations) @@ -85,15 +85,15 @@ void setUp() { @Test void 대학을_중복_선택하면_예외_응답을_반환한다() { // given - UniversityChoiceRequest request = new UniversityChoiceRequest(1L, 1L, 2L); + UnivApplyInfoChoiceRequest request = new UnivApplyInfoChoiceRequest(1L, 1L, 2L); // when - Set> violations = validator.validate(request); + Set> violations = validator.validate(request); // then assertThat(violations) .isNotEmpty() .extracting(MESSAGE) - .contains(DUPLICATE_UNIVERSITY_CHOICE.getMessage()); + .contains(DUPLICATE_UNIV_APPLY_INFO_CHOICE.getMessage()); } } diff --git a/src/test/java/com/example/solidconnection/university/fixture/LanguageRequirementFixture.java b/src/test/java/com/example/solidconnection/university/fixture/LanguageRequirementFixture.java index 0c7bb48bd..b70515b89 100644 --- a/src/test/java/com/example/solidconnection/university/fixture/LanguageRequirementFixture.java +++ b/src/test/java/com/example/solidconnection/university/fixture/LanguageRequirementFixture.java @@ -12,43 +12,43 @@ public class LanguageRequirementFixture { private final LanguageRequirementFixtureBuilder languageRequirementFixtureBuilder; - public LanguageRequirement 토플_80(UnivApplyInfo universityInfo) { + public LanguageRequirement 토플_80(UnivApplyInfo univApplyInfo) { return languageRequirementFixtureBuilder .languageTestType(LanguageTestType.TOEFL_IBT) .minScore("80") - .universityInfoForApply(universityInfo) + .univApplyInfo(univApplyInfo) .create(); } - public LanguageRequirement 토플_70(UnivApplyInfo universityInfo) { + public LanguageRequirement 토플_70(UnivApplyInfo univApplyInfo) { return languageRequirementFixtureBuilder .languageTestType(LanguageTestType.TOEFL_IBT) .minScore("70") - .universityInfoForApply(universityInfo) + .univApplyInfo(univApplyInfo) .create(); } - public LanguageRequirement 토익_800(UnivApplyInfo universityInfo) { + public LanguageRequirement 토익_800(UnivApplyInfo univApplyInfo) { return languageRequirementFixtureBuilder .languageTestType(LanguageTestType.TOEIC) .minScore("800") - .universityInfoForApply(universityInfo) + .univApplyInfo(univApplyInfo) .create(); } - public LanguageRequirement 토익_900(UnivApplyInfo universityInfo) { + public LanguageRequirement 토익_900(UnivApplyInfo univApplyInfo) { return languageRequirementFixtureBuilder .languageTestType(LanguageTestType.TOEIC) .minScore("900") - .universityInfoForApply(universityInfo) + .univApplyInfo(univApplyInfo) .create(); } - public LanguageRequirement JLPT_N2(UnivApplyInfo universityInfo) { + public LanguageRequirement JLPT_N2(UnivApplyInfo univApplyInfo) { return languageRequirementFixtureBuilder .languageTestType(LanguageTestType.JLPT) .minScore("N2") - .universityInfoForApply(universityInfo) + .univApplyInfo(univApplyInfo) .create(); } } diff --git a/src/test/java/com/example/solidconnection/university/fixture/LanguageRequirementFixtureBuilder.java b/src/test/java/com/example/solidconnection/university/fixture/LanguageRequirementFixtureBuilder.java index 81e856f4b..01f03e716 100644 --- a/src/test/java/com/example/solidconnection/university/fixture/LanguageRequirementFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/university/fixture/LanguageRequirementFixtureBuilder.java @@ -27,7 +27,7 @@ public LanguageRequirementFixtureBuilder minScore(String minScore) { return this; } - public LanguageRequirementFixtureBuilder universityInfoForApply(UnivApplyInfo univApplyInfo) { + public LanguageRequirementFixtureBuilder univApplyInfo(UnivApplyInfo univApplyInfo) { this.univApplyInfo = univApplyInfo; return this; } 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 d394b6206..12c5efa07 100644 --- a/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixture.java +++ b/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixture.java @@ -16,7 +16,7 @@ public class UnivApplyInfoFixture { public String term; public UnivApplyInfo 괌대학_A_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("괌대학(A형)") .university(universityFixture.괌_대학()) @@ -24,7 +24,7 @@ public class UnivApplyInfoFixture { } public UnivApplyInfo 괌대학_B_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("괌대학(B형)") .university(universityFixture.괌_대학()) @@ -32,7 +32,7 @@ public class UnivApplyInfoFixture { } public UnivApplyInfo 네바다주립대학_라스베이거스_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("네바다주립대학 라스베이거스(B형)") .university(universityFixture.네바다주립_대학_라스베이거스()) @@ -40,7 +40,7 @@ public class UnivApplyInfoFixture { } public UnivApplyInfo 메모리얼대학_세인트존스_A_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("메모리얼 대학 세인트존스(A형)") .university(universityFixture.메모리얼_대학_세인트존스()) @@ -48,7 +48,7 @@ public class UnivApplyInfoFixture { } public UnivApplyInfo 서던덴마크대학교_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("서던덴마크대학교") .university(universityFixture.서던덴마크_대학()) @@ -56,7 +56,7 @@ public class UnivApplyInfoFixture { } public UnivApplyInfo 코펜하겐IT대학_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("코펜하겐 IT대학") .university(universityFixture.코펜하겐IT_대학()) @@ -64,7 +64,7 @@ public class UnivApplyInfoFixture { } public UnivApplyInfo 그라츠대학_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("그라츠 대학") .university(universityFixture.그라츠_대학()) @@ -72,7 +72,7 @@ public class UnivApplyInfoFixture { } public UnivApplyInfo 그라츠공과대학_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("그라츠공과대학") .university(universityFixture.그라츠공과_대학()) @@ -80,7 +80,7 @@ public class UnivApplyInfoFixture { } public UnivApplyInfo 린츠_카톨릭대학_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("린츠 카톨릭 대학교") .university(universityFixture.린츠_카톨릭_대학()) @@ -88,7 +88,7 @@ public class UnivApplyInfoFixture { } public UnivApplyInfo 메이지대학_지원_정보() { - return univApplyInfoFixtureBuilder.universityInfoForApply() + return univApplyInfoFixtureBuilder.univApplyInfo() .term(term) .koreanName("메이지대학") .university(universityFixture.메이지_대학()) 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 048389d49..0989beaca 100644 --- a/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/university/fixture/UnivApplyInfoFixtureBuilder.java @@ -2,7 +2,7 @@ import com.example.solidconnection.university.domain.University; import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; +import com.example.solidconnection.university.repository.UnivApplyInfoRepository; import lombok.RequiredArgsConstructor; import org.springframework.boot.test.context.TestComponent; @@ -15,14 +15,14 @@ @RequiredArgsConstructor public class UnivApplyInfoFixtureBuilder { - private final UniversityInfoForApplyRepository universityInfoForApplyRepository; + private final UnivApplyInfoRepository univApplyInfoRepository; private String term; private String koreanName; private University university; - public UnivApplyInfoFixtureBuilder universityInfoForApply() { - return new UnivApplyInfoFixtureBuilder(universityInfoForApplyRepository); + public UnivApplyInfoFixtureBuilder univApplyInfo() { + return new UnivApplyInfoFixtureBuilder(univApplyInfoRepository); } public UnivApplyInfoFixtureBuilder term(String term) { @@ -48,6 +48,6 @@ public UnivApplyInfo create() { "detailsForAccommodation", "detailsForEnglishCourse", "details", new HashSet<>(), university ); - return universityInfoForApplyRepository.save(univApplyInfo); + return univApplyInfoRepository.save(univApplyInfo); } } diff --git a/src/test/java/com/example/solidconnection/university/repository/UniversityLikeRepositoryTest.java b/src/test/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepositoryTest.java similarity index 54% rename from src/test/java/com/example/solidconnection/university/repository/UniversityLikeRepositoryTest.java rename to src/test/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepositoryTest.java index 1d34597be..1d3094e31 100644 --- a/src/test/java/com/example/solidconnection/university/repository/UniversityLikeRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepositoryTest.java @@ -2,9 +2,8 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.fixture.SiteUserFixture; -import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.university.domain.LikedUniversity; +import com.example.solidconnection.university.domain.LikedUnivApplyInfo; import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.fixture.UnivApplyInfoFixture; import org.junit.jupiter.api.DisplayName; @@ -17,10 +16,10 @@ @TestContainerSpringBootTest @DisplayName("대학교 좋아요 레파지토리 테스트") -public class UniversityLikeRepositoryTest { +public class LikedUnivApplyInfoRepositoryTest { @Autowired - private LikedUniversityRepository likedUniversityRepository; + private LikedUnivApplyInfoRepository likedUnivApplyInfoRepository; @Autowired private SiteUserFixture siteUserFixture; @@ -35,15 +34,15 @@ class 사용자와_좋아요한_대학은_복합_유니크_제약조건을_갖 void 같은_사용자가_같은_대학에_중복으로_좋아요하면_예외_응답을_반환한다() { // given SiteUser user = siteUserFixture.사용자(); - UnivApplyInfo university = univApplyInfoFixture.괌대학_A_지원_정보(); + UnivApplyInfo univApplyInfo = univApplyInfoFixture.괌대학_A_지원_정보(); - LikedUniversity firstLike = createLikedUniversity(user, university); - likedUniversityRepository.save(firstLike); + LikedUnivApplyInfo firstLike = createLikedUnivApplyInfo(user, univApplyInfo); + likedUnivApplyInfoRepository.save(firstLike); - LikedUniversity secondLike = createLikedUniversity(user, university); + LikedUnivApplyInfo secondLike = createLikedUnivApplyInfo(user, univApplyInfo); // when & then - assertThatCode(() -> likedUniversityRepository.save(secondLike)) + assertThatCode(() -> likedUnivApplyInfoRepository.save(secondLike)) .isInstanceOf(DataIntegrityViolationException.class); } @@ -52,36 +51,36 @@ class 사용자와_좋아요한_대학은_복합_유니크_제약조건을_갖 // given SiteUser user1 = siteUserFixture.사용자(1, "user1"); SiteUser user2 = siteUserFixture.사용자(2, "user2"); - UnivApplyInfo university = univApplyInfoFixture.괌대학_A_지원_정보(); + UnivApplyInfo univApplyInfo = univApplyInfoFixture.괌대학_A_지원_정보(); - LikedUniversity firstLike = createLikedUniversity(user1, university); - likedUniversityRepository.save(firstLike); + LikedUnivApplyInfo firstLike = createLikedUnivApplyInfo(user1, univApplyInfo); + likedUnivApplyInfoRepository.save(firstLike); - LikedUniversity secondLike = createLikedUniversity(user2, university); + LikedUnivApplyInfo secondLike = createLikedUnivApplyInfo(user2, univApplyInfo); // when & then - assertThatCode(() -> likedUniversityRepository.save(secondLike)).doesNotThrowAnyException(); + assertThatCode(() -> likedUnivApplyInfoRepository.save(secondLike)).doesNotThrowAnyException(); } @Test void 같은_사용자가_다른_대학에_좋아요하면_정상_저장된다() { // given SiteUser user = siteUserFixture.사용자(); - UnivApplyInfo university1 = univApplyInfoFixture.괌대학_A_지원_정보(); - UnivApplyInfo university2 = univApplyInfoFixture.메이지대학_지원_정보(); + UnivApplyInfo univApplyInfo1 = univApplyInfoFixture.괌대학_A_지원_정보(); + UnivApplyInfo univApplyInfo2 = univApplyInfoFixture.메이지대학_지원_정보(); - LikedUniversity firstLike = createLikedUniversity(user, university1); - likedUniversityRepository.save(firstLike); + LikedUnivApplyInfo firstLike = createLikedUnivApplyInfo(user, univApplyInfo1); + likedUnivApplyInfoRepository.save(firstLike); - LikedUniversity secondLike = createLikedUniversity(user, university2); + LikedUnivApplyInfo secondLike = createLikedUnivApplyInfo(user, univApplyInfo2); // when & then - assertThatCode(() -> likedUniversityRepository.save(secondLike)).doesNotThrowAnyException(); + assertThatCode(() -> likedUnivApplyInfoRepository.save(secondLike)).doesNotThrowAnyException(); } } - private LikedUniversity createLikedUniversity(SiteUser siteUser, UnivApplyInfo univApplyInfo) { - return LikedUniversity.builder() + private LikedUnivApplyInfo createLikedUnivApplyInfo(SiteUser siteUser, UnivApplyInfo univApplyInfo) { + return LikedUnivApplyInfo.builder() .siteUser(siteUser) .univApplyInfo(univApplyInfo) .build(); diff --git a/src/test/java/com/example/solidconnection/university/service/GeneralUniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendServiceTest.java similarity index 77% rename from src/test/java/com/example/solidconnection/university/service/GeneralUniversityRecommendServiceTest.java rename to src/test/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendServiceTest.java index 5152dfbb2..e2dcdd255 100644 --- a/src/test/java/com/example/solidconnection/university/service/GeneralUniversityRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendServiceTest.java @@ -11,16 +11,16 @@ import java.util.List; -import static com.example.solidconnection.university.service.UniversityRecommendService.RECOMMEND_UNIVERSITY_NUM; +import static com.example.solidconnection.university.service.UnivApplyInfoRecommendService.RECOMMEND_UNIV_APPLY_INFO_NUM; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; @TestContainerSpringBootTest -@DisplayName("공통 추천 대학 서비스 테스트") -class GeneralUniversityRecommendServiceTest { +@DisplayName("대학 지원 정보 공통 추천 서비스 테스트") +class GeneralUnivApplyInfoRecommendServiceTest { @Autowired - private GeneralUniversityRecommendService generalUniversityRecommendService; + private GeneralUnivApplyInfoRecommendService generalUnivApplyInfoRecommendService; @Autowired private UnivApplyInfoFixture univApplyInfoFixture; @@ -40,20 +40,20 @@ void setUp() { univApplyInfoFixture.그라츠공과대학_지원_정보(); univApplyInfoFixture.린츠_카톨릭대학_지원_정보(); univApplyInfoFixture.메이지대학_지원_정보(); - generalUniversityRecommendService.init(); + generalUnivApplyInfoRecommendService.init(); } @Test - void 모집_시기의_대학들_중에서_랜덤하게_N개를_추천_목록으로_구성한다() { + void 모집_시기의_대학_지원_정보_중에서_랜덤하게_N개를_추천_목록으로_구성한다() { // given - List universities = generalUniversityRecommendService.getRecommendUniversities(); + List universities = generalUnivApplyInfoRecommendService.getGeneralRecommends(); // when & then assertAll( () -> assertThat(universities) .extracting("term") .allMatch(term::equals), - () -> assertThat(universities).hasSize(RECOMMEND_UNIVERSITY_NUM) + () -> assertThat(universities).hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) ); } } diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java similarity index 55% rename from src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java rename to src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java index 729c74c3b..548ddd9f5 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java @@ -3,9 +3,9 @@ import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.fixture.SiteUserFixture; -import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; +import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; -import com.example.solidconnection.university.domain.LikedUniversity; +import com.example.solidconnection.university.domain.LikedUnivApplyInfo; import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.dto.IsLikeResponse; import com.example.solidconnection.university.dto.LikeResultResponse; @@ -16,24 +16,24 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_UNIVERSITY; -import static com.example.solidconnection.common.exception.ErrorCode.NOT_LIKED_UNIVERSITY; -import static com.example.solidconnection.common.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; -import static com.example.solidconnection.university.service.UniversityLikeService.LIKE_CANCELED_MESSAGE; -import static com.example.solidconnection.university.service.UniversityLikeService.LIKE_SUCCESS_MESSAGE; +import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_UNIV_APPLY_INFO; +import static com.example.solidconnection.common.exception.ErrorCode.NOT_LIKED_UNIV_APPLY_INFO; +import static com.example.solidconnection.common.exception.ErrorCode.UNIV_APPLY_INFO_NOT_FOUND; +import static com.example.solidconnection.university.service.UnivApplyInfoLikeService.LIKE_CANCELED_MESSAGE; +import static com.example.solidconnection.university.service.UnivApplyInfoLikeService.LIKE_SUCCESS_MESSAGE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode; import static org.junit.jupiter.api.Assertions.assertAll; @TestContainerSpringBootTest -@DisplayName("대학교 좋아요 서비스 테스트") -class UniversityLikeServiceTest { +@DisplayName("대학 지원 정보 좋아요 서비스 테스트") +class UnivApplyInfoLikeServiceTest { @Autowired - private UniversityLikeService universityLikeService; + private UnivApplyInfoLikeService univApplyInfoLikeService; @Autowired - private LikedUniversityRepository likedUniversityRepository; + private LikedUnivApplyInfoRepository likedUnivApplyInfoRepository; @Autowired private SiteUserFixture siteUserFixture; @@ -51,36 +51,36 @@ void setUp() { } @Nested - class 대학_좋아요를_등록한다 { + class 대학_지원_정보_좋아요를_등록한다 { @Test void 성공적으로_좋아요를_등록한다() { // when - LikeResultResponse response = universityLikeService.likeUniversity(user, 괌대학_A_지원_정보.getId()); + LikeResultResponse response = univApplyInfoLikeService.likeUnivApplyInfo(user, 괌대학_A_지원_정보.getId()); // then assertAll( () -> assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE), - () -> assertThat(likedUniversityRepository.findBySiteUserAndUnivApplyInfo( + () -> assertThat(likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo( user, 괌대학_A_지원_정보 )).isPresent() ); } @Test - void 이미_좋아요한_대학이면_예외_응답을_반환한다() { + void 이미_좋아요했으면_예외_응답을_반환한다() { // given saveLikedUniversity(user, 괌대학_A_지원_정보); // when & then - assertThatCode(() -> universityLikeService.likeUniversity(user, 괌대학_A_지원_정보.getId())) + assertThatCode(() -> univApplyInfoLikeService.likeUnivApplyInfo(user, 괌대학_A_지원_정보.getId())) .isInstanceOf(CustomException.class) - .hasMessage(ALREADY_LIKED_UNIVERSITY.getMessage()); + .hasMessage(ALREADY_LIKED_UNIV_APPLY_INFO.getMessage()); } } @Nested - class 대학_좋아요를_취소한다 { + class 대학_지원_정보_좋아요를_취소한다 { @Test void 성공적으로_좋아요를_취소한다() { @@ -88,74 +88,74 @@ class 대학_좋아요를_취소한다 { saveLikedUniversity(user, 괌대학_A_지원_정보); // when - LikeResultResponse response = universityLikeService.cancelLikeUniversity(user, 괌대학_A_지원_정보.getId()); + LikeResultResponse response = univApplyInfoLikeService.cancelLikeUnivApplyInfo(user, 괌대학_A_지원_정보.getId()); // then assertAll( () -> assertThat(response.result()).isEqualTo(LIKE_CANCELED_MESSAGE), - () -> assertThat(likedUniversityRepository.findBySiteUserAndUnivApplyInfo( + () -> assertThat(likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo( user, 괌대학_A_지원_정보 )).isEmpty() ); } @Test - void 좋아요하지_않은_대학이면_예외_응답을_반환한다() { + void 좋아요하지_않았으면_예외_응답을_반환한다() { // when & then - assertThatCode(() -> universityLikeService.cancelLikeUniversity(user, 괌대학_A_지원_정보.getId())) + assertThatCode(() -> univApplyInfoLikeService.cancelLikeUnivApplyInfo(user, 괌대학_A_지원_정보.getId())) .isInstanceOf(CustomException.class) - .hasMessage(NOT_LIKED_UNIVERSITY.getMessage()); + .hasMessage(NOT_LIKED_UNIV_APPLY_INFO.getMessage()); } } @Test - void 존재하지_않는_대학_좋아요_시도하면_예외_응답을_반환한다() { + void 존재하지_않는_지원_정보에_좋아요_시도하면_예외_응답을_반환한다() { // given - Long invalidUniversityId = 9999L; + Long invalidUnivApplyInfoId = 9999L; // when & then - assertThatCode(() -> universityLikeService.likeUniversity(user, invalidUniversityId)) + assertThatCode(() -> univApplyInfoLikeService.likeUnivApplyInfo(user, invalidUnivApplyInfoId)) .isInstanceOf(CustomException.class) - .hasMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + .hasMessage(UNIV_APPLY_INFO_NOT_FOUND.getMessage()); } @Test - void 좋아요한_대학인지_확인한다() { + void 좋아요한_대학_지원_정보인지_확인한다() { // given saveLikedUniversity(user, 괌대학_A_지원_정보); // when - IsLikeResponse response = universityLikeService.getIsLiked(user, 괌대학_A_지원_정보.getId()); + IsLikeResponse response = univApplyInfoLikeService.getIsLiked(user, 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isTrue(); } @Test - void 좋아요하지_않은_대학인지_확인한다() { + void 좋아요하지_않은_대학_지원_정보인지_확인한다() { // when - IsLikeResponse response = universityLikeService.getIsLiked(user, 괌대학_A_지원_정보.getId()); + IsLikeResponse response = univApplyInfoLikeService.getIsLiked(user, 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isFalse(); } @Test - void 존재하지_않는_대학의_좋아요_여부를_조회하면_예외_응답을_반환한다() { + void 존재하지_않는_대학_지원_정보의_좋아요_여부를_조회하면_예외_응답을_반환한다() { // given - Long invalidUniversityId = 9999L; + Long invalidUnivApplyInfoId = 9999L; // when & then - assertThatCode(() -> universityLikeService.getIsLiked(user, invalidUniversityId)) + assertThatCode(() -> univApplyInfoLikeService.getIsLiked(user, invalidUnivApplyInfoId)) .isInstanceOf(CustomException.class) - .hasMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + .hasMessage(UNIV_APPLY_INFO_NOT_FOUND.getMessage()); } private void saveLikedUniversity(SiteUser siteUser, UnivApplyInfo univApplyInfo) { - LikedUniversity likedUniversity = LikedUniversity.builder() + LikedUnivApplyInfo likedUnivApplyInfo = LikedUnivApplyInfo.builder() .siteUser(siteUser) .univApplyInfo(univApplyInfo) .build(); - likedUniversityRepository.save(likedUniversity); + likedUnivApplyInfoRepository.save(likedUnivApplyInfo); } } diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java similarity index 54% rename from src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java rename to src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java index fbad2d174..1c58316dc 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoQueryServiceTest.java @@ -4,13 +4,13 @@ import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.university.domain.LanguageTestType; import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.dto.UniversityDetailResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponses; +import com.example.solidconnection.university.dto.UnivApplyInfoDetailResponse; +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.UniversityInfoForApplyRepository; -import com.example.solidconnection.university.repository.custom.UniversityFilterRepository; +import com.example.solidconnection.university.repository.UnivApplyInfoRepository; +import com.example.solidconnection.university.repository.custom.UnivApplyInfoFilterRepository; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -18,24 +18,24 @@ import java.util.List; -import static com.example.solidconnection.common.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; +import static com.example.solidconnection.common.exception.ErrorCode.UNIV_APPLY_INFO_NOT_FOUND; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.times; @TestContainerSpringBootTest -@DisplayName("대학교 조회 서비스 테스트") -class UniversityQueryServiceTest { +@DisplayName("대학 지원 정보 조회 서비스 테스트") +class UnivApplyInfoQueryServiceTest { @Autowired - private UniversityQueryService universityQueryService; + private UnivApplyInfoQueryService univApplyInfoQueryService; @SpyBean - private UniversityFilterRepository universityFilterRepository; + private UnivApplyInfoFilterRepository univApplyInfoFilterRepository; @SpyBean - private UniversityInfoForApplyRepository universityInfoForApplyRepository; + private UnivApplyInfoRepository univApplyInfoRepository; @Autowired private UnivApplyInfoFixture univApplyInfoFixture; @@ -44,46 +44,46 @@ class UniversityQueryServiceTest { private LanguageRequirementFixture languageRequirementFixture; @Test - void 대학_상세정보를_정상_조회한다() { + void 대학_지원_정보를_상세_조회한다() { // given UnivApplyInfo 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(); // when - UniversityDetailResponse response = universityQueryService.getUniversityDetail(괌대학_A_지원_정보.getId()); + UnivApplyInfoDetailResponse response = univApplyInfoQueryService.getUnivApplyInfoDetail(괌대학_A_지원_정보.getId()); // then assertThat(response.id()).isEqualTo(괌대학_A_지원_정보.getId()); } @Test - void 대학_상세정보_조회시_캐시가_적용된다() { + void 대학_지원_정보_상세_조회시_캐시가_적용된다() { // given UnivApplyInfo 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(); // when - UniversityDetailResponse firstResponse = universityQueryService.getUniversityDetail(괌대학_A_지원_정보.getId()); - UniversityDetailResponse secondResponse = universityQueryService.getUniversityDetail(괌대학_A_지원_정보.getId()); + UnivApplyInfoDetailResponse firstResponse = univApplyInfoQueryService.getUnivApplyInfoDetail(괌대학_A_지원_정보.getId()); + UnivApplyInfoDetailResponse secondResponse = univApplyInfoQueryService.getUnivApplyInfoDetail(괌대학_A_지원_정보.getId()); // then assertThat(firstResponse).isEqualTo(secondResponse); - then(universityInfoForApplyRepository).should(times(1)).getUniversityInfoForApplyById(괌대학_A_지원_정보.getId()); + then(univApplyInfoRepository).should(times(1)).getUnivApplyInfoById(괌대학_A_지원_정보.getId()); } @Test - void 존재하지_않는_대학_상세정보를_조회하면_예외_응답을_반환한다() { + void 존재하지_않는_대학_지원_정보를_조회하면_예외_응답을_반환한다() { // given - Long invalidUniversityInfoForApplyId = 9999L; + Long invalidUnivApplyInfoId = 9999L; // when & then assertThatExceptionOfType(RuntimeException.class) - .isThrownBy(() -> universityQueryService.getUniversityDetail(invalidUniversityInfoForApplyId)) + .isThrownBy(() -> univApplyInfoQueryService.getUnivApplyInfoDetail(invalidUnivApplyInfoId)) .havingRootCause() .isInstanceOf(CustomException.class) - .withMessage(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND.getMessage()); + .withMessage(UNIV_APPLY_INFO_NOT_FOUND.getMessage()); } @Test - void 전체_대학을_조회한다() { + void 전체_대학_지원_정보를_조회한다() { // given UnivApplyInfo 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(); UnivApplyInfo 괌대학_B_지원_정보 = univApplyInfoFixture.괌대학_B_지원_정보(); @@ -93,23 +93,23 @@ class UniversityQueryServiceTest { UnivApplyInfo 메이지대학_지원_정보 = univApplyInfoFixture.메이지대학_지원_정보(); // when - UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( + UnivApplyInfoPreviewResponses response = univApplyInfoQueryService.searchUnivApplyInfo( null, List.of(), null, null); // then - assertThat(response.universityInfoForApplyPreviewResponses()) + assertThat(response.univApplyInfoPreviews()) .containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메이지대학_지원_정보) + UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보), + UnivApplyInfoPreviewResponse.from(괌대학_B_지원_정보), + UnivApplyInfoPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), + UnivApplyInfoPreviewResponse.from(서던덴마크대학교_지원_정보), + UnivApplyInfoPreviewResponse.from(그라츠대학_지원_정보), + UnivApplyInfoPreviewResponse.from(메이지대학_지원_정보) ); } @Test - void 대학_조회시_캐시가_적용된다() { + void 대학_지원_정보_조회시_캐시가_적용된다() { // given univApplyInfoFixture.괌대학_A_지원_정보(); String regionCode = "AMERICAS"; @@ -119,20 +119,20 @@ class UniversityQueryServiceTest { String term = "2024-1"; // when - UniversityInfoForApplyPreviewResponses firstResponse = - universityQueryService.searchUniversity(regionCode, keywords, testType, testScore); - UniversityInfoForApplyPreviewResponses secondResponse = - universityQueryService.searchUniversity(regionCode, keywords, testType, testScore); + UnivApplyInfoPreviewResponses firstResponse = + univApplyInfoQueryService.searchUnivApplyInfo(regionCode, keywords, testType, testScore); + UnivApplyInfoPreviewResponses secondResponse = + univApplyInfoQueryService.searchUnivApplyInfo(regionCode, keywords, testType, testScore); // then assertThat(firstResponse).isEqualTo(secondResponse); - then(universityFilterRepository).should(times(1)) - .findByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm( + then(univApplyInfoFilterRepository).should(times(1)) + .findAllByRegionCodeAndKeywordsAndLanguageTestTypeAndTestScoreAndTerm( regionCode, keywords, testType, testScore, term); } @Test - void 지역으로_대학을_필터링한다() { + void 지역으로_대학_지원_정보를_필터링한다() { // given UnivApplyInfo 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(); univApplyInfoFixture.코펜하겐IT대학_지원_정보(); @@ -140,35 +140,35 @@ class UniversityQueryServiceTest { univApplyInfoFixture.메이지대학_지원_정보(); // when - UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( + UnivApplyInfoPreviewResponses response = univApplyInfoQueryService.searchUnivApplyInfo( "AMERICAS", List.of(), null, null); // then - assertThat(response.universityInfoForApplyPreviewResponses()) - .containsExactlyInAnyOrder(UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보)); + assertThat(response.univApplyInfoPreviews()) + .containsExactlyInAnyOrder(UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보)); } @Test - void 키워드로_대학을_필터링한다() { + void 키워드로_대학_지원_정보를_필터링한다() { // given univApplyInfoFixture.괌대학_A_지원_정보(); UnivApplyInfo 그라츠대학_지원_정보 = univApplyInfoFixture.그라츠대학_지원_정보(); UnivApplyInfo 메이지대학_지원_정보 = univApplyInfoFixture.메이지대학_지원_정보(); // when - UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( + UnivApplyInfoPreviewResponses response = univApplyInfoQueryService.searchUnivApplyInfo( null, List.of("라", "일본"), null, null); // then - assertThat(response.universityInfoForApplyPreviewResponses()) + assertThat(response.univApplyInfoPreviews()) .containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(그라츠대학_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메이지대학_지원_정보) + UnivApplyInfoPreviewResponse.from(그라츠대학_지원_정보), + UnivApplyInfoPreviewResponse.from(메이지대학_지원_정보) ); } @Test - void 어학시험_조건으로_대학을_필터링한다() { + void 어학시험_조건으로_대학_지원_정보를_필터링한다() { // given UnivApplyInfo 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(); languageRequirementFixture.토플_80(괌대학_A_지원_정보); @@ -178,16 +178,16 @@ class UniversityQueryServiceTest { languageRequirementFixture.토익_900(괌대학_B_지원_정보); // when - UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( + UnivApplyInfoPreviewResponses response = univApplyInfoQueryService.searchUnivApplyInfo( null, List.of(), LanguageTestType.TOEFL_IBT, "70"); // then - assertThat(response.universityInfoForApplyPreviewResponses()) - .containsExactlyInAnyOrder(UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보)); + assertThat(response.univApplyInfoPreviews()) + .containsExactlyInAnyOrder(UnivApplyInfoPreviewResponse.from(괌대학_B_지원_정보)); } @Test - void 모든_조건으로_대학을_필터링한다() { + void 모든_조건으로_대학_지원_정보를_필터링한다() { // given UnivApplyInfo 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(); languageRequirementFixture.토플_80(괌대학_A_지원_정보); @@ -196,11 +196,11 @@ class UniversityQueryServiceTest { languageRequirementFixture.토플_70(서던덴마크대학교_지원_정보); // when - UniversityInfoForApplyPreviewResponses response = universityQueryService.searchUniversity( + UnivApplyInfoPreviewResponses response = univApplyInfoQueryService.searchUnivApplyInfo( "EUROPE", List.of(), LanguageTestType.TOEFL_IBT, "70"); // then - assertThat(response.universityInfoForApplyPreviewResponses()) - .containsExactly(UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보)); + assertThat(response.univApplyInfoPreviews()) + .containsExactly(UnivApplyInfoPreviewResponse.from(서던덴마크대학교_지원_정보)); } } diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java similarity index 59% rename from src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java rename to src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java index a1bfba10b..c6bf60b9b 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java @@ -10,8 +10,8 @@ import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; -import com.example.solidconnection.university.dto.UniversityRecommendsResponse; +import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; +import com.example.solidconnection.university.dto.UnivApplyInfoRecommendsResponse; import com.example.solidconnection.university.fixture.UnivApplyInfoFixture; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -20,15 +20,15 @@ import java.util.List; -import static com.example.solidconnection.university.service.UniversityRecommendService.RECOMMEND_UNIVERSITY_NUM; +import static com.example.solidconnection.university.service.UnivApplyInfoRecommendService.RECOMMEND_UNIV_APPLY_INFO_NUM; import static org.assertj.core.api.Assertions.assertThat; @TestContainerSpringBootTest -@DisplayName("대학교 추천 서비스 테스트") -class UniversityRecommendServiceTest { +@DisplayName("대학 지원 정보 추천 서비스 테스트") +class UnivApplyInfoRecommendServiceTest { @Autowired - private UniversityRecommendService universityRecommendService; + private UnivApplyInfoRecommendService univApplyInfoRecommendService; @Autowired private InterestedRegionRepository interestedRegionRepository; @@ -37,7 +37,7 @@ class UniversityRecommendServiceTest { private InterestedCountryRepository interestedCountryRepository; @Autowired - private GeneralUniversityRecommendService generalUniversityRecommendService; + private GeneralUnivApplyInfoRecommendService generalUnivApplyInfoRecommendService; @Autowired private SiteUserFixture siteUserFixture; @@ -72,93 +72,93 @@ void setUp() { univApplyInfoFixture.그라츠공과대학_지원_정보(); univApplyInfoFixture.린츠_카톨릭대학_지원_정보(); univApplyInfoFixture.메이지대학_지원_정보(); - generalUniversityRecommendService.init(); + generalUnivApplyInfoRecommendService.init(); } @Test - void 관심_지역_설정한_사용자의_맞춤_추천_대학을_조회한다() { + void 관심_지역_설정한_사용자의_맞춤_추천_대학_지원_정보를_조회한다() { // given interestedRegionRepository.save(new InterestedRegion(user, regionFixture.영미권())); // when - UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(user); + UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user); // then assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM) + .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsAll(List.of( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보) + UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보), + UnivApplyInfoPreviewResponse.from(괌대학_B_지원_정보), + UnivApplyInfoPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), + UnivApplyInfoPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보) )); } @Test - void 관심_국가_설정한_사용자의_맞춤_추천_대학을_조회한다() { + void 관심_국가_설정한_사용자의_맞춤_추천_대학_지원_정보를_조회한다() { // given interestedCountryRepository.save(new InterestedCountry(user, countryFixture.덴마크())); // when - UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(user); + UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user); // then assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM) + .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsAll(List.of( - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보) + UnivApplyInfoPreviewResponse.from(서던덴마크대학교_지원_정보), + UnivApplyInfoPreviewResponse.from(코펜하겐IT대학_지원_정보) )); } @Test - void 관심_지역과_국가_모두_설정한_사용자의_맞춤_추천_대학을_조회한다() { + void 관심_지역과_국가_모두_설정한_사용자의_맞춤_추천_대학_지원_정보를_조회한다() { // given interestedRegionRepository.save(new InterestedRegion(user, regionFixture.영미권())); interestedCountryRepository.save(new InterestedCountry(user, countryFixture.덴마크())); // when - UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(user); + UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user); // then assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM) + .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsExactlyInAnyOrder( - UniversityInfoForApplyPreviewResponse.from(괌대학_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(괌대학_B_지원_정보), - UniversityInfoForApplyPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), - UniversityInfoForApplyPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), - UniversityInfoForApplyPreviewResponse.from(서던덴마크대학교_지원_정보), - UniversityInfoForApplyPreviewResponse.from(코펜하겐IT대학_지원_정보) + UnivApplyInfoPreviewResponse.from(괌대학_A_지원_정보), + UnivApplyInfoPreviewResponse.from(괌대학_B_지원_정보), + UnivApplyInfoPreviewResponse.from(메모리얼대학_세인트존스_A_지원_정보), + UnivApplyInfoPreviewResponse.from(네바다주립대학_라스베이거스_지원_정보), + UnivApplyInfoPreviewResponse.from(서던덴마크대학교_지원_정보), + UnivApplyInfoPreviewResponse.from(코펜하겐IT대학_지원_정보) ); } @Test - void 관심사_미설정_사용자는_일반_추천_대학을_조회한다() { + void 관심사_미설정_사용자는_일반_추천_대학_지원_정보를_조회한다() { // when - UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(user); + UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user); // then assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM) + .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsExactlyInAnyOrderElementsOf( - generalUniversityRecommendService.getRecommendUniversities().stream() - .map(UniversityInfoForApplyPreviewResponse::from) + generalUnivApplyInfoRecommendService.getGeneralRecommends().stream() + .map(UnivApplyInfoPreviewResponse::from) .toList() ); } @Test - void 일반_추천_대학을_조회한다() { + void 일반_추천_대학_지원_정보를_조회한다() { // when - UniversityRecommendsResponse response = universityRecommendService.getGeneralRecommends(); + UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getGeneralRecommends(); // then assertThat(response.recommendedUniversities()) - .hasSize(RECOMMEND_UNIVERSITY_NUM) + .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsExactlyInAnyOrderElementsOf( - generalUniversityRecommendService.getRecommendUniversities().stream() - .map(UniversityInfoForApplyPreviewResponse::from) + generalUnivApplyInfoRecommendService.getGeneralRecommends().stream() + .map(UnivApplyInfoPreviewResponse::from) .toList() ); }