Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

구독 여부 반환 API 작성 #3

Merged
merged 2 commits into from
Dec 22, 2023
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
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ dependencies {
testImplementation "org.junit.jupiter:junit-jupiter:5.8.1"
testImplementation "org.testcontainers:junit-jupiter:1.16.3"

implementation group: 'io.github.lotteon-maven', name: 'blooming-blooms-utils', version: '202312201005'
implementation group: 'io.github.lotteon-maven', name: 'blooming-blooms-utils', version: '202312201208'
}

dependencyManagement {
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/kr/bb/orderquery/client/ProductFeignClient.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package kr.bb.orderquery.client;

import bloomingblooms.domain.product.ProductInfoDto;
import bloomingblooms.response.CommonResponse;
import kr.bb.orderquery.client.dto.ProductInfoDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "product-service")
public interface ProductFeignClient {
@GetMapping
CommonResponse<ProductInfoDto> getProductInfo(String productId);
@GetMapping("/client/product/{productId}")
CommonResponse<ProductInfoDto> getProductInfo(@PathVariable(name="productId") String productId);
}
6 changes: 2 additions & 4 deletions src/main/java/kr/bb/orderquery/client/StoreFeignClient.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package kr.bb.orderquery.client;

import bloomingblooms.domain.store.StoreNameAndAddressDto;
import bloomingblooms.response.CommonResponse;
import kr.bb.orderquery.client.dto.StoreInfoDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "store-service")
public interface StoreFeignClient {
@GetMapping
CommonResponse<String> getStoreAddress(Long storeId);

@GetMapping("/client/stores/{storeId}/info")
CommonResponse<StoreInfoDto> getStoreInfo(@PathVariable(name = "storeId") Long storeId);
CommonResponse<StoreNameAndAddressDto> getStoreNameAndAddress(@PathVariable(name = "storeId") Long storeId);
}
17 changes: 0 additions & 17 deletions src/main/java/kr/bb/orderquery/client/dto/ProductInfoDto.java

This file was deleted.

15 changes: 0 additions & 15 deletions src/main/java/kr/bb/orderquery/client/dto/StoreInfoDto.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

import bloomingblooms.domain.StatusChangeDto;
import bloomingblooms.domain.pickup.PickupCreateDto;
import bloomingblooms.domain.product.ProductInfoDto;
import bloomingblooms.domain.store.StoreNameAndAddressDto;
import kr.bb.orderquery.client.ProductFeignClient;
import kr.bb.orderquery.client.StoreFeignClient;
import kr.bb.orderquery.client.dto.ProductInfoDto;
import kr.bb.orderquery.client.dto.StoreInfoDto;
import kr.bb.orderquery.domain.pickup.controller.response.PickupsForDateResponse;
import kr.bb.orderquery.domain.pickup.controller.response.PickupsInMypageResponse;
import kr.bb.orderquery.domain.pickup.dto.PickupDetailDto;
Expand All @@ -28,7 +28,7 @@ public class PickupFacade {
@KafkaListener(topics = "pickup-create", groupId = "pick-create")
public void create(PickupCreateDto pickupCreateDto) {
Long storeId = pickupCreateDto.getStoreId();
StoreInfoDto storeInfo = storeFeignClient.getStoreInfo(storeId).getData();
StoreNameAndAddressDto storeInfo = storeFeignClient.getStoreNameAndAddress(storeId).getData();
String productId = pickupCreateDto.getProductId();
ProductInfoDto productInfo = productFeignClient.getProductInfo(productId).getData();
pickupService.createPickup(storeInfo, productInfo, pickupCreateDto);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package kr.bb.orderquery.domain.pickup.handler;

import bloomingblooms.domain.pickup.PickupCreateDto;
import kr.bb.orderquery.client.dto.ProductInfoDto;
import kr.bb.orderquery.client.dto.StoreInfoDto;
import bloomingblooms.domain.store.StoreNameAndAddressDto;
import bloomingblooms.domain.product.ProductInfoDto;
import kr.bb.orderquery.domain.pickup.entity.Pickup;
import kr.bb.orderquery.domain.pickup.repository.PickupRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -19,7 +19,7 @@
public class PickupCreator {
private final PickupRepository pickupRepository;

public Pickup create(StoreInfoDto storeAddress, ProductInfoDto productInfoDto, PickupCreateDto pickupCreateDto) {
public Pickup create(StoreNameAndAddressDto storeAddress, ProductInfoDto productInfoDto, PickupCreateDto pickupCreateDto) {
Pickup pickup = Pickup.builder()
.pickupReservationId(pickupCreateDto.getPickupReservationId())
.pickupDateTime(combineDateAndTime(pickupCreateDto.getPickupDate(), pickupCreateDto.getPickupTime()))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package kr.bb.orderquery.domain.pickup.service;

import bloomingblooms.domain.pickup.PickupCreateDto;
import kr.bb.orderquery.client.dto.ProductInfoDto;
import kr.bb.orderquery.client.dto.StoreInfoDto;
import bloomingblooms.domain.product.ProductInfoDto;
import bloomingblooms.domain.store.StoreNameAndAddressDto;
import kr.bb.orderquery.domain.pickup.dto.PickupDetailDto;
import kr.bb.orderquery.domain.pickup.dto.PickupsForDateDto;
import kr.bb.orderquery.domain.pickup.dto.PickupsInMypageDto;
Expand All @@ -24,7 +24,7 @@ public class PickupService {
private final PickupReader pickupReader;
private final PickupManager pickupManager;

public Pickup createPickup(StoreInfoDto storeAddress, ProductInfoDto productInfo, PickupCreateDto pickupCreateDto) {
public Pickup createPickup(StoreNameAndAddressDto storeAddress, ProductInfoDto productInfo, PickupCreateDto pickupCreateDto) {
return pickupCreator.create(storeAddress, productInfo, pickupCreateDto);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
public class SubscriptionController {
private final SubscriptionFacade subscriptionFacade;

@GetMapping("store-subscriptions")
@GetMapping("/store-subscriptions")
public CommonResponse<SubscriptionsForMypageResponse> subscriptionsForMypage(@RequestHeader(value = "userId") Long userId) {
return CommonResponse.success(subscriptionFacade.getSubscriptionsOfUser(userId));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package kr.bb.orderquery.domain.subscription.controller;

import bloomingblooms.response.CommonResponse;
import kr.bb.orderquery.domain.subscription.facade.SubscriptionFacade;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@CrossOrigin(origins = "*")
@RestController
@RequiredArgsConstructor
@RequestMapping("/client/order-query/subs")
public class SubscriptionFeignController {
private final SubscriptionFacade subscriptionFacade;

@PostMapping("/lists")
public CommonResponse<Map<Long,Boolean>> getSubscriptions(
@RequestHeader(value = "userId") Long userId, @RequestBody List<Long> storeIds) {
return CommonResponse.success(subscriptionFacade.getSubscriptionStatuses(userId, storeIds));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import bloomingblooms.domain.subscription.SubscriptionCreateDto;
import bloomingblooms.domain.subscription.SubscriptionDateDto;
import kr.bb.orderquery.client.ProductFeignClient;
import kr.bb.orderquery.client.dto.ProductInfoDto;
import bloomingblooms.domain.product.ProductInfoDto;
import kr.bb.orderquery.domain.subscription.controller.response.SubscriptionsForDateResponse;
import kr.bb.orderquery.domain.subscription.controller.response.SubscriptionsForMypageResponse;
import kr.bb.orderquery.domain.subscription.dto.SubscriptionDetailDto;
Expand All @@ -17,6 +17,9 @@
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
@RequiredArgsConstructor
public class SubscriptionFacade {
Expand Down Expand Up @@ -62,4 +65,8 @@ public SubscriptionDetailDto getSubscriptionDetail(String subscriptionId) {
return subscriptionService.getSubscription(subscriptionId);
}

public Map<Long,Boolean> getSubscriptionStatuses(Long userId, List<Long> storeIds) {
return subscriptionService.getSubscriptionStatuses(userId, storeIds);
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package kr.bb.orderquery.domain.subscription.handler;

import bloomingblooms.domain.subscription.SubscriptionCreateDto;
import kr.bb.orderquery.client.dto.ProductInfoDto;
import bloomingblooms.domain.product.ProductInfoDto;
import kr.bb.orderquery.domain.subscription.entity.Subscription;
import kr.bb.orderquery.domain.subscription.repository.SubscriptionRepository;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package kr.bb.orderquery.domain.subscription.service;

import bloomingblooms.domain.product.ProductInfoDto;
import bloomingblooms.domain.subscription.SubscriptionCreateDto;
import kr.bb.orderquery.client.dto.ProductInfoDto;
import kr.bb.orderquery.domain.subscription.dto.SubscriptionDetailDto;
import kr.bb.orderquery.domain.subscription.dto.SubscriptionForDateDto;
import kr.bb.orderquery.domain.subscription.dto.SubscriptionForUserDto;
Expand All @@ -14,6 +14,7 @@

import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -47,7 +48,6 @@ public SubscriptionDetailDto getSubscription(String subscriptionId) {
return SubscriptionDetailDto.fromEntity(subscriptionReader.read(subscriptionId));
}


public void updateSubscriptionDate(String subscriptionId, LocalDate nextDeliveryDate, LocalDate nextPaymentDate) {
Subscription subscription = subscriptionReader.read(subscriptionId);
subscriptionManager.updateNextDeliveryDate(subscription, nextDeliveryDate, nextPaymentDate);
Expand All @@ -63,4 +63,12 @@ public void updateReviewStatus(String subscriptionId, String reviewStatus) {
subscriptionManager.changeReviewStatus(subscription, reviewStatus);
}

public Map<Long,Boolean> getSubscriptionStatuses(Long userId, List<Long> storeIds) {
List<Long> subscriptionIds = subscriptionReader.readByUserId(userId)
.stream()
.map(Subscription::getStoreId)
.toList();

return storeIds.stream().collect(Collectors.toMap(id -> id, subscriptionIds::contains));
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package kr.bb.orderquery.domain.pickup.service;

import bloomingblooms.domain.pickup.PickupCreateDto;
import bloomingblooms.domain.store.StoreNameAndAddressDto;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
import com.amazonaws.services.dynamodbv2.model.Projection;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
import com.amazonaws.services.dynamodbv2.util.TableUtils;
import kr.bb.orderquery.AbstractContainer;
import kr.bb.orderquery.client.dto.ProductInfoDto;
import kr.bb.orderquery.client.dto.StoreInfoDto;
import bloomingblooms.domain.product.ProductInfoDto;
import kr.bb.orderquery.domain.pickup.dto.PickupDetailDto;
import kr.bb.orderquery.domain.pickup.dto.PickupsForDateDto;
import kr.bb.orderquery.domain.pickup.dto.PickupsInMypageDto;
Expand All @@ -21,8 +21,6 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.test.context.ActiveProfiles;

import java.time.LocalDate;
Expand Down Expand Up @@ -71,7 +69,7 @@ void deleteTable() {
@Test
void createPickup(){
// given
StoreInfoDto storeInfo = StoreInfoDto.builder()
StoreNameAndAddressDto storeInfo = StoreNameAndAddressDto.builder()
.storeName("가게명")
.storeAddress("가게주소")
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
import com.amazonaws.services.dynamodbv2.util.TableUtils;
import kr.bb.orderquery.AbstractContainer;
import kr.bb.orderquery.client.dto.ProductInfoDto;
import bloomingblooms.domain.product.ProductInfoDto;
import kr.bb.orderquery.domain.subscription.dto.SubscriptionDetailDto;
import kr.bb.orderquery.domain.subscription.dto.SubscriptionForDateDto;
import kr.bb.orderquery.domain.subscription.dto.SubscriptionForUserDto;
Expand All @@ -26,6 +26,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import static org.assertj.core.api.Assertions.assertThat;
Expand Down Expand Up @@ -141,6 +142,28 @@ void getSubscriptionDetail() {

}

@DisplayName("해당 유저의 가게 구독여부를 반환한다")
@Test
void getSubscriptionStatuses() {
// given
Long userId = 1L;

Subscription s1 = createSubscriptionWithUserIdAndStoreId(userId, 1L);
Subscription s2 = createSubscriptionWithUserIdAndStoreId(userId, 2L);
subscriptionRepository.saveAll(List.of(s1,s2));

List<Long> storeIds = List.of(1L,2L,3L);

// when
Map<Long, Boolean> result = subscriptionService.getSubscriptionStatuses(userId, storeIds);

// then
assertThat(result.get(1L)).isTrue();
assertThat(result.get(2L)).isTrue();
assertThat(result.get(3L)).isFalse();
}





Expand All @@ -149,6 +172,7 @@ private ProductInfoDto createProductInfoDto() {
.productName("장미 바구니")
.productThumbnail("https://image_url")
.unitPrice(1_000L)
.storeId(1L)
.build();
}

Expand Down Expand Up @@ -207,6 +231,33 @@ private Subscription createSubscriptionWithUserId(Long userId){
.isUnsubscribed(false)
.build();
}
private Subscription createSubscriptionWithUserIdAndStoreId(Long userId, Long storeId){
return Subscription.builder()
.subscriptionId(UUID.randomUUID().toString())
.userId(userId)
.storeId(storeId)
.subscriptionCode("구독 코드")
.productName("장미 바구니")
.productThumbnail("https://image_url")
.unitPrice(1_000L)
.quantity(10)
.ordererName("주문자 명")
.ordererPhoneNumber("주문자 전화번호")
.ordererEmail("주문자 이메일")
.recipientName("수령자 명")
.recipientPhoneNumber("수령자 전화번호")
.deliveryAddress("배송지")
.paymentDateTime(LocalDateTime.now())
.nextDeliveryDate(LocalDate.now().plusMonths(1).toString())
.nextPaymentDate(LocalDate.now().plusMonths(1))
.totalOrderPrice(10_010L)
.totalDiscountPrice(10L)
.deliveryPrice(100L)
.actualPrice(10_200L)
.reviewStatus("REVIEW_READY")
.isUnsubscribed(false)
.build();
}

private Subscription createSubscriptionWithId(String subscriptionId){
return Subscription.builder()
Expand Down
Loading