Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,15 @@
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;
import org.springframework.web.multipart.MultipartFile;

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;
Expand Down Expand Up @@ -89,16 +86,4 @@ private boolean isDefaultProfileImage(String profileImageUrl) {
String prefix = "profile/";
return profileImageUrl == null || !profileImageUrl.startsWith(prefix);
}

/*
* 관심 대학교 목록을 조회한다.
* */
@Transactional(readOnly = true)
public List<UnivApplyInfoPreviewResponse> getWishUnivApplyInfo(SiteUser siteUser) {
List<UnivApplyInfo> univApplyInfos = likedUnivApplyInfoRepository.findUnivApplyInfosBySiteUserId(siteUser.getId());

return univApplyInfos.stream()
.map(UnivApplyInfoPreviewResponse::from)
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<UnivApplyInfoRecommendsResponse> getUnivApplyInfoRecommends(
Expand All @@ -47,38 +44,38 @@ public ResponseEntity<UnivApplyInfoRecommendsResponse> getUnivApplyInfoRecommend

// todo: return 타입 UnivApplyInfoPreviewResponses 같이 객체로 묶어서 반환하는 것으로 변경 필요
@GetMapping("/like")
public ResponseEntity<List<UnivApplyInfoPreviewResponse>> getMyWishUnivApplyInfo( /* todo: wish 가 아니라 liked 로 변경 필요 - 코드 용어 통일 */
public ResponseEntity<List<UnivApplyInfoPreviewResponse>> getLikedUnivApplyInfos(
@AuthorizedUser SiteUser siteUser
) {
List<UnivApplyInfoPreviewResponse> wishUniversities = myPageService.getWishUnivApplyInfo(siteUser);
return ResponseEntity.ok(wishUniversities);
List<UnivApplyInfoPreviewResponse> likedUnivApplyInfos = likedUnivApplyInfoService.getLikedUnivApplyInfos(siteUser);
return ResponseEntity.ok(likedUnivApplyInfos);
}

@GetMapping("/{univ-apply-info-id}/like")
public ResponseEntity<IsLikeResponse> getIsLiked(
public ResponseEntity<IsLikeResponse> 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<LikeResultResponse> addWishUnivApplyInfo(
public ResponseEntity<Void> 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<LikeResultResponse> cancelWishUnivApplyInfo(
public ResponseEntity<Void> 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}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,49 @@

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;
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";
public class LikedUnivApplyInfoService {

private final UnivApplyInfoRepository univApplyInfoRepository;
private final LikedUnivApplyInfoRepository likedUnivApplyInfoRepository;

@Value("${university.term}")
public String term;

/*
* '좋아요'한 대학교 목록을 조회한다.
* */
@Transactional(readOnly = true)
public List<UnivApplyInfoPreviewResponse> getLikedUnivApplyInfos(SiteUser siteUser) {
List<UnivApplyInfo> 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<LikedUnivApplyInfo> optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId());
Expand All @@ -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<LikedUnivApplyInfo> optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId());
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -91,18 +89,6 @@ void setUp() {
);
}

@Test
void 관심_대학_지원_정보_목록을_조회한다() {
// given
int likedUnivApplyInfo = createLikedUnivApplyInfos(user);

// when
List<UnivApplyInfoPreviewResponse> response = myPageService.getWishUnivApplyInfo(user);

// then
assertThat(response).hasSize(likedUnivApplyInfo);
}

@Nested
class 프로필_이미지_수정_테스트 {

Expand Down
Loading