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 03db85fbc..ccabb0565 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,8 @@ 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.university.repository.LikedUnivApplyInfoRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.university.domain.UnivApplyInfo; -import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; +import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -17,7 +15,6 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.List; import static com.example.solidconnection.common.exception.ErrorCode.CAN_NOT_CHANGE_NICKNAME_YET; import static com.example.solidconnection.common.exception.ErrorCode.NICKNAME_ALREADY_EXISTED; @@ -89,16 +86,4 @@ private boolean isDefaultProfileImage(String profileImageUrl) { String prefix = "profile/"; return profileImageUrl == null || !profileImageUrl.startsWith(prefix); } - - /* - * 관심 대학교 목록을 조회한다. - * */ - @Transactional(readOnly = true) - public List getWishUnivApplyInfo(SiteUser siteUser) { - List univApplyInfos = likedUnivApplyInfoRepository.findUnivApplyInfosBySiteUserId(siteUser.getId()); - - return univApplyInfos.stream() - .map(UnivApplyInfoPreviewResponse::from) - .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 index d39518e5d..d93e1524b 100644 --- a/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java +++ b/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java @@ -2,14 +2,12 @@ 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.LikedUnivApplyInfoService; import com.example.solidconnection.university.service.UnivApplyInfoQueryService; import com.example.solidconnection.university.service.UnivApplyInfoRecommendService; import lombok.RequiredArgsConstructor; @@ -30,9 +28,8 @@ public class UnivApplyInfoController { private final UnivApplyInfoQueryService univApplyInfoQueryService; - private final UnivApplyInfoLikeService univApplyInfoLikeService; + private final LikedUnivApplyInfoService likedUnivApplyInfoService; private final UnivApplyInfoRecommendService univApplyInfoRecommendService; - private final MyPageService myPageService; @GetMapping("/recommend") public ResponseEntity getUnivApplyInfoRecommends( @@ -47,38 +44,38 @@ public ResponseEntity getUnivApplyInfoRecommend // todo: return 타입 UnivApplyInfoPreviewResponses 같이 객체로 묶어서 반환하는 것으로 변경 필요 @GetMapping("/like") - public ResponseEntity> getMyWishUnivApplyInfo( /* todo: wish 가 아니라 liked 로 변경 필요 - 코드 용어 통일 */ + public ResponseEntity> getLikedUnivApplyInfos( @AuthorizedUser SiteUser siteUser ) { - List wishUniversities = myPageService.getWishUnivApplyInfo(siteUser); - return ResponseEntity.ok(wishUniversities); + List likedUnivApplyInfos = likedUnivApplyInfoService.getLikedUnivApplyInfos(siteUser); + return ResponseEntity.ok(likedUnivApplyInfos); } @GetMapping("/{univ-apply-info-id}/like") - public ResponseEntity getIsLiked( + public ResponseEntity isUnivApplyInfoLiked( @AuthorizedUser SiteUser siteUser, @PathVariable("univ-apply-info-id") Long univApplyInfoId ) { - IsLikeResponse isLiked = univApplyInfoLikeService.getIsLiked(siteUser, univApplyInfoId); + IsLikeResponse isLiked = likedUnivApplyInfoService.isUnivApplyInfoLiked(siteUser, univApplyInfoId); return ResponseEntity.ok(isLiked); } @PostMapping("/{univ-apply-info-id}/like") - public ResponseEntity addWishUnivApplyInfo( + public ResponseEntity addUnivApplyInfoLike( @AuthorizedUser SiteUser siteUser, @PathVariable("univ-apply-info-id") Long univApplyInfoId ) { - LikeResultResponse likeResultResponse = univApplyInfoLikeService.likeUnivApplyInfo(siteUser, univApplyInfoId); - return ResponseEntity.ok(likeResultResponse); + likedUnivApplyInfoService.addUnivApplyInfoLike(siteUser, univApplyInfoId); + return ResponseEntity.ok().build(); } @DeleteMapping("/{univ-apply-info-id}/like") - public ResponseEntity cancelWishUnivApplyInfo( + public ResponseEntity cancelUnivApplyInfoLike( @AuthorizedUser SiteUser siteUser, @PathVariable("univ-apply-info-id") Long univApplyInfoId ) { - LikeResultResponse likeResultResponse = univApplyInfoLikeService.cancelLikeUnivApplyInfo(siteUser, univApplyInfoId); - return ResponseEntity.ok(likeResultResponse); + likedUnivApplyInfoService.cancelUnivApplyInfoLike(siteUser, univApplyInfoId); + return ResponseEntity.ok().build(); } @GetMapping("/{univ-apply-info-id}") diff --git a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java b/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java similarity index 78% rename from src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java rename to src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java index 4aa70eac4..2ac9ceb3d 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java +++ b/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java @@ -2,17 +2,18 @@ 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.dto.UnivApplyInfoPreviewResponse; +import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository; 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.List; import java.util.Optional; import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_UNIV_APPLY_INFO; @@ -20,10 +21,7 @@ @RequiredArgsConstructor @Service -public class UnivApplyInfoLikeService { - - public static final String LIKE_SUCCESS_MESSAGE = "LIKE_SUCCESS"; - public static final String LIKE_CANCELED_MESSAGE = "LIKE_CANCELED"; +public class LikedUnivApplyInfoService { private final UnivApplyInfoRepository univApplyInfoRepository; private final LikedUnivApplyInfoRepository likedUnivApplyInfoRepository; @@ -31,11 +29,22 @@ public class UnivApplyInfoLikeService { @Value("${university.term}") public String term; + /* + * '좋아요'한 대학교 목록을 조회한다. + * */ + @Transactional(readOnly = true) + public List getLikedUnivApplyInfos(SiteUser siteUser) { + List univApplyInfos = likedUnivApplyInfoRepository.findUnivApplyInfosBySiteUserId(siteUser.getId()); + return univApplyInfos.stream() + .map(UnivApplyInfoPreviewResponse::from) + .toList(); + } + /* * 대학교를 '좋아요' 한다. * */ @Transactional - public LikeResultResponse likeUnivApplyInfo(SiteUser siteUser, Long univApplyInfoId) { + public void addUnivApplyInfoLike(SiteUser siteUser, Long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()); @@ -48,14 +57,13 @@ public LikeResultResponse likeUnivApplyInfo(SiteUser siteUser, Long univApplyInf .siteUserId(siteUser.getId()) .build(); likedUnivApplyInfoRepository.save(likedUnivApplyInfo); - return new LikeResultResponse(LIKE_SUCCESS_MESSAGE); } /* * 대학교 '좋아요'를 취소한다. * */ @Transactional - public LikeResultResponse cancelLikeUnivApplyInfo(SiteUser siteUser, long univApplyInfoId) { + public void cancelUnivApplyInfoLike(SiteUser siteUser, long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()); @@ -64,14 +72,13 @@ public LikeResultResponse cancelLikeUnivApplyInfo(SiteUser siteUser, long univAp } likedUnivApplyInfoRepository.delete(optionalLikedUnivApplyInfo.get()); - return new LikeResultResponse(LIKE_CANCELED_MESSAGE); } /* * '좋아요'한 대학교인지 확인한다. * */ @Transactional(readOnly = true) - public IsLikeResponse getIsLiked(SiteUser siteUser, Long univApplyInfoId) { + public IsLikeResponse isUnivApplyInfoLiked(SiteUser siteUser, Long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); boolean isLike = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()).isPresent(); return new IsLikeResponse(isLike); 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 85fdfd4cf..17697aaa1 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java @@ -10,12 +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.university.repository.LikedUnivApplyInfoRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.university.domain.LikedUnivApplyInfo; -import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; import com.example.solidconnection.university.fixture.UnivApplyInfoFixture; +import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -26,7 +25,6 @@ import org.springframework.mock.web.MockMultipartFile; import java.time.LocalDateTime; -import java.util.List; import static com.example.solidconnection.common.exception.ErrorCode.CAN_NOT_CHANGE_NICKNAME_YET; import static com.example.solidconnection.siteuser.service.MyPageService.MIN_DAYS_BETWEEN_NICKNAME_CHANGES; @@ -91,18 +89,6 @@ void setUp() { ); } - @Test - void 관심_대학_지원_정보_목록을_조회한다() { - // given - int likedUnivApplyInfo = createLikedUnivApplyInfos(user); - - // when - List response = myPageService.getWishUnivApplyInfo(user); - - // then - assertThat(response).hasSize(likedUnivApplyInfo); - } - @Nested class 프로필_이미지_수정_테스트 { diff --git a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java b/src/test/java/com/example/solidconnection/university/service/LikedUnivApplyInfoServiceTest.java similarity index 62% rename from src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java rename to src/test/java/com/example/solidconnection/university/service/LikedUnivApplyInfoServiceTest.java index 8867639e5..d8d4c0b9b 100644 --- a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/LikedUnivApplyInfoServiceTest.java @@ -3,34 +3,33 @@ 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.university.repository.LikedUnivApplyInfoRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; 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.dto.UnivApplyInfoPreviewResponse; import com.example.solidconnection.university.fixture.UnivApplyInfoFixture; +import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; + 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 UnivApplyInfoLikeServiceTest { +class LikedUnivApplyInfoServiceTest { @Autowired - private UnivApplyInfoLikeService univApplyInfoLikeService; + private LikedUnivApplyInfoService likedUnivApplyInfoService; @Autowired private LikedUnivApplyInfoRepository likedUnivApplyInfoRepository; @@ -50,30 +49,43 @@ void setUp() { 괌대학_A_지원_정보 = univApplyInfoFixture.괌대학_A_지원_정보(); } + @Test + void 관심_대학_지원_정보_목록을_조회한다() { + // given + UnivApplyInfo 메이지대학_지원_정보 = univApplyInfoFixture.메이지대학_지원_정보(); + UnivApplyInfo 그라츠대학_지원_정보 = univApplyInfoFixture.그라츠대학_지원_정보(); + saveLikedUnivApplyInfo(user, 메이지대학_지원_정보); + saveLikedUnivApplyInfo(user, 그라츠대학_지원_정보); + + // when + List response = likedUnivApplyInfoService.getLikedUnivApplyInfos(user); + + // then + assertThat(response).extracting(UnivApplyInfoPreviewResponse::id) + .containsExactlyInAnyOrder(메이지대학_지원_정보.getId(), 그라츠대학_지원_정보.getId()); + } + @Nested class 대학_지원_정보_좋아요를_등록한다 { @Test void 성공적으로_좋아요를_등록한다() { // when - LikeResultResponse response = univApplyInfoLikeService.likeUnivApplyInfo(user, 괌대학_A_지원_정보.getId()); + likedUnivApplyInfoService.addUnivApplyInfoLike(user, 괌대학_A_지원_정보.getId()); // then - assertAll( - () -> assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE), - () -> assertThat(likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId( - user.getId(), 괌대학_A_지원_정보.getId() - )).isPresent() - ); + assertThat( + likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(user.getId(), 괌대학_A_지원_정보.getId()) + ).isPresent(); } @Test void 이미_좋아요했으면_예외_응답을_반환한다() { // given - saveLikedUniversity(user, 괌대학_A_지원_정보); + saveLikedUnivApplyInfo(user, 괌대학_A_지원_정보); // when & then - assertThatCode(() -> univApplyInfoLikeService.likeUnivApplyInfo(user, 괌대학_A_지원_정보.getId())) + assertThatCode(() -> likedUnivApplyInfoService.addUnivApplyInfoLike(user, 괌대학_A_지원_정보.getId())) .isInstanceOf(CustomException.class) .hasMessage(ALREADY_LIKED_UNIV_APPLY_INFO.getMessage()); } @@ -85,24 +97,21 @@ class 대학_지원_정보_좋아요를_취소한다 { @Test void 성공적으로_좋아요를_취소한다() { // given - saveLikedUniversity(user, 괌대학_A_지원_정보); + saveLikedUnivApplyInfo(user, 괌대학_A_지원_정보); // when - LikeResultResponse response = univApplyInfoLikeService.cancelLikeUnivApplyInfo(user, 괌대학_A_지원_정보.getId()); + likedUnivApplyInfoService.cancelUnivApplyInfoLike(user, 괌대학_A_지원_정보.getId()); // then - assertAll( - () -> assertThat(response.result()).isEqualTo(LIKE_CANCELED_MESSAGE), - () -> assertThat(likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId( - user.getId(), 괌대학_A_지원_정보.getId() - )).isEmpty() - ); + assertThat( + likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(user.getId(), 괌대학_A_지원_정보.getId()) + ).isEmpty(); } @Test void 좋아요하지_않았으면_예외_응답을_반환한다() { // when & then - assertThatCode(() -> univApplyInfoLikeService.cancelLikeUnivApplyInfo(user, 괌대학_A_지원_정보.getId())) + assertThatCode(() -> likedUnivApplyInfoService.cancelUnivApplyInfoLike(user, 괌대학_A_지원_정보.getId())) .isInstanceOf(CustomException.class) .hasMessage(NOT_LIKED_UNIV_APPLY_INFO.getMessage()); } @@ -114,7 +123,7 @@ class 대학_지원_정보_좋아요를_취소한다 { Long invalidUnivApplyInfoId = 9999L; // when & then - assertThatCode(() -> univApplyInfoLikeService.likeUnivApplyInfo(user, invalidUnivApplyInfoId)) + assertThatCode(() -> likedUnivApplyInfoService.addUnivApplyInfoLike(user, invalidUnivApplyInfoId)) .isInstanceOf(CustomException.class) .hasMessage(UNIV_APPLY_INFO_NOT_FOUND.getMessage()); } @@ -122,10 +131,10 @@ class 대학_지원_정보_좋아요를_취소한다 { @Test void 좋아요한_대학_지원_정보인지_확인한다() { // given - saveLikedUniversity(user, 괌대학_A_지원_정보); + saveLikedUnivApplyInfo(user, 괌대학_A_지원_정보); // when - IsLikeResponse response = univApplyInfoLikeService.getIsLiked(user, 괌대학_A_지원_정보.getId()); + IsLikeResponse response = likedUnivApplyInfoService.isUnivApplyInfoLiked(user, 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isTrue(); @@ -134,7 +143,7 @@ class 대학_지원_정보_좋아요를_취소한다 { @Test void 좋아요하지_않은_대학_지원_정보인지_확인한다() { // when - IsLikeResponse response = univApplyInfoLikeService.getIsLiked(user, 괌대학_A_지원_정보.getId()); + IsLikeResponse response = likedUnivApplyInfoService.isUnivApplyInfoLiked(user, 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isFalse(); @@ -146,12 +155,12 @@ class 대학_지원_정보_좋아요를_취소한다 { Long invalidUnivApplyInfoId = 9999L; // when & then - assertThatCode(() -> univApplyInfoLikeService.getIsLiked(user, invalidUnivApplyInfoId)) + assertThatCode(() -> likedUnivApplyInfoService.isUnivApplyInfoLiked(user, invalidUnivApplyInfoId)) .isInstanceOf(CustomException.class) .hasMessage(UNIV_APPLY_INFO_NOT_FOUND.getMessage()); } - private void saveLikedUniversity(SiteUser siteUser, UnivApplyInfo univApplyInfo) { + private void saveLikedUnivApplyInfo(SiteUser siteUser, UnivApplyInfo univApplyInfo) { LikedUnivApplyInfo likedUnivApplyInfo = LikedUnivApplyInfo.builder() .siteUserId(siteUser.getId()) .univApplyInfoId(univApplyInfo.getId())