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
@@ -1,14 +1,18 @@
package com.pricewagon.pricewagon.domain.likes.api;

import java.util.List;

import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
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.RestController;

import com.pricewagon.pricewagon.domain.likes.dto.LikeResponseDTO;
import com.pricewagon.pricewagon.domain.likes.service.LikeService;
import com.pricewagon.pricewagon.domain.product.dto.response.BasicProductInfo;
import com.pricewagon.pricewagon.global.config.security.CustomUserDetails;

import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -31,4 +35,12 @@ public ResponseEntity<LikeResponseDTO.registerLikeDTO> registerLike(
return ResponseEntity.ok(result);
}

@Operation(summary = "좋아요 목록 조회", description = "좋아요 목록 조회하는 기능(토큰 필요)")
@GetMapping("/list")
public List<BasicProductInfo> getLikeList(
@AuthenticationPrincipal CustomUserDetails userDetails) {
return likeService.getLikeList(userDetails.getUsername());

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.pricewagon.pricewagon.domain.likes.converter;

import java.util.List;

import org.springframework.stereotype.Component;

import com.pricewagon.pricewagon.domain.history.service.ProductHistoryService;
import com.pricewagon.pricewagon.domain.likes.entity.Likes;
import com.pricewagon.pricewagon.domain.product.dto.response.BasicProductInfo;
import com.pricewagon.pricewagon.domain.product.entity.Product;

import lombok.RequiredArgsConstructor;

@Component
@RequiredArgsConstructor
public class LikeConverter {

private final ProductHistoryService productHistoryService;

public List<BasicProductInfo> convertToBasicProductInfo(List<Likes> likes) {
return likes.stream()
.map(like -> {
Product product = like.getProduct();
Integer previousPrice = productHistoryService.getDifferentLatestPriceByProductId(product);

return new BasicProductInfo(
product.getProductNumber(),
product.getName(),
product.getBrand(),
product.getStarScore(),
product.getReviewCount(),
product.getUserLikeCount(),
product.getImgUrl(),
product.getShopType(),
product.getCurrentPrice(),
previousPrice,
true
);
})
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ public static class registerLikeDTO {
Long userId;
String action; // 좋아요 등록, 좋아요 삭제
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.pricewagon.pricewagon.domain.likes.repository;

import java.util.List;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
Expand All @@ -12,4 +13,6 @@ public interface LikeRepository extends JpaRepository<Likes, Long> {
boolean existsByUserAndProduct(User user, Product product);

Optional<Likes> findByUserAndProduct(User user, Product product);

List<Likes> findByUserId(Long userId);
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.pricewagon.pricewagon.domain.likes.service;

import java.util.List;

import com.pricewagon.pricewagon.domain.likes.dto.LikeResponseDTO;
import com.pricewagon.pricewagon.domain.product.dto.response.BasicProductInfo;

public interface LikeService {
LikeResponseDTO.registerLikeDTO registerLike(Integer productNumber, String username);

List<BasicProductInfo> getLikeList(String username);
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package com.pricewagon.pricewagon.domain.likes.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.pricewagon.pricewagon.domain.likes.converter.LikeConverter;
import com.pricewagon.pricewagon.domain.likes.dto.LikeResponseDTO;
import com.pricewagon.pricewagon.domain.likes.entity.Likes;
import com.pricewagon.pricewagon.domain.likes.repository.LikeRepository;
import com.pricewagon.pricewagon.domain.product.dto.response.BasicProductInfo;
import com.pricewagon.pricewagon.domain.product.entity.Product;
import com.pricewagon.pricewagon.domain.product.repository.ProductRepository;
import com.pricewagon.pricewagon.domain.user.entity.User;
Expand All @@ -25,6 +29,7 @@ public class LikeServiceImpl implements LikeService {
private final LikeRepository likeRepository;
private final UserRepository userRepository;
private final ProductRepository productRepository;
private final LikeConverter likeConverter;

@Override
public LikeResponseDTO.registerLikeDTO registerLike(Integer productNumber, String username) {
Expand All @@ -35,7 +40,7 @@ public LikeResponseDTO.registerLikeDTO registerLike(Integer productNumber, Strin
.orElseThrow(() -> new CustomException(ErrorCode.PRODUCT_NOT_FOUND));

Optional<Likes> like = likeRepository.findByUserAndProduct(user, product);
if (like.isPresent()) { // 좋아요 삭제
if (like.isPresent()) {
likeRepository.delete(like.get());
product.updateLikeCount(product.getLikeCount() - 1);
return LikeResponseDTO.registerLikeDTO.builder()
Expand All @@ -60,4 +65,15 @@ public LikeResponseDTO.registerLikeDTO registerLike(Integer productNumber, Strin

}

@Transactional(readOnly = true)
@Override
public List<BasicProductInfo> getLikeList(String username) {
User user = userRepository.findByAccount(username)
.orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND));

List<Likes> likes = likeRepository.findByUserId(user.getId());

return likeConverter.convertToBasicProductInfo(likes);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@ public static BasicProductInfo createWithLikeStatus(Product product, Integer pre
isLiked
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class FCMConfig {

@Bean
public FirebaseMessaging firebaseMessaging() throws IOException {
// 경로 수정: "resources/" 생략

ClassPathResource resource = new ClassPathResource(
"firebase/fcm.json");
InputStream refreshToken = resource.getInputStream();
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/application-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ spring:
username: ${LOCAL_MYSQL_USERNAME}
password: ${LOCAL_MYSQL_PASSWORD}




# 로깅 설정
logging:
level:
Expand Down