From cdf90072b9e2d719bd76c6cecd041f8391f0ca7f Mon Sep 17 00:00:00 2001 From: kimscott Date: Tue, 12 Nov 2019 15:53:54 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=20order=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=ED=95=B8=EB=93=A4=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/template/Application.java | 2 ++ src/main/java/com/example/template/Order.java | 20 +++++++++++++------ src/main/resources/application.yml | 3 +-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/example/template/Application.java b/src/main/java/com/example/template/Application.java index 7c8f0e9..70fad48 100644 --- a/src/main/java/com/example/template/Application.java +++ b/src/main/java/com/example/template/Application.java @@ -5,6 +5,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; @SpringBootApplication @EnableBinding(KafkaProcessor.class) diff --git a/src/main/java/com/example/template/Order.java b/src/main/java/com/example/template/Order.java index 7af31d2..b626a33 100644 --- a/src/main/java/com/example/template/Order.java +++ b/src/main/java/com/example/template/Order.java @@ -3,18 +3,18 @@ package com.example.template; import com.example.template.config.kafka.KafkaProcessor; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.apache.kafka.clients.producer.ProducerRecord; import org.springframework.beans.BeanUtils; import org.springframework.core.env.Environment; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.kafka.core.KafkaTemplate; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.MimeTypeUtils; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.client.RestTemplate; import javax.persistence.*; @@ -39,7 +39,8 @@ public class Order { * 주문이 들어옴 */ @PostPersist - private void publishOrderPlaced() { + @ExceptionHandler(OrderException.class) + private void publishOrderPlaced(){ RestTemplate restTemplate = Application.applicationContext.getBean(RestTemplate.class); Environment env = Application.applicationContext.getEnvironment(); @@ -52,7 +53,7 @@ public class Order { if("true".equalsIgnoreCase(env.getProperty("checkStock"))){ // 1. 주문에 대한 상품 조회 - API - String productUrl = env.getProperty("productUrl") + "/products/" + productId; + String productUrl = env.getProperty("productUrl") + "/product/" + productId; ResponseEntity productEntity = restTemplate.getForEntity(productUrl, String.class); JsonParser parser = new JsonParser(); @@ -62,7 +63,14 @@ public class Order { this.setProductName(jsonObject.get("name").getAsString()); if( jsonObject.get("stock").getAsInt() < getQuantity()){ - throw new RuntimeException("No Available stock!"); + throw new OrderException("No Available stock!"); + } + }else{ + ProductRepository productRepository = Application.applicationContext.getBean(ProductRepository.class); + Optional productOptional = productRepository.findById(productId); + Product product = productOptional.get(); + if( product.getStock() < getQuantity()){ + throw new OrderException("No Available stock!"); } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7b2af96..555b05d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -14,7 +14,6 @@ spring: brokers: localhost:9092 streams: binder: - configuration: default: key: serde: org.apache.kafka.common.serialization.Serdes$StringSerde @@ -22,7 +21,7 @@ spring: serde: org.apache.kafka.common.serialization.Serdes$StringSerde bindings: event-in: - group: orders + group: orders${random.value} destination: eventTopic contentType: application/json event-out: