Skip to content

Commit

Permalink
Merge pull request #3 from lotteon2/feign
Browse files Browse the repository at this point in the history
구독 여부 반환 API 작성
  • Loading branch information
binarywoo27 authored Dec 22, 2023
2 parents c584420 + cb5b23f commit 4706d76
Show file tree
Hide file tree
Showing 15 changed files with 114 additions and 60 deletions.
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

0 comments on commit 4706d76

Please sign in to comment.