Skip to content

Commit ef60abd

Browse files
authored
Merge pull request #44 from koview/moon
Moon
2 parents 8385628 + f984e59 commit ef60abd

36 files changed

+615
-90
lines changed

koview-server/src/main/java/com/koview/koview_server/config/SecurityConfig.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Excepti
3030
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
3131
.authorizeHttpRequests(auth -> auth
3232
.requestMatchers("/swagger-ui/**","/v3/api-docs/**", "/member/**", "/image/**",
33-
"/shops", "/reviews", "/reviews/detail", "/queries", "/queries/{queryId}","/review/search", "/comments",
34-
"/products/**", "/categories", "/home").permitAll()
33+
"/shops", "/products", "/categories", "/home", "/comments").permitAll()
3534
.anyRequest().authenticated()
3635
)
3736

koview-server/src/main/java/com/koview/koview_server/home/dto/HomeResponseDTO.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.koview.koview_server.home.dto;
22

33
import com.koview.koview_server.product.domain.dto.ProductResponseDTO;
4+
import com.koview.koview_server.query.domain.dto.QueryResponseDTO;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
67
import lombok.Getter;
@@ -13,5 +14,6 @@
1314
public class HomeResponseDTO {
1415
private List<ProductResponseDTO.NameWithImage> famousFourProducts;
1516
private List<ProductResponseDTO.NameWithImage> restrictedFourProducts;
17+
private List<QueryResponseDTO.Single> lastFourQueries;
1618
//TODO: 질의 4개 리스트 추가
1719
}

koview-server/src/main/java/com/koview/koview_server/home/facade/HomeFacade.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.koview.koview_server.home.dto.HomeResponseDTO;
44
import com.koview.koview_server.product.domain.dto.ProductResponseDTO;
55
import com.koview.koview_server.product.service.ProductQueryService;
6+
import com.koview.koview_server.query.domain.dto.QueryResponseDTO;
7+
import com.koview.koview_server.query.service.QueryQueryService;
68
import lombok.RequiredArgsConstructor;
79
import org.springframework.stereotype.Component;
810
import org.springframework.transaction.annotation.Transactional;
@@ -14,14 +16,17 @@
1416
@RequiredArgsConstructor
1517
public class HomeFacade {
1618
private final ProductQueryService productQueryService;
19+
private final QueryQueryService queryService;
1720

1821
public HomeResponseDTO getHomeV1(){
1922
List<ProductResponseDTO.NameWithImage> fourRestrictedProducts = productQueryService.getFourRestrictedProducts();
2023
List<ProductResponseDTO.NameWithImage> fourFamousProducts = productQueryService.getFourBestFamousProducts();
24+
List<QueryResponseDTO.Single> fourQueries = queryService.getFourQueries();
2125

2226
return HomeResponseDTO.builder()
2327
.restrictedFourProducts(fourRestrictedProducts)
2428
.famousFourProducts(fourFamousProducts)
29+
.lastFourQueries(fourQueries)
2530
//TODO: 질문 기능 개발시 추가
2631
.build();
2732

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.koview.koview_server.like.repository;
22

33
import com.koview.koview_server.like.domain.Like;
4+
import com.koview.koview_server.member.domain.Member;
5+
import com.koview.koview_server.review.domain.Review;
46
import org.springframework.data.jpa.repository.JpaRepository;
57

68
import java.util.Optional;
79

810
public interface LikeRepository extends JpaRepository<Like, Long> {
911
Optional<Like> findByReviewId(Long reviewId);
1012
Like findByReviewIdAndMemberId(Long reviewId, Long memberId);
13+
Boolean existsByMemberAndReview(Member member, Review review);
1114
}

koview-server/src/main/java/com/koview/koview_server/like/service/LikeServiceImpl.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ public LikeResponseDTO createLikes(Long reviewId) {
3838
review.increaseTotalLikesCount();
3939
reviewRepository.save(review);
4040

41-
currentMember.isCurrentMemberLikedTrue();
4241
memberRepository.save(currentMember);
4342

4443
return new LikeResponseDTO(newLike);
@@ -57,7 +56,6 @@ public LikeResponseDTO cancelLikes(Long reviewId) {
5756
likesRepository.delete(like);
5857

5958
Member currentMember = validateMember();
60-
currentMember.isCurrentMemberLikedFalse();
6159
memberRepository.save(currentMember);
6260

6361
return new LikeResponseDTO(like);

koview-server/src/main/java/com/koview/koview_server/member/domain/Member.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ public class Member extends BaseTimeEntity {
5959
@Column(nullable = false, length = 30)
6060
private RoleType role; // 권한
6161

62-
private Boolean isCurrentMemberLiked = false;
63-
private Boolean isCurrentMemberWithQuery = false;
64-
6562
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
6663
private List<Review> reviewList = new ArrayList<>();
6764

@@ -107,20 +104,4 @@ public void addMemberLikedShops(List<Shop> shops) {
107104
public void addProfileImage(ProfileImage profileImage) {
108105
this.profileImage = profileImage;
109106
}
110-
111-
public void isCurrentMemberLikedTrue() {
112-
this.isCurrentMemberLiked = true;
113-
}
114-
115-
public void isCurrentMemberLikedFalse() {
116-
this.isCurrentMemberLiked = false;
117-
}
118-
119-
public void isCurrentMemberWithQueryTrue() {
120-
this.isCurrentMemberWithQuery = true;
121-
}
122-
123-
public void isCurrentMemberWithQueryFalse() {
124-
this.isCurrentMemberWithQuery = false;
125-
}
126107
}

koview-server/src/main/java/com/koview/koview_server/mypage/service/MyPageServiceImpl.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.koview.koview_server.global.apiPayload.code.status.ErrorStatus;
44
import com.koview.koview_server.global.apiPayload.exception.MemberException;
55
import com.koview.koview_server.global.security.util.SecurityUtil;
6+
import com.koview.koview_server.like.repository.LikeRepository;
67
import com.koview.koview_server.member.domain.Member;
78
import com.koview.koview_server.member.repository.MemberRepository;
89
import com.koview.koview_server.mypage.domain.ProfileImage;
@@ -31,6 +32,7 @@ public class MyPageServiceImpl implements MypageService {
3132
private final MemberRepository memberRepository;
3233
private final ReviewRepository reviewRepository;
3334
private final ReviewPurchaseLinkRepository reviewPurchaseLinkRepository;
35+
private final LikeRepository likeRepository;
3436

3537
@Override
3638
public LimitedReviewResponseDTO.ReviewSlice findAllByMemberWithLimitedImages(Pageable pageable) {
@@ -85,19 +87,27 @@ private Member validateMember() {
8587
}
8688

8789
private LimitedReviewResponseDTO.ReviewSlice getLimitedImageReviewSlice(Slice<Review> reviewSlice) {
88-
List<LimitedReviewResponseDTO.Single> reviewList = reviewSlice.stream().map(ReviewConverter::toLimitedSingleDto).toList();
90+
Member member = validateMember();
91+
92+
List<LimitedReviewResponseDTO.Single> reviewList = reviewSlice.stream().map(review -> {
93+
Boolean isLiked = likeRepository.existsByMemberAndReview(member, review);
94+
return ReviewConverter.toLimitedSingleDto(review, isLiked);
95+
}).toList();
8996

9097
return ReviewConverter.toLimitedSliceDto(reviewSlice, reviewList);
9198
}
9299

93100
//TODO: ReviewQuerySerivce에서 메소드 재활용하기.
94101
private ReviewResponseDTO.ReviewSlice getReviewSlice(Slice<Review> reviewSlice) {
102+
Member member = validateMember();
95103
List<ReviewResponseDTO.Single> reviewList = reviewSlice.stream().map(review ->{
104+
96105
List<PurchaseLinkResponseDTO> purchaseLinkList =
97106
reviewPurchaseLinkRepository.findPurchaseLinksByReviewId(review.getId()).stream()
98107
.map(PurchaseLinkResponseDTO::new).toList();
108+
Boolean isLiked = likeRepository.existsByMemberAndReview(member, review);
99109

100-
return ReviewConverter.toSingleDTO(review, purchaseLinkList);
110+
return ReviewConverter.toSingleDTO(review, isLiked ,purchaseLinkList);
101111
}).toList();
102112

103113
return ReviewConverter.toSliceDTO(reviewSlice, reviewList);

koview-server/src/main/java/com/koview/koview_server/product/domain/dto/ProductConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static ProductResponseDTO.ProductSlice toSliceDTO(Slice<Product> productS
3131
List<ProductResponseDTO.Single> productList){
3232
return ProductResponseDTO.ProductSlice.builder()
3333
.productList(productList)
34-
.getNumber(productSlice.getNumber())
34+
.getNumber(productSlice.getNumber()+1)
3535
.hasNext(productSlice.hasNext())
3636
.hasPrevious(productSlice.hasPrevious())
3737
.build();

koview-server/src/main/java/com/koview/koview_server/product/service/ProductServiceImpl.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22

33
import com.koview.koview_server.global.apiPayload.code.status.ErrorStatus;
44
import com.koview.koview_server.global.apiPayload.exception.GeneralException;
5+
import com.koview.koview_server.global.apiPayload.exception.MemberException;
56
import com.koview.koview_server.global.common.image.ImageResponseDTO;
7+
import com.koview.koview_server.global.security.util.SecurityUtil;
8+
import com.koview.koview_server.like.repository.LikeRepository;
9+
import com.koview.koview_server.member.domain.Member;
10+
import com.koview.koview_server.member.repository.MemberRepository;
611
import com.koview.koview_server.product.domain.CategoryType;
712
import com.koview.koview_server.purchaseLink.repository.PurchaseLinkRepository;
813
import com.koview.koview_server.purchaseLink.domain.dto.PurchaseLinkResponseDTO;
@@ -38,6 +43,8 @@ public class ProductServiceImpl implements ProductService {
3843
private final PurchaseLinkRepository purchaseLinkRepository;
3944
private final CategoryRepository categoryRepository;
4045
private final ReviewRepository reviewRepository;
46+
private final LikeRepository likeRepository;
47+
private final MemberRepository memberRepository;
4148

4249
@Override
4350
public ProductResponseDTO.ProductSlice getProductsByStatusTypeAndCategory(Long categoryId, StatusType status,
@@ -63,6 +70,7 @@ public List<Category> getCategories() {
6370

6471
@Override
6572
public ProductResponseDTO.Detail getProductDetail(Long productId, Pageable pageable) {
73+
Member member = validateMember();
6674
Product product = getProduct(productId);
6775
List<ImageResponseDTO> imagePaths =
6876
productImageRepository.findAllByProduct(product).stream().map(ProductConverter::toImageDTO).toList();
@@ -71,17 +79,26 @@ public ProductResponseDTO.Detail getProductDetail(Long productId, Pageable pagea
7179
Page<Review> reviewPage = reviewRepository.findAllByProductPurchaseLink(productId,pageable);
7280

7381
ProductResponseDTO.Single detail = ProductConverter.toSingleDTO(product, reviewPage.getTotalElements(), imagePaths, purchaseLinkList);
74-
List<LimitedReviewResponseDTO.Single> reviewList = reviewPage.stream().map(ReviewConverter::toLimitedSingleDto).toList();
82+
List<LimitedReviewResponseDTO.Single> reviewList = reviewPage.stream().map(review -> {
83+
Boolean isLiked = likeRepository.existsByMemberAndReview(member, review);
84+
return ReviewConverter.toLimitedSingleDto(review, isLiked);
85+
}).toList();
86+
7587
LimitedReviewResponseDTO.ReviewPaging reviewPaging = ReviewConverter.toLimitedPagingDTO(reviewPage,reviewList);
7688

7789
return ProductConverter.toDetailDTO(detail,reviewPaging);
7890
}
7991

8092
@Override
8193
public LimitedReviewResponseDTO.ReviewPaging getReviewsByProductId(Long productId, Pageable pageable) {
94+
Member member = validateMember();
8295
Page<Review> reviewPage = reviewRepository.findAllByProductPurchaseLink(productId,pageable);
8396

84-
List<LimitedReviewResponseDTO.Single> reviewList = reviewPage.stream().map(ReviewConverter::toLimitedSingleDto).toList();
97+
List<LimitedReviewResponseDTO.Single> reviewList = reviewPage.stream().map(review -> {
98+
Boolean isLiked = likeRepository.existsByMemberAndReview(member, review);
99+
return ReviewConverter.toLimitedSingleDto(review, isLiked);
100+
}).toList();
101+
85102
return ReviewConverter.toLimitedPagingDTO(reviewPage,reviewList);
86103
}
87104
@Transactional
@@ -113,5 +130,10 @@ private Product getProduct(Long productId){
113130
return productRepository.findById(productId).orElseThrow(()->new GeneralException(ErrorStatus.PRODUCT_NOT_FOUND));
114131
}
115132

133+
private Member validateMember() {
134+
return memberRepository.findByEmail(SecurityUtil.getEmail()).orElseThrow(
135+
() -> new MemberException(ErrorStatus.MEMBER_NOT_FOUND));
136+
}
137+
116138

117139
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.koview.koview_server.purchaseLink.domain;
2+
3+
import com.koview.koview_server.query.domain.Query;
4+
import jakarta.persistence.*;
5+
import lombok.*;
6+
7+
@Entity
8+
@Getter
9+
@Setter
10+
@Builder
11+
@AllArgsConstructor
12+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
13+
public class QueryPurchaseLink {
14+
@Id
15+
@Column(name = "query_purchase_link_id")
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private Long id;
18+
19+
@ManyToOne
20+
@JoinColumn(name = "purchase_link_id", nullable = true)
21+
private PurchaseLink purchaseLink;
22+
23+
@ManyToOne
24+
@JoinColumn(name = "query_id", nullable = false)
25+
private Query query;
26+
27+
public void setQuery(Query query){
28+
if(this.query != null)
29+
this.query.getQueryPurchaseLinkList().remove(this);
30+
this.query=query;
31+
this.query.getQueryPurchaseLinkList().add(this);
32+
}
33+
}

0 commit comments

Comments
 (0)