Skip to content

Commit

Permalink
Merge pull request #11 from lotteon2/refactor
Browse files Browse the repository at this point in the history
Refactor
  • Loading branch information
binarywoo27 authored Jan 11, 2024
2 parents 7d41318 + 3b0f748 commit 14c7326
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 16 deletions.
13 changes: 12 additions & 1 deletion src/main/java/kr/bb/orderquery/domain/pickup/entity/Pickup.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.amazonaws.services.dynamodbv2.datamodeling.*;
import kr.bb.orderquery.config.DynamoDbConfig;
import lombok.*;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.annotation.Id;

import java.time.LocalDateTime;
Expand All @@ -13,7 +14,7 @@
@NoArgsConstructor
@AllArgsConstructor
@DynamoDBTable(tableName="PickupReservation")
public class Pickup {
public class Pickup implements Comparable<Pickup>{
@Id
@DynamoDBHashKey(attributeName = "pickup_reservation_id")
private String pickupReservationId;
Expand Down Expand Up @@ -92,4 +93,14 @@ public class Pickup {
@DynamoDBAttribute(attributeName = "product_id")
private String productId;

/**
* 픽업일이 동일하다면 픽업시간 내림차순 정렬
* 그렇지 않다면 픽업일시 기준 정렬
*/
@Override
public int compareTo(@NotNull Pickup o) {
return (this.getPickupDate().equals(o.getPickupDate())) ?
o.pickupTime.compareTo(this.pickupTime) :
this.getPickupDateTime().compareTo(o.getPickupDateTime());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.util.List;

@Component
Expand Down Expand Up @@ -66,7 +67,8 @@ public void updateReviewStatus(@Payload String message, Acknowledgment ack) thro
}

public PickupsInMypageResponse getPickupsOfUser(Long userId, Pageable pageable) {
return PickupsInMypageResponse.from(pickupService.getPickupsForUser(userId, pageable));
LocalDate now = LocalDate.now();
return PickupsInMypageResponse.from(pickupService.getPickupsForUser(userId, pageable, now));
}

public PickupsForDateResponse getPickupsForDate(Long storeId, String pickupDate) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public Pickup create(StoreNameAndAddressDto storeAddress, PickupCreateDto pickup
.reservationStatus(pickupCreateDto.getReservationStatus())
.reviewStatus(pickupCreateDto.getReviewStatus())
.cardStatus(pickupCreateDto.getCardStatus())
.productId(pickupCreateDto.getProductId())
.build();

return pickupRepository.save(pickup);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.Comparator;
import java.util.List;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static java.util.stream.Collectors.partitioningBy;

@Service
@RequiredArgsConstructor
Expand All @@ -30,9 +33,14 @@ public Pickup createPickup(StoreNameAndAddressDto storeAddress, PickupCreateDto
return pickupCreator.create(storeAddress, pickupCreateDto);
}

public Page<PickupsInMypageDto> getPickupsForUser(Long userId, Pageable pageable) {


public Page<PickupsInMypageDto> getPickupsForUser(Long userId, Pageable pageable, LocalDate now) {
Page<Pickup> pickups = pickupReader.readByUserId(userId, pageable);
List<PickupsInMypageDto> pickupsInMyPageDtos = pickups.stream()
List<Pickup> contents = pickups.getContent();
List<Pickup> sortedPickups = sortAroundNow(contents, now);

List<PickupsInMypageDto> pickupsInMyPageDtos = sortedPickups.stream()
.map(PickupsInMypageDto::fromEntity)
.collect(Collectors.toList());
return new PageImpl<>(pickupsInMyPageDtos, pickups.getPageable(), pickups.getTotalElements());
Expand Down Expand Up @@ -69,5 +77,21 @@ public void updateReservationStatus(String subscriptionId, String reservationSta
pickupManager.changeReservationStatus(pickup, reservationStatus);
}

/*
* now포함 이후의 값은 오름차순, now이전값은 내림차순으로 정렬
* 오늘이 13일이고 데이터가 [11,12,13,14,15,16]이라면
* [13,14,15,16,12,11]로 정렬됩니다
*/
private List<Pickup> sortAroundNow(List<Pickup> pickups, LocalDate now) {
Map<Boolean, List<Pickup>> collect = pickups.stream()
.collect(partitioningBy(pickup -> pickup.getPickupDateTime().toLocalDate().isBefore(now)));
List<Pickup> afterOrEqualFromNow = collect.get(false);
Collections.sort(afterOrEqualFromNow);
List<Pickup> beforeFromNow = collect.get(true);
Collections.sort(beforeFromNow,Collections.reverseOrder());
return Stream.of(afterOrEqualFromNow, beforeFromNow)
.flatMap(Collection::stream)
.collect(Collectors.toList());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -118,34 +118,39 @@ void getPickupsOfUser() {
pickupRepository.saveAll(List.of(p1,p2,p3,p4));

// when
List<PickupsInMypageDto> pickupsForUser = pickupService.getPickupsForUser(userId, PageRequest.of(0,5))
List<PickupsInMypageDto> pickupsForUser = pickupService.getPickupsForUser(userId, PageRequest.of(0,5), LocalDate.now())
.getContent();

// then
assertThat(pickupsForUser).hasSize(2);

}

@DisplayName("특정 유저의 픽업예약 목록은 픽업일 기준 내림차순으로 정렬되어 있다")
@DisplayName("특정 유저의 픽업예약 목록은 오늘 이후 예약들이 오름차순으로 먼저 등장한 뒤 오늘 이전 예약들이 내림차순으로 등장한다")
@Test
void pickupsInMypageAreSortedWithDesc() {
// given
Long userId = 1L;
LocalDateTime now = LocalDateTime.of(LocalDate.of(2023,12,31), LocalTime.now());
Pickup p1 = createPickupWithPickupDate(userId, now);
Pickup p2 = createPickupWithPickupDate(userId, now.plusDays(2));
Pickup p3 = createPickupWithPickupDate(userId, now.minusDays(2));
pickupRepository.saveAll(List.of(p1,p2,p3));
Pickup p1 = createPickupWithPickupDate(userId, now.minusDays(2));
Pickup p2 = createPickupWithPickupDate(userId, now.minusDays(1));
Pickup p3 = createPickupWithPickupDate(userId, now);
Pickup p4 = createPickupWithPickupDate(userId, now.plusDays(1));
Pickup p5 = createPickupWithPickupDate(userId, now.plusDays(2));
pickupRepository.saveAll(List.of(p1,p2,p3,p4,p5));

// when
List<PickupsInMypageDto> pickupsForUser = pickupService.getPickupsForUser(userId, PageRequest.of(0,5))
List<PickupsInMypageDto> pickupsForUser = pickupService.getPickupsForUser(userId, PageRequest.of(0,5),now.toLocalDate())
.getContent();

// then
assertThat(pickupsForUser).hasSize(3)
assertThat(pickupsForUser).hasSize(5)
.extracting("pickupDate")
.containsExactly(now.toLocalDate().plusDays(2).toString(),
.containsExactly(
now.toLocalDate().toString(),
now.toLocalDate().plusDays(1).toString(),
now.toLocalDate().plusDays(2).toString(),
now.toLocalDate().minusDays(1).toString(),
now.toLocalDate().minusDays(2).toString()
);

Expand All @@ -163,7 +168,7 @@ void pickupsForUserAreSortedWithPickupTimeDesc() {
pickupRepository.saveAll(List.of(p1,p2,p3));

// when
List<PickupsInMypageDto> pickupsForUser = pickupService.getPickupsForUser(userId,PageRequest.of(0,5))
List<PickupsInMypageDto> pickupsForUser = pickupService.getPickupsForUser(userId,PageRequest.of(0,5),LocalDate.now())
.getContent();

// then
Expand Down

0 comments on commit 14c7326

Please sign in to comment.