Skip to content

Commit

Permalink
Fix: 찜하기 응답 객체 페이징 (#88)
Browse files Browse the repository at this point in the history
  • Loading branch information
flowerdonk authored Aug 9, 2023
1 parent 1fddfbe commit 2065f93
Show file tree
Hide file tree
Showing 7 changed files with 75 additions and 23 deletions.
7 changes: 5 additions & 2 deletions src/main/java/com/anywayclear/controller/AlarmController.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import com.anywayclear.service.AlarmService;

import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

Expand Down Expand Up @@ -55,7 +58,7 @@ public ResponseEntity<AlarmResponseList> getSubscribeAlarmList(@PathVariable Str
return ResponseEntity.ok(alarmService.getSubscribeAlarmList(memberId));
}
@GetMapping("/{memberId}/dibs")
public ResponseEntity<AlarmResponseList> getDibAlarmList(@PathVariable String memberId) {
return ResponseEntity.ok(alarmService.getDibAlarmList(memberId));
public ResponseEntity<AlarmResponseList> getDibAlarmList(@PathVariable String memberId, @PageableDefault(size = 10, sort = "id", direction = Sort.Direction.DESC) Pageable pageable) {
return ResponseEntity.ok(alarmService.getDibAlarmList(memberId, pageable));
}
}
7 changes: 5 additions & 2 deletions src/main/java/com/anywayclear/controller/DibController.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import com.anywayclear.dto.response.DibResponseList;
import com.anywayclear.dto.response.IsDibResponse;
import com.anywayclear.service.DibService;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
Expand All @@ -28,8 +31,8 @@ public ResponseEntity<Void> createDib(@Valid @RequestBody DibCreateRequest reque
}

@GetMapping
public ResponseEntity<DibResponseList> getDibList(@RequestParam(name = "userId") String userId) {
return ResponseEntity.ok(dibService.getDibList(userId));
public ResponseEntity<DibResponseList> getDibList(@RequestParam(name = "userId") String userId, @PageableDefault(size = 10, sort = "id", direction = Sort.Direction.DESC) Pageable pageable) {
return ResponseEntity.ok(dibService.getDibList(userId, pageable));
}

@GetMapping("/{produce-id}/member")
Expand Down
45 changes: 37 additions & 8 deletions src/main/java/com/anywayclear/dto/response/DibResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,48 @@
@Getter
@Setter
public class DibResponse {
private Member consumer;
private Produce produce;
// private Member consumer;
// private Produce produce;
//
// @Builder
// public DibResponse(Member consumer, Produce produce) {
// this.consumer = consumer;
// this.produce = produce;
// }
//
// public static DibResponse toResponse(Dib dib) {
// return DibResponse.builder()
// .consumer(dib.getConsumer())
// .produce(dib.getProduce())
// .build();
// }

// 이미지 url, 판매자이름, 판매자 식별 (닉네임 or ID 판매자 타인페이지 이동용), 제목, 경매 ID, 시작금액
private Long id;
private String title;
private int startPrice;
private String image;
private String sellerName;
private String userId;

@Builder
public DibResponse(Member consumer, Produce produce) {
this.consumer = consumer;
this.produce = produce;
public DibResponse(Long id, String title, int startPrice, String image, String sellerName, String userId) {
this.id = id;
this.title = title;
this.startPrice = startPrice;
this.image = image;
this.sellerName = sellerName;
this.userId = userId;
}

public static DibResponse toResponse(Dib dib) {
public static DibResponse toResponse(Produce produce) {
return DibResponse.builder()
.consumer(dib.getConsumer())
.produce(dib.getProduce())
.id(produce.getId())
.title(produce.getName())
.startPrice(produce.getStartPrice())
.image(produce.getImage())
.sellerName(produce.getSeller().getNickname())
.userId(produce.getSeller().getUserId())
.build();
}
}
14 changes: 10 additions & 4 deletions src/main/java/com/anywayclear/dto/response/DibResponseList.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,27 @@
package com.anywayclear.dto.response;

import com.anywayclear.entity.Dib;
import com.anywayclear.entity.Produce;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.stream.Collectors;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class DibResponseList {
private List<DibResponse> dibResponseList;
private Page<DibResponse> dibResponseList;

public DibResponseList(final List<Dib> dibList) {
this.dibResponseList = dibList.stream()
public DibResponseList(final List<Produce> dibList, Pageable pageable) {
this.dibResponseList = new PageImpl<>(dibList.stream()
.map(DibResponse::toResponse)
.collect(Collectors.toList());
.collect(Collectors.toList()),
pageable,
dibList.size());
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/anywayclear/repository/DibRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.anywayclear.entity.Dib;
import com.anywayclear.entity.Member;
import com.anywayclear.entity.Produce;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/com/anywayclear/service/AlarmService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.anywayclear.entity.Alarm;
import com.anywayclear.repository.SSEInMemoryRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
Expand Down Expand Up @@ -146,14 +147,14 @@ public AlarmResponseList getSubscribeAlarmList(String memberId) { // 해당 유
return new AlarmResponseList(alarmList);
}

public AlarmResponseList getDibAlarmList(String memberId) { // 해당 유저의 알림 리스트 불러오기
public AlarmResponseList getDibAlarmList(String memberId, Pageable pageable) { // 해당 유저의 알림 리스트 불러오기
// 패턴 매칭 사용 -> member:memberId:alarm:*

// [1] 유저의 찜 목록 불러오기
DibResponseList dibResponseList = dibService.getDibList(memberId);
DibResponseList dibResponseList = dibService.getDibList(memberId, pageable);
Set<String> keys = new HashSet<>(); // Set을 사용하여 중복된 값 제거
for (DibResponse response : dibResponseList.getDibResponseList()) {
String produce = response.getProduce().getId().toString(); // Response 객체에서 sender 필드 값을 추출
String produce = response.getId().toString(); // Response 객체에서 sender 필드 값을 추출
keys.add(produce); // keys 집합에 sender 값 추가
}

Expand Down
16 changes: 12 additions & 4 deletions src/main/java/com/anywayclear/service/DibService.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,14 @@
import com.anywayclear.repository.DibRepository;
import com.anywayclear.repository.MemberRepository;
import com.anywayclear.repository.ProduceRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

import static com.anywayclear.exception.ExceptionCode.INVALID_MEMBER;
import static com.anywayclear.exception.ExceptionCode.INVALID_PRODUCE_ID;
Expand All @@ -40,13 +45,16 @@ public Long createDib(DibCreateRequest request) {

public DibResponse getDib(Long id) {
Dib dib = dibRepository.findById(id).orElseThrow(() -> new RuntimeException("아이디가 없습니다."));
return DibResponse.toResponse(dib);
return DibResponse.toResponse(dib.getProduce());
}

public DibResponseList getDibList(String userId) { // 찜 중인 농산물 리스트 반환
public DibResponseList getDibList(String userId, Pageable pageable) { // 찜 중인 농산물 리스트 반환
Member member = memberRepository.findByUserId(userId).orElseThrow(() -> new RuntimeException("해당 userId의 유저가 없습니다."));
List<Dib> dibList = dibRepository.findAllByConsumer(member);
return new DibResponseList(dibList);
List<Produce> dibList = dibRepository.findAllByConsumer(member)
.stream()
.map(Dib::getProduce)
.collect(Collectors.toList());
return new DibResponseList(dibList, pageable);
}

public IsDibResponse getIsDib(String userId, long produceId) {
Expand Down

0 comments on commit 2065f93

Please sign in to comment.