From d62112c4bb64afcf7bdc96c92dd873a8fabc9397 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Fri, 15 Mar 2024 22:55:34 +0900 Subject: [PATCH 001/147] feat: object mapper custom --- .../mybooks/front/config/RedisConfig.java | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/main/java/store/mybooks/front/config/RedisConfig.java b/src/main/java/store/mybooks/front/config/RedisConfig.java index 734cc232..461016f7 100644 --- a/src/main/java/store/mybooks/front/config/RedisConfig.java +++ b/src/main/java/store/mybooks/front/config/RedisConfig.java @@ -33,7 +33,6 @@ @EnableCaching public class RedisConfig { private final RedisProperties redisProperties; - private final ObjectMapper objectMapper; @Bean public RedisConnectionFactory redisConnectionFactory() { @@ -59,26 +58,27 @@ public RedisTemplate redisTemplate() { return redisTemplate; } -// @Bean -// public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) { -// PolymorphicTypeValidator typeValidator = BasicPolymorphicTypeValidator -// .builder() -// .allowIfSubType(Object.class) -// .build(); -// -// objectMapper.activateDefaultTyping(typeValidator, ObjectMapper.DefaultTyping.NON_FINAL); -// -// GenericJackson2JsonRedisSerializer redisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper); -// -// RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration -// .defaultCacheConfig() -// .disableCachingNullValues() -// .serializeKeysWith(RedisSerializationContext.SerializationPair -// .fromSerializer(new StringRedisSerializer())) -// .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)); -// -// return RedisCacheManager.builder(redisConnectionFactory) -// .cacheDefaults(cacheConfiguration) -// .build(); -// } + @Bean + public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) { + PolymorphicTypeValidator typeValidator = BasicPolymorphicTypeValidator + .builder() + .allowIfSubType(Object.class) + .build(); + ObjectMapper objectMapper = new ObjectMapper(); + + objectMapper.activateDefaultTyping(typeValidator, ObjectMapper.DefaultTyping.NON_FINAL); + + GenericJackson2JsonRedisSerializer redisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper); + + RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration + .defaultCacheConfig() + .disableCachingNullValues() + .serializeKeysWith(RedisSerializationContext.SerializationPair + .fromSerializer(new StringRedisSerializer())) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)); + + return RedisCacheManager.builder(redisConnectionFactory) + .cacheDefaults(cacheConfiguration) + .build(); + } } From b0f563c6f7caddcef596da9cc0f8c44d8cb8930c Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 04:01:11 +0900 Subject: [PATCH 002/147] =?UTF-8?q?feat:=20dto=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/controller/OrderController.java | 7 + .../order/dto/request/BookOrderRequest.java | 25 + .../order/dto/request/OrderInfoRequest.java | 29 ++ .../payment/controller/PayController.java | 2 + .../templates/assets/js/order/order.js | 13 +- src/main/resources/templates/checkout.html | 429 +++++++++--------- src/main/resources/templates/test.html | 16 + 7 files changed, 300 insertions(+), 221 deletions(-) create mode 100644 src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java create mode 100644 src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java create mode 100644 src/main/resources/templates/test.html diff --git a/src/main/java/store/mybooks/front/order/controller/OrderController.java b/src/main/java/store/mybooks/front/order/controller/OrderController.java index b65e7656..5ebc6339 100644 --- a/src/main/java/store/mybooks/front/order/controller/OrderController.java +++ b/src/main/java/store/mybooks/front/order/controller/OrderController.java @@ -16,6 +16,7 @@ import store.mybooks.front.cart.service.CartNonUserService; import store.mybooks.front.cart.service.CartUserService; import store.mybooks.front.order.dto.request.BookOrderDirectRequest; +import store.mybooks.front.order.dto.request.BookOrderRequest; import store.mybooks.front.order.service.OrderService; import store.mybooks.front.user.adaptor.UserAdaptor; import store.mybooks.front.user.dto.response.UserGetResponse; @@ -167,4 +168,10 @@ public String viewOrderPage(@ModelAttribute BookOrderDirectRequest request, modelMap.put("quantity", request.getQuantity()); return "checkout"; } + + @PostMapping("/order") + public String doOrder(@ModelAttribute BookOrderRequest orderRequest) { + log.info("값이 들어가나? {}", orderRequest.toString()); + return "test"; + } } diff --git a/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java b/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java new file mode 100644 index 00000000..750cfb94 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java @@ -0,0 +1,25 @@ +package store.mybooks.front.order.dto.request; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +/** + * packageName : store.mybooks.front.order.dto.request
+ * fileName : BookOrderRequest
+ * author : minsu11
+ * date : 3/16/24
+ * description : + * ===========================================================
+ * DATE AUTHOR NOTE
+ * -----------------------------------------------------------
+ * 3/16/24 minsu11 최초 생성
+ */ +@Getter +@NoArgsConstructor +@Setter +@ToString +public class BookOrderRequest { + private OrderInfoRequest order; +} diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java new file mode 100644 index 00000000..789f2ce3 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java @@ -0,0 +1,29 @@ +package store.mybooks.front.order.dto.request; + +import lombok.*; + +/** + * packageName : store.mybooks.front.order.dto.request
+ * fileName : OrderRequest
+ * author : minsu11
+ * date : 3/16/24
+ * description : + * ===========================================================
+ * DATE AUTHOR NOTE
+ * -----------------------------------------------------------
+ * 3/16/24 minsu11 최초 생성
+ */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class OrderInfoRequest { + private String userId; + private String email; + private String phoneNumber; + private String recipientName; + private String recipientPhoneNumber; + private String recipientAddress; + +} diff --git a/src/main/java/store/mybooks/front/payment/controller/PayController.java b/src/main/java/store/mybooks/front/payment/controller/PayController.java index 07cd268e..c401f786 100644 --- a/src/main/java/store/mybooks/front/payment/controller/PayController.java +++ b/src/main/java/store/mybooks/front/payment/controller/PayController.java @@ -10,6 +10,7 @@ import java.util.Base64; import javax.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; @@ -35,6 +36,7 @@ * -----------------------------------------------------------
* 3/13/24 minsu11 최초 생성
*/ +@Slf4j @Controller @RequiredArgsConstructor @RequestMapping("/pay") diff --git a/src/main/resources/templates/assets/js/order/order.js b/src/main/resources/templates/assets/js/order/order.js index 6f7ec14c..773a01ec 100644 --- a/src/main/resources/templates/assets/js/order/order.js +++ b/src/main/resources/templates/assets/js/order/order.js @@ -8,7 +8,6 @@ document.addEventListener('DOMContentLoaded', function (event const point = document.querySelector('input[id="user-point"][type="number"]') const wrapCost = document.querySelector('input[id="wrap-cost"]') // const input = document.querySelectorAll(".select-wrap") - const payBtn = document.querySelector('.pay-btn') const date = document.getElementById('delivery-date-id'); let data = 0; @@ -44,17 +43,6 @@ document.addEventListener('DOMContentLoaded', function (event data = inputValue; } }) - payBtn.addEventListener('submit', function () { - const form = document.getElementById('order-pay-form'); - const xhr = new XMLHttpRequest(); - xhr.open('GET', form.action) - xhr.onload = function () { - if (xhr.status === 200) { - - } - } - }) - date.addEventListener('change', function () { document.getElementById('delivery-date-label').textContent = date.value; @@ -111,3 +99,4 @@ function updateTotalCost(total, num) { + diff --git a/src/main/resources/templates/checkout.html b/src/main/resources/templates/checkout.html index 5012a649..471718c6 100644 --- a/src/main/resources/templates/checkout.html +++ b/src/main/resources/templates/checkout.html @@ -42,257 +42,268 @@

주문/결제

-
-
    -
  • -
    구매자 정보
    -
    -
    -
    -
    - - -
    -
    - +
    +
    +
      +
    • +
      구매자 정보
      +
      +
      +
      +
      + + +
      +
      + +
      -
      -
      -
      - -
      - -
      -
      -
      -
      -
      - -
      - +
      +
      + +
      + +
      -
      -
      -
      -
    • -
    • -
      받는 사람 정보
      -
      -
      -
      -
      -
      - -
      +
      +
      +
      - +
      -
      -
      - -
      - +
      +
    • +
    • +
      받는 사람 정보
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      -
      - -
      -
      +
      - +
      - + +
      +
      +
      + +
      +
      +
      + +
      + +
      -
      -
      -
    • -
    • -
      주문 내역 -
      -
      -
      -
      -
      - - - + + +
    • +
      주문 내역 +
      +
      +
      +
      +
      +
    • + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - + + + + + + - - + + + + - - - - - -
      책 이름정가판매가수량합계포장쿠폰
      - 책 이름정가판매가수량합계포장쿠폰
      + - -
      -
      -

      +
      +
      +
      +

      +
      - -
      - -

      +
      + +

      - - -
      - -

      +
      + +

      - -
      - - - -
      + + + + + + + + + + + +
      -
    -
    -
  • -
  • -
    포인트 사용
    -
    -
    -
    -
    - +
    +
  • +
  • +
    포인트 사용
    +
    +
    +
    +
    + +
    -
- - -
  • -
    배송 날짜
    -
    -
    - -
    -
    -
  • -
  • -
    결제
    -
    -
    -
    -
    -
    -
    - -
    - - +
    +
  • +
  • +
    배송 날짜
    +
    +
    + +
    +
    +
  • +
  • +
    결제
    +
    +
    +
    +
    +
    +
    + +
    + + +
    -
    -
    - -
    - +
    + +
    + +
    -
    -
    - -
    - +
    + +
    + +
    -
    -
    - - - +
    + + + + +
    -
    -
    -
  • - -
    + + + +
    +
    - - \ No newline at end of file diff --git a/src/main/resources/templates/test.html b/src/main/resources/templates/test.html new file mode 100644 index 00000000..2e27c327 --- /dev/null +++ b/src/main/resources/templates/test.html @@ -0,0 +1,16 @@ + + + + + Title + + +

    테스트

    + + + + + + + + \ No newline at end of file From 2d40dbf2359bf53add55c3c673ba778c0d2c9b8d Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 15:05:33 +0900 Subject: [PATCH 003/147] =?UTF-8?q?feat:=20=EA=B2=B0=EC=A0=9C=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EB=88=8C=EB=A0=80=EC=9D=84=20=EB=95=8C=20=EA=B0=92?= =?UTF-8?q?=EC=9D=B4=20=EB=84=98=EC=96=B4=EC=98=A4=EB=8A=94=EC=A7=80=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/controller/OrderController.java | 2 + .../order/dto/request/BookInfoRequest.java | 30 +++++++++++++ .../order/dto/request/BookOrderRequest.java | 4 +- .../order/dto/request/OrderInfoRequest.java | 10 ++++- .../front/order/service/OrderService.java | 1 + .../mybooks/front/order/utils/OrderUtils.java | 42 +++++++++++++++++++ .../templates/assets/js/order/order.js | 7 ++++ src/main/resources/templates/checkout.html | 36 +++++++++++----- 8 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java create mode 100644 src/main/java/store/mybooks/front/order/utils/OrderUtils.java diff --git a/src/main/java/store/mybooks/front/order/controller/OrderController.java b/src/main/java/store/mybooks/front/order/controller/OrderController.java index 5ebc6339..328d3d1f 100644 --- a/src/main/java/store/mybooks/front/order/controller/OrderController.java +++ b/src/main/java/store/mybooks/front/order/controller/OrderController.java @@ -18,6 +18,7 @@ import store.mybooks.front.order.dto.request.BookOrderDirectRequest; import store.mybooks.front.order.dto.request.BookOrderRequest; import store.mybooks.front.order.service.OrderService; +import store.mybooks.front.order.utils.OrderUtils; import store.mybooks.front.user.adaptor.UserAdaptor; import store.mybooks.front.user.dto.response.UserGetResponse; import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; @@ -172,6 +173,7 @@ public String viewOrderPage(@ModelAttribute BookOrderDirectRequest request, @PostMapping("/order") public String doOrder(@ModelAttribute BookOrderRequest orderRequest) { log.info("값이 들어가나? {}", orderRequest.toString()); + log.info(OrderUtils.createOrderNumber()); return "test"; } } diff --git a/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java new file mode 100644 index 00000000..b79358b1 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java @@ -0,0 +1,30 @@ +package store.mybooks.front.order.dto.request; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +/** + * packageName : store.mybooks.front.order.dto.request
    + * fileName : BookInfoRequest
    + * author : minsu11
    + * date : 3/16/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/16/24 minsu11 최초 생성
    + */ +@Getter +@NoArgsConstructor +@Setter +@ToString +public class BookInfoRequest { + private Long bookId; + private Integer saleCost; + private Integer bookCost; + private Integer selectWrapId; + private Integer selectCouponId; + +} diff --git a/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java b/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java index 750cfb94..2bb07da9 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java @@ -1,5 +1,6 @@ package store.mybooks.front.order.dto.request; +import java.util.List; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -21,5 +22,6 @@ @Setter @ToString public class BookOrderRequest { - private OrderInfoRequest order; + private OrderInfoRequest orderInfo; + private List bookInfoList; } diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java index 789f2ce3..8c2b0af5 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java @@ -1,6 +1,9 @@ package store.mybooks.front.order.dto.request; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; /** * packageName : store.mybooks.front.order.dto.request
    @@ -16,7 +19,6 @@ @Getter @Setter @NoArgsConstructor -@AllArgsConstructor @ToString public class OrderInfoRequest { private String userId; @@ -25,5 +27,9 @@ public class OrderInfoRequest { private String recipientName; private String recipientPhoneNumber; private String recipientAddress; + private String deliveryDate; + private Integer usingPoint; + private Integer wrapCost; + private Integer couponApplicationAmount; } diff --git a/src/main/java/store/mybooks/front/order/service/OrderService.java b/src/main/java/store/mybooks/front/order/service/OrderService.java index 3d32b6f9..7226bc3d 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderService.java @@ -61,4 +61,5 @@ public List calculateBooksCost(List cartDetailList) { .collect(Collectors.toList()); } + } diff --git a/src/main/java/store/mybooks/front/order/utils/OrderUtils.java b/src/main/java/store/mybooks/front/order/utils/OrderUtils.java new file mode 100644 index 00000000..e28fb662 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/utils/OrderUtils.java @@ -0,0 +1,42 @@ +package store.mybooks.front.order.utils; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Random; + +/** + * packageName : store.mybooks.front.order.utils
    + * fileName : OrderUtils
    + * author : minsu11
    + * date : 3/16/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/16/24 minsu11 최초 생성
    + */ +public class OrderUtils { + private OrderUtils() { + } + + /** + * 랜덤한 문자열 생성 + * + * @return the string + */ + public static String createOrderNumber() { + StringBuilder orderNumber = new StringBuilder(); + String time = LocalDateTime.now().format(DateTimeFormatter.BASIC_ISO_DATE); + int leftLimit = 48; + int rightLimit = 122; + int targetStringLength = 13; + String randomStr = new Random() + .ints(leftLimit, rightLimit + 1) + .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97)) + .limit(targetStringLength) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + return orderNumber.append(time) + .append(randomStr).toString(); + } +} diff --git a/src/main/resources/templates/assets/js/order/order.js b/src/main/resources/templates/assets/js/order/order.js index 773a01ec..c45a27b8 100644 --- a/src/main/resources/templates/assets/js/order/order.js +++ b/src/main/resources/templates/assets/js/order/order.js @@ -9,8 +9,15 @@ document.addEventListener('DOMContentLoaded', function (event const wrapCost = document.querySelector('input[id="wrap-cost"]') // const input = document.querySelectorAll(".select-wrap") const date = document.getElementById('delivery-date-id'); + const submitForm = document.getElementById('order-pay-form') let data = 0; + submitForm.addEventListener("keydown", function (event) { + if (event.keyCode === 13) { + event.preventDefault() + } + }) + radioInputs.forEach(function (input) { input.addEventListener('click', function () { const chkValue = document.getElementById('wrap-used').checked; diff --git a/src/main/resources/templates/checkout.html b/src/main/resources/templates/checkout.html index 471718c6..a7673d3d 100644 --- a/src/main/resources/templates/checkout.html +++ b/src/main/resources/templates/checkout.html @@ -56,7 +56,7 @@
    구매자 정보
    @@ -68,7 +68,8 @@
    구매자 정보
    -
    @@ -78,7 +79,7 @@
    구매자 정보
    + name="orderInfo.phoneNumber" readonly>
    @@ -95,7 +96,7 @@
    받는 사람 정보
    -
    @@ -105,7 +106,7 @@
    받는 사람 정보
    -
    @@ -121,7 +122,8 @@
    받는 사람 정보
    - @@ -156,6 +158,13 @@
    주문 내역 + + +

    @@ -191,7 +202,7 @@
    주문 내역

    @@ -246,7 +257,8 @@
    배송 날짜
    @@ -264,14 +276,15 @@
    결제
    + type="hidden" name="orderInfo.usingPoint"/>
    + class="form-control w-25" name="orderInfo.wrapCost" + readonly/>
    @@ -280,6 +293,7 @@
    결제
    From 885e6ce13948e2fcb2f4c9cb7bee543251bc7e37 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 15:22:13 +0900 Subject: [PATCH 004/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20dto,=20=EC=A3=BC=EB=AC=B8=20=EC=83=9D=EC=84=B1=20ad?= =?UTF-8?q?aptor=20=ED=8C=8C=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybooks/front/order/adaptor/OrderAdaptor.java | 12 ++++++++++++ .../front/order/dto/request/OrderCreateRequest.java | 12 ++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java create mode 100644 src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java diff --git a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java new file mode 100644 index 00000000..8d941bd5 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java @@ -0,0 +1,12 @@ +package store.mybooks.front.order.adaptor;/** + *packageName : store.mybooks.front.order.adaptor
    + * fileName : OrderAdaptor
    + * author : minsu11
    + * date : 3/16/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/16/24 minsu11 최초 생성
    + */public class OrderAdaptor { +} diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java new file mode 100644 index 00000000..eaeebb34 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java @@ -0,0 +1,12 @@ +package store.mybooks.front.order.dto.request;/** + *packageName : store.mybooks.front.order.dto.request
    + * fileName : OrderCreateRequest
    + * author : minsu11
    + * date : 3/16/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/16/24 minsu11 최초 생성
    + */public class OrderCreateRequest { +} From 7153c57ad29ceec675892eb38f14375bc159d26c Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 16:04:20 +0900 Subject: [PATCH 005/147] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EC=9D=98=20?= =?UTF-8?q?=EC=A3=BC=EC=86=8C=20=EC=A0=95=EB=B3=B4=20=EB=B3=80=EC=A1=B0=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/global/GlobalControllerAdvice.java | 17 ++++--- .../order/controller/OrderController.java | 5 +-- .../exception/OrderModulationException.java | 19 ++++++++ .../front/order/service/OrderService.java | 45 +++++++++++++++++++ src/main/resources/templates/checkout.html | 3 ++ .../resources/templates/mini-address.html | 2 +- 6 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 src/main/java/store/mybooks/front/order/exception/OrderModulationException.java diff --git a/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java b/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java index b277b39e..059566b1 100644 --- a/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java +++ b/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java @@ -4,11 +4,8 @@ import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.client.HttpClientErrorException; -import store.mybooks.front.auth.exception.AccessIdForbiddenException; -import store.mybooks.front.auth.exception.AuthenticationIsNotValidException; -import store.mybooks.front.auth.exception.StatusIsDormancyException; -import store.mybooks.front.auth.exception.StatusIsLockException; -import store.mybooks.front.auth.exception.TokenExpiredException; +import store.mybooks.front.auth.exception.*; +import store.mybooks.front.order.exception.OrderModulationException; /** * packageName : store.mybooks.front.global @@ -63,4 +60,14 @@ public String handleAuthException(RuntimeException ex) { } + @ExceptionHandler({OrderModulationException.class}) + // 400 404 이게 리소스에서 나오는 모든 예외 + public String handleOrderModulationException(Exception exception, HttpServletRequest request) { + + String previousUrl = request.getHeader(REFERER); + request.getSession().setAttribute("error", exception.getMessage()); + return previousUrl.replace(domain, "redirect:"); + } + + } diff --git a/src/main/java/store/mybooks/front/order/controller/OrderController.java b/src/main/java/store/mybooks/front/order/controller/OrderController.java index 328d3d1f..f8d3e561 100644 --- a/src/main/java/store/mybooks/front/order/controller/OrderController.java +++ b/src/main/java/store/mybooks/front/order/controller/OrderController.java @@ -18,7 +18,6 @@ import store.mybooks.front.order.dto.request.BookOrderDirectRequest; import store.mybooks.front.order.dto.request.BookOrderRequest; import store.mybooks.front.order.service.OrderService; -import store.mybooks.front.order.utils.OrderUtils; import store.mybooks.front.user.adaptor.UserAdaptor; import store.mybooks.front.user.dto.response.UserGetResponse; import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; @@ -172,8 +171,8 @@ public String viewOrderPage(@ModelAttribute BookOrderDirectRequest request, @PostMapping("/order") public String doOrder(@ModelAttribute BookOrderRequest orderRequest) { - log.info("값이 들어가나? {}", orderRequest.toString()); - log.info(OrderUtils.createOrderNumber()); + orderService.checkModulation(orderRequest); + log.info("값 : {}", orderRequest.toString()); return "test"; } } diff --git a/src/main/java/store/mybooks/front/order/exception/OrderModulationException.java b/src/main/java/store/mybooks/front/order/exception/OrderModulationException.java new file mode 100644 index 00000000..2db19c81 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/exception/OrderModulationException.java @@ -0,0 +1,19 @@ +package store.mybooks.front.order.exception; + +/** + * packageName : store.mybooks.front.order.exception
    + * fileName : OrderModulationException
    + * author : minsu11
    + * date : 3/16/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/16/24 minsu11 최초 생성
    + */ + +public class OrderModulationException extends RuntimeException { + public OrderModulationException() { + super("주문 정보의 내용이 변조"); + } +} diff --git a/src/main/java/store/mybooks/front/order/service/OrderService.java b/src/main/java/store/mybooks/front/order/service/OrderService.java index 7226bc3d..9b53d10d 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderService.java @@ -5,9 +5,22 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import store.mybooks.front.admin.book.model.response.BookDetailResponse; +import store.mybooks.front.admin.wrap.adaptor.WrapAdaptor; import store.mybooks.front.book.adaptor.BookAdaptor; import store.mybooks.front.cart.domain.CartDetail; +import store.mybooks.front.order.adaptor.OrderAdaptor; +import store.mybooks.front.order.dto.request.BookInfoRequest; import store.mybooks.front.order.dto.request.BookOrderDirectRequest; +import store.mybooks.front.order.dto.request.BookOrderRequest; +import store.mybooks.front.order.dto.request.OrderInfoRequest; +import store.mybooks.front.order.exception.OrderModulationException; +import store.mybooks.front.user.adaptor.UserAdaptor; +import store.mybooks.front.user.dto.response.UserGetResponse; +import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; +import store.mybooks.front.user_address.response.UserAddressGetResponse; +import store.mybooks.front.user_coupon.adaptor.UserCouponAdaptor; +import store.mybooks.front.userpoint.adaptor.UserPointAdaptor; +import store.mybooks.front.userpoint.dto.response.PointResponse; /** * packageName : store.mybooks.front.order.service
    @@ -24,6 +37,12 @@ @RequiredArgsConstructor public class OrderService { private final BookAdaptor bookAdaptor; + private final OrderAdaptor orderAdapter; + private final UserAddressAdaptor userAddressAdaptor; + private final UserAdaptor userAdaptor; + private final WrapAdaptor wrapAdaptor; + private final UserCouponAdaptor userCouponAdaptor; + private final UserPointAdaptor userPointAdaptor; /** * methodName : getBook
    @@ -62,4 +81,30 @@ public List calculateBooksCost(List cartDetailList) { } + public void checkModulation(BookOrderRequest bookOrderRequest) { + OrderInfoRequest orderInfoRequest = bookOrderRequest.getOrderInfo(); + List bookInfoRequest = bookOrderRequest.getBookInfoList(); + + + } + + public void checkOrderInfo(OrderInfoRequest orderInfoRequest) { + UserGetResponse user = userAdaptor.findUser(); + UserAddressGetResponse userAddress = checkAddress(orderInfoRequest.getAddressId()); + PointResponse pointResponse = userPointAdaptor.getPointsHeld(); + + + } + + public UserAddressGetResponse checkAddress(Long addressId) { + List userAddressGetResponses = userAddressAdaptor.findAllUserAddress(); + + for (UserAddressGetResponse address : userAddressGetResponses) { + if (address.getId() == addressId) { + return address; + } + } + throw new OrderModulationException(); + } + } diff --git a/src/main/resources/templates/checkout.html b/src/main/resources/templates/checkout.html index a7673d3d..b29d8bc5 100644 --- a/src/main/resources/templates/checkout.html +++ b/src/main/resources/templates/checkout.html @@ -122,6 +122,9 @@
    받는 사람 정보
    + const addressElement = document.getElementById(addressId).parentElement.parentElement.firstElementChild; const addressRoadName = addressElement.nextElementSibling.innerHTML; const addressDetail = addressElement.nextElementSibling.nextElementSibling.innerHTML; - + opener.document.getElementById("delivery-address-id").value = addressId.replace("select-", "") opener.document.getElementById("delivery-address").value = addressRoadName + addressDetail; window.close() } From 4fe743796d9d06dccd820dd539d8ae64ee7a5afe Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 16:12:40 +0900 Subject: [PATCH 006/147] =?UTF-8?q?feat:=20dto=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/dto/request/OrderCreateRequest.java | 14 +++++++++++--- .../front/order/dto/request/OrderInfoRequest.java | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java index eaeebb34..57d526dd 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java @@ -1,5 +1,10 @@ -package store.mybooks.front.order.dto.request;/** - *packageName : store.mybooks.front.order.dto.request
    +package store.mybooks.front.order.dto.request; + +import lombok.Getter; +import lombok.Setter; + +/** + * packageName : store.mybooks.front.order.dto.request
    * fileName : OrderCreateRequest
    * author : minsu11
    * date : 3/16/24
    @@ -8,5 +13,8 @@ * DATE AUTHOR NOTE
    * -----------------------------------------------------------
    * 3/16/24 minsu11 최초 생성
    - */public class OrderCreateRequest { + */ +@Getter +@Setter +public class OrderCreateRequest { } diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java index 8c2b0af5..50093ccb 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java @@ -26,6 +26,7 @@ public class OrderInfoRequest { private String phoneNumber; private String recipientName; private String recipientPhoneNumber; + private Long addressId; private String recipientAddress; private String deliveryDate; private Integer usingPoint; From fc20c2def69c332ba71477847309dffe84158904 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 16:13:07 +0900 Subject: [PATCH 007/147] =?UTF-8?q?feat:=20order=20adaptor=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/order/adaptor/OrderAdaptor.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java index 8d941bd5..b5c4c732 100644 --- a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java +++ b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java @@ -1,5 +1,12 @@ -package store.mybooks.front.order.adaptor;/** - *packageName : store.mybooks.front.order.adaptor
    +package store.mybooks.front.order.adaptor; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import store.mybooks.front.config.GatewayAdaptorProperties; + +/** + * packageName : store.mybooks.front.order.adaptor
    * fileName : OrderAdaptor
    * author : minsu11
    * date : 3/16/24
    @@ -8,5 +15,10 @@ * DATE AUTHOR NOTE
    * -----------------------------------------------------------
    * 3/16/24 minsu11 최초 생성
    - */public class OrderAdaptor { + */ +@Component +@RequiredArgsConstructor +public class OrderAdaptor { + private final RestTemplate restTemplate; + private final GatewayAdaptorProperties gatewayAdaptorProperties; } From 7705dd8a52eed44b7a359a016d175048c0ef9f67 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 16:13:26 +0900 Subject: [PATCH 008/147] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EB=B3=80=EC=A1=B0=20=EB=B0=A9=EC=A7=80=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybooks/front/order/service/OrderService.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/store/mybooks/front/order/service/OrderService.java b/src/main/java/store/mybooks/front/order/service/OrderService.java index 9b53d10d..cfda3dab 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderService.java @@ -1,6 +1,7 @@ package store.mybooks.front.order.service; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -89,7 +90,7 @@ public void checkModulation(BookOrderRequest bookOrderRequest) { } public void checkOrderInfo(OrderInfoRequest orderInfoRequest) { - UserGetResponse user = userAdaptor.findUser(); + UserGetResponse user = checkUser(orderInfoRequest.getEmail()); UserAddressGetResponse userAddress = checkAddress(orderInfoRequest.getAddressId()); PointResponse pointResponse = userPointAdaptor.getPointsHeld(); @@ -100,11 +101,20 @@ public UserAddressGetResponse checkAddress(Long addressId) { List userAddressGetResponses = userAddressAdaptor.findAllUserAddress(); for (UserAddressGetResponse address : userAddressGetResponses) { - if (address.getId() == addressId) { + if (Objects.equals(address.getId(), addressId)) { return address; } } throw new OrderModulationException(); } + public UserGetResponse checkUser(String email) { + UserGetResponse user = userAdaptor.findUser(); + if (Objects.equals(user.getEmail(), email)) { + return user; + } + throw new OrderModulationException(); + } + + } From 38c8d14d8f5ab2852fc1eeb86d336463b3ae6cb3 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 16:48:25 +0900 Subject: [PATCH 009/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=B6=84=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/global/GlobalControllerAdvice.java | 4 ++-- ...ion.java => OrderInfoNotMatchException.java} | 8 ++++++-- .../front/order/service/OrderService.java | 17 ++++++++++++----- 3 files changed, 20 insertions(+), 9 deletions(-) rename src/main/java/store/mybooks/front/order/exception/{OrderModulationException.java => OrderInfoNotMatchException.java} (73%) diff --git a/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java b/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java index 059566b1..12e19650 100644 --- a/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java +++ b/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java @@ -5,7 +5,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.client.HttpClientErrorException; import store.mybooks.front.auth.exception.*; -import store.mybooks.front.order.exception.OrderModulationException; +import store.mybooks.front.order.exception.OrderInfoNotMatchException; /** * packageName : store.mybooks.front.global @@ -60,7 +60,7 @@ public String handleAuthException(RuntimeException ex) { } - @ExceptionHandler({OrderModulationException.class}) + @ExceptionHandler({OrderInfoNotMatchException.class}) // 400 404 이게 리소스에서 나오는 모든 예외 public String handleOrderModulationException(Exception exception, HttpServletRequest request) { diff --git a/src/main/java/store/mybooks/front/order/exception/OrderModulationException.java b/src/main/java/store/mybooks/front/order/exception/OrderInfoNotMatchException.java similarity index 73% rename from src/main/java/store/mybooks/front/order/exception/OrderModulationException.java rename to src/main/java/store/mybooks/front/order/exception/OrderInfoNotMatchException.java index 2db19c81..40d17199 100644 --- a/src/main/java/store/mybooks/front/order/exception/OrderModulationException.java +++ b/src/main/java/store/mybooks/front/order/exception/OrderInfoNotMatchException.java @@ -12,8 +12,12 @@ * 3/16/24 minsu11 최초 생성
    */ -public class OrderModulationException extends RuntimeException { - public OrderModulationException() { +public class OrderInfoNotMatchException extends RuntimeException { + public OrderInfoNotMatchException() { super("주문 정보의 내용이 변조"); } + + public OrderInfoNotMatchException(String message) { + super(message); + } } diff --git a/src/main/java/store/mybooks/front/order/service/OrderService.java b/src/main/java/store/mybooks/front/order/service/OrderService.java index cfda3dab..c431b5bc 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderService.java @@ -14,7 +14,7 @@ import store.mybooks.front.order.dto.request.BookOrderDirectRequest; import store.mybooks.front.order.dto.request.BookOrderRequest; import store.mybooks.front.order.dto.request.OrderInfoRequest; -import store.mybooks.front.order.exception.OrderModulationException; +import store.mybooks.front.order.exception.OrderInfoNotMatchException; import store.mybooks.front.user.adaptor.UserAdaptor; import store.mybooks.front.user.dto.response.UserGetResponse; import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; @@ -92,7 +92,7 @@ public void checkModulation(BookOrderRequest bookOrderRequest) { public void checkOrderInfo(OrderInfoRequest orderInfoRequest) { UserGetResponse user = checkUser(orderInfoRequest.getEmail()); UserAddressGetResponse userAddress = checkAddress(orderInfoRequest.getAddressId()); - PointResponse pointResponse = userPointAdaptor.getPointsHeld(); + Integer point = checkPoint(orderInfoRequest.getUsingPoint()); } @@ -105,7 +105,7 @@ public UserAddressGetResponse checkAddress(Long addressId) { return address; } } - throw new OrderModulationException(); + throw new OrderInfoNotMatchException("회원 주소 정보 변조"); } public UserGetResponse checkUser(String email) { @@ -113,8 +113,15 @@ public UserGetResponse checkUser(String email) { if (Objects.equals(user.getEmail(), email)) { return user; } - throw new OrderModulationException(); + throw new OrderInfoNotMatchException("회원 정보 변조"); } - + public Integer checkPoint(Integer usingPoint) { + PointResponse pointsHeld = userPointAdaptor.getPointsHeld(); + if (usingPoint < 0 || pointsHeld.getRemainingPoint() < usingPoint) { + throw new OrderInfoNotMatchException("포인트 정보"); + } + return usingPoint; + } + public } From 245f25105c108aaafbbc7a85c014c7b55ef4a098 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 17:20:45 +0900 Subject: [PATCH 010/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=9C=A0=EC=A0=80=20=EC=A0=95=EB=B3=B4=20dto=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/dto/request/BookOrderRequest.java | 1 + .../dto/request/OrderUserInfoRequest.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/main/java/store/mybooks/front/order/dto/request/OrderUserInfoRequest.java diff --git a/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java b/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java index 2bb07da9..9c1974a5 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java @@ -24,4 +24,5 @@ public class BookOrderRequest { private OrderInfoRequest orderInfo; private List bookInfoList; + private OrderUserInfoRequest userInfo; } diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderUserInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderUserInfoRequest.java new file mode 100644 index 00000000..d0b9af68 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderUserInfoRequest.java @@ -0,0 +1,25 @@ +package store.mybooks.front.order.dto.request; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * packageName : store.mybooks.front.order.dto.request
    + * fileName : OrderUserInfoRequest
    + * author : minsu11
    + * date : 3/16/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/16/24 minsu11 최초 생성
    + */ +@Getter +@Setter +@NoArgsConstructor +public class OrderUserInfoRequest { + private String userName; + private String email; + private String phoneNumber; +} From 2444a1f494ba8efa86f8e98397178b1353c81fb5 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 17:21:02 +0900 Subject: [PATCH 011/147] =?UTF-8?q?feat:=20dto=20=EC=88=98=EC=A0=95'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybooks/front/order/dto/request/OrderInfoRequest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java index 50093ccb..b4160382 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java @@ -21,9 +21,7 @@ @NoArgsConstructor @ToString public class OrderInfoRequest { - private String userId; - private String email; - private String phoneNumber; + private String recipientName; private String recipientPhoneNumber; private Long addressId; From 1e6a72053cfcbc95a7f7426f4cb4e62df19c72d1 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sat, 16 Mar 2024 19:56:10 +0900 Subject: [PATCH 012/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EB=88=84=EB=A5=BC=EB=95=8C=20?= =?UTF-8?q?=EC=88=98=EB=9F=89=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/cart.html | 66 ++++++++++++++++++-------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/src/main/resources/templates/cart.html b/src/main/resources/templates/cart.html index a95b0a8f..878b5987 100644 --- a/src/main/resources/templates/cart.html +++ b/src/main/resources/templates/cart.html @@ -81,7 +81,8 @@

    Cart

    - - From 96cfa77a040ebb59ddf83b60798cdb395422e905 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sat, 16 Mar 2024 20:02:04 +0900 Subject: [PATCH 013/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EB=88=84=EB=A5=BC=EB=95=8C=20?= =?UTF-8?q?=EC=88=98=EB=9F=89=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20con?= =?UTF-8?q?troller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/cart/controller/CartController.java | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/main/java/store/mybooks/front/cart/controller/CartController.java b/src/main/java/store/mybooks/front/cart/controller/CartController.java index 6d7c71dd..0334070e 100644 --- a/src/main/java/store/mybooks/front/cart/controller/CartController.java +++ b/src/main/java/store/mybooks/front/cart/controller/CartController.java @@ -6,17 +6,21 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import store.mybooks.front.cart.domain.CartDetail; import store.mybooks.front.cart.domain.CartRegisterRequest; -import store.mybooks.front.cart.service.CartUserService; +import store.mybooks.front.cart.domain.OrderItemRequest; import store.mybooks.front.cart.service.CartNonUserService; +import store.mybooks.front.cart.service.CartUserService; +import store.mybooks.front.cart.service.CartUtil; import store.mybooks.front.utils.CookieUtils; /** @@ -107,24 +111,16 @@ private boolean isUser(HttpServletRequest request) { return Objects.nonNull(CookieUtils.getIdentityCookieValue(request)); } + @PostMapping("/cart/order") + public ResponseEntity cartOrder(@CookieValue(name = CartUtil.CART_COOKIE, required = false) Cookie cartCookie, + HttpServletResponse response, HttpServletRequest request, + @RequestBody List orderItemRequest) { + if (isUser(request)) { + cartUserService.orderBookInCart(orderItemRequest); + } else { + cartNonUserService.orderBookInCart(cartCookie, response, orderItemRequest); + } -// @PostMapping("/cart/order") -// public String cartOrder(@CookieValue(name = CartUtil.CART_COOKIE, required = false) Cookie cartCookie, -// HttpServletResponse response, Model model) { -// try { -// List cartDetailList = cartUtil.viewCart(cartCookie); -// if (cartDetailList.isEmpty()) { -// return "redirect:/cart"; -// } else { -// model.addAttribute("cartItem", cartDetailList); -// String emptyCart = objectMapper.writeValueAsString(new ArrayList()); -// //TODO -// } -// } catch (JsonProcessingException e) { -// throw new RuntimeException(e); -// } -// return ""; -// } - - -} + return ResponseEntity.ok().build(); + } +} \ No newline at end of file From a81339871e47a544dcae0244f64069105f246184 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sat, 16 Mar 2024 20:07:52 +0900 Subject: [PATCH 014/147] =?UTF-8?q?feat:=20=EC=88=98=EB=9F=89=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/store/mybooks/front/cart/domain/CartDetail.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/store/mybooks/front/cart/domain/CartDetail.java b/src/main/java/store/mybooks/front/cart/domain/CartDetail.java index a3632753..a2fe4ec8 100644 --- a/src/main/java/store/mybooks/front/cart/domain/CartDetail.java +++ b/src/main/java/store/mybooks/front/cart/domain/CartDetail.java @@ -28,10 +28,14 @@ public class CartDetail { private Integer cost; private Integer saleCost; - public void amountUpdate(int amount) { + public void addAmount(int amount) { this.cartDetailAmount = this.cartDetailAmount + amount; } + public void amountUpdate(int amount) { + this.cartDetailAmount = amount; + } + public CartDetail saleUpdate(Integer amount) { this.saleCost *= amount; return this; From 6c0116106c37edc9fcbecf4f04603ea220ee9215 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sat, 16 Mar 2024 20:08:10 +0900 Subject: [PATCH 015/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EB=88=84=EB=A5=BC=EB=95=8C=20?= =?UTF-8?q?=EC=88=98=EB=9F=89=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20ser?= =?UTF-8?q?vice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cart/service/CartNonUserService.java | 30 ++++++++++++++++++- .../front/cart/service/CartUserService.java | 30 +++++++++++++++++-- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java b/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java index 3ce23bc4..8816199c 100644 --- a/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java +++ b/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java @@ -19,6 +19,7 @@ import store.mybooks.front.cart.controller.CartController; import store.mybooks.front.cart.domain.CartDetail; import store.mybooks.front.cart.domain.CartRegisterRequest; +import store.mybooks.front.cart.domain.OrderItemRequest; import store.mybooks.front.cart.exception.CookieParseException; /** @@ -67,7 +68,7 @@ public void registerBookToCart(Cookie cookie, HttpServletResponse response, boolean isAlreadyCart = false; for (CartDetail cartDetail : cartDetailList) { if (Objects.equals(cartBook.getId(), cartDetail.getBookId())) { - cartDetail.amountUpdate(cartRegisterRequest.getQuantity()); + cartDetail.addAmount(cartRegisterRequest.getQuantity()); isAlreadyCart = true; break; } @@ -91,6 +92,31 @@ public void registerBookToCart(Cookie cookie, HttpServletResponse response, } } + + public void orderBookInCart(Cookie cartCookie, HttpServletResponse response, + List orderItemRequestList) { + if (Objects.isNull(cartCookie)) { + return; + } + try { + List cartDetailList = new ArrayList<>(viewCart(cartCookie)); + for (OrderItemRequest orderItemRequest : orderItemRequestList) { + cartDetailList.forEach(cartDetail -> { + if (Objects.equals(cartDetail.getBookId(), orderItemRequest.getBookId())) { + cartDetail.amountUpdate(orderItemRequest.getAmount()); + } + }); + } + String cartJson = objectMapper.writeValueAsString(cartDetailList); + String encode = URLEncoder.encode(cartJson, StandardCharsets.UTF_8); + Cookie saveCookie = new Cookie(CartController.CART_COOKIE_VALUE, encode); + response.addCookie(saveCookie); + } catch (JsonProcessingException e) { + throw new CookieParseException(e.getMessage()); + } + } + + /** * Delete book from cart. * @@ -129,4 +155,6 @@ private List viewCart(Cookie cartCookie) throws JsonProcessingExcept return cartDetailList; } + + } diff --git a/src/main/java/store/mybooks/front/cart/service/CartUserService.java b/src/main/java/store/mybooks/front/cart/service/CartUserService.java index 429b9d16..d15bdbf4 100644 --- a/src/main/java/store/mybooks/front/cart/service/CartUserService.java +++ b/src/main/java/store/mybooks/front/cart/service/CartUserService.java @@ -11,6 +11,7 @@ import store.mybooks.front.cart.controller.CartController; import store.mybooks.front.cart.domain.CartDetail; import store.mybooks.front.cart.domain.CartRegisterRequest; +import store.mybooks.front.cart.domain.OrderItemRequest; import store.mybooks.front.user.adaptor.UserAdaptor; import store.mybooks.front.user.dto.response.UserGetResponse; @@ -66,7 +67,7 @@ public void addBookToCart(CartRegisterRequest cartRegisterRequest) { for (CartDetail cartDetail : cartDetailList) { if (Objects.equals(cartRegisterRequest.getId(), cartDetail.getBookId())) { - cartDetail.amountUpdate(cartRegisterRequest.getQuantity()); + cartDetail.addAmount(cartRegisterRequest.getQuantity()); isAlreadyInCart = true; redisTemplate.opsForList().set(cartKey, cartDetailList.indexOf(cartDetail), cartDetail); break; @@ -76,7 +77,8 @@ public void addBookToCart(CartRegisterRequest cartRegisterRequest) { if (!isAlreadyInCart) { BookCartResponse cartBook = bookAdminAdaptor.getCartBook(cartRegisterRequest.getId()); CartDetail cartDetail = - new CartDetail(cartBook.getId(), cartRegisterRequest.getQuantity(), cartBook.getName(), cartBook.getBookImage(), cartBook.getCost(), + new CartDetail(cartBook.getId(), cartRegisterRequest.getQuantity(), cartBook.getName(), + cartBook.getBookImage(), cartBook.getCost(), cartBook.getSaleCost()); cartDetailList.add(cartDetail); redisTemplate.opsForList().rightPush(cartKey, cartDetail); @@ -102,6 +104,30 @@ public void deleteBookFromCart(Long bookId) { } } + public void orderBookInCart(List orderItemRequestList) { + List bookFromCart = getBookFromCart(); + if (Objects.isNull(bookFromCart) || bookFromCart.isEmpty()) { + return; + } + + for (OrderItemRequest orderItemRequest : orderItemRequestList) { + bookFromCart.forEach(cartDetail -> { + if (Objects.equals(cartDetail.getBookId(), orderItemRequest.getBookId())) { + cartDetail.amountUpdate(orderItemRequest.getAmount()); + } + }); + } + deleteAllBookFromCart(); + + String carKey = cartKey(); + bookFromCart.forEach(cartDetail -> redisTemplate.opsForList().rightPush(carKey, cartDetail)); + } + + public void deleteAllBookFromCart() { + String cartKey = cartKey(); + redisTemplate.delete(cartKey); + } + public String cartKey() { UserGetResponse user = userAdaptor.findUser(); return CartController.CART_COOKIE_VALUE + ":" + user.getEmail(); From 057cae40ad0cda256b15123ef7574e36d2b37ecb Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sat, 16 Mar 2024 20:09:14 +0900 Subject: [PATCH 016/147] =?UTF-8?q?feat:=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=ED=95=A0=20=EC=88=98=EB=9F=89=EA=B3=BC=20?= =?UTF-8?q?=EA=B7=B8=EC=9D=98=20book=20id=EB=A5=BC=20=EB=B0=9B=EC=95=84?= =?UTF-8?q?=EC=98=A4=EB=8A=94=20dto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/cart/domain/OrderItemRequest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/store/mybooks/front/cart/domain/OrderItemRequest.java diff --git a/src/main/java/store/mybooks/front/cart/domain/OrderItemRequest.java b/src/main/java/store/mybooks/front/cart/domain/OrderItemRequest.java new file mode 100644 index 00000000..e936fc0f --- /dev/null +++ b/src/main/java/store/mybooks/front/cart/domain/OrderItemRequest.java @@ -0,0 +1,22 @@ +package store.mybooks.front.cart.domain; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * packageName : store.mybooks.front.cart.domain
    + * fileName : OrderItemDto
    + * author : Fiat_lux
    + * date : 3/16/24
    + * description :
    + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/16/24 Fiat_lux 최초 생성
    + */ +@NoArgsConstructor +@Getter +public class OrderItemRequest { + private Long bookId; + private int amount; +} From a634d220b32987667c0c82b409d7a9e588725b5b Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 20:34:14 +0900 Subject: [PATCH 017/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EB=8A=94=20=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/service/OrderInfoCheckService.java | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java diff --git a/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java b/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java new file mode 100644 index 00000000..3120683f --- /dev/null +++ b/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java @@ -0,0 +1,123 @@ +package store.mybooks.front.order.service; + +import java.util.List; +import java.util.Objects; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import store.mybooks.front.admin.wrap.adaptor.WrapAdaptor; +import store.mybooks.front.book.adaptor.BookAdaptor; +import store.mybooks.front.cart.domain.CartDetail; +import store.mybooks.front.order.adaptor.OrderAdaptor; +import store.mybooks.front.order.dto.request.BookInfoRequest; +import store.mybooks.front.order.dto.request.BookOrderRequest; +import store.mybooks.front.order.dto.request.OrderInfoRequest; +import store.mybooks.front.order.exception.OrderInfoNotMatchException; +import store.mybooks.front.user.adaptor.UserAdaptor; +import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; +import store.mybooks.front.user_address.response.UserAddressGetResponse; +import store.mybooks.front.user_coupon.adaptor.UserCouponAdaptor; +import store.mybooks.front.user_coupon.model.response.UserCouponGetResponseForOrder; +import store.mybooks.front.userpoint.adaptor.UserPointAdaptor; +import store.mybooks.front.userpoint.dto.response.PointResponse; + +/** + * packageName : store.mybooks.front.order.service
    + * fileName : OrderService
    + * author : minsu11
    + * date : 3/5/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/5/24 minsu11 최초 생성
    + */ +@Service +@RequiredArgsConstructor +public class OrderInfoCheckService { + private final BookAdaptor bookAdaptor; + private final OrderAdaptor orderAdapter; + private final UserAddressAdaptor userAddressAdaptor; + private final UserAdaptor userAdaptor; + private final WrapAdaptor wrapAdaptor; + private final UserCouponAdaptor userCouponAdaptor; + private final UserPointAdaptor userPointAdaptor; + + + public void checkModulation(BookOrderRequest bookOrderRequest, List cartInfo) { + OrderInfoRequest orderInfoRequest = bookOrderRequest.getOrderInfo(); + List bookInfoRequest = bookOrderRequest.getBookInfoList(); + checkOrderInfo(orderInfoRequest); + checkDuplicateCoupon(bookInfoRequest); + checkBookInfo(bookInfoRequest, cartInfo); + + } + + public void checkBookInfo(List bookInfos, List cartInfos) { + if (bookInfos.size() == cartInfos.size()) { + throw new OrderInfoNotMatchException("장바구니에 담긴 물품의 갯수가 다름"); + } + for (int i = 0; i < bookInfos.size(); i++) { + BookInfoRequest bookInfo = bookInfos.get(i); + CartDetail cartInfo = cartInfos.get(i); + if (!bookInfo.getBookId().equals(cartInfo.getBookId()) + || !bookInfo.getSaleCost().equals(cartInfo.getSaleCost())) { + throw new OrderInfoNotMatchException("도서의 정보가 다름"); + } + if (Objects.nonNull(bookInfo.getSelectWrapId())) { + wrapAdaptor.getWrap(bookInfo.getSelectWrapId()); + } + if (Objects.nonNull(bookInfo.getSelectCouponId())) { + checkBookCoupon(bookInfo); + } + } + } + + public void checkDuplicateCoupon(List bookInfos) { + for (int i = 0; i < bookInfos.size(); i++) { + for (int j = i + 1; j < bookInfos.size(); j++) { + if (Objects.equals(bookInfos.get(i).getSelectCouponId(), bookInfos.get(j).getSelectCouponId())) { + throw new OrderInfoNotMatchException("같은 쿠폰이 입력됨"); + } + } + } + + } + + public void checkBookCoupon(BookInfoRequest bookInfo) { + boolean isCheck = false; + List couponList = userCouponAdaptor.getUsableUserCoupon(bookInfo.getBookId()); + for (int j = 0; j < couponList.size(); j++) { + if (Objects.equals(couponList.get(j), bookInfo.getSelectCouponId())) { + isCheck = true; + } + } + if (!isCheck) { + throw new OrderInfoNotMatchException("쿠폰 정보 다름"); + } + } + + + public void checkOrderInfo(OrderInfoRequest orderInfoRequest) { + orderAdapter.checkOrderUserAddressInfo(orderInfoRequest.getAddressId()); + checkPoint(orderInfoRequest.getUsingPoint()); + } + + public UserAddressGetResponse checkAddress(Long addressId) { + List userAddressGetResponses = userAddressAdaptor.findAllUserAddress(); + + for (UserAddressGetResponse address : userAddressGetResponses) { + if (Objects.equals(address.getId(), addressId)) { + return address; + } + } + throw new OrderInfoNotMatchException("회원 주소 정보 변조"); + } + + public Integer checkPoint(Integer usingPoint) { + PointResponse pointsHeld = userPointAdaptor.getPointsHeld(); + if (usingPoint < 0 || pointsHeld.getRemainingPoint() < usingPoint) { + throw new OrderInfoNotMatchException("포인트 정보"); + } + return usingPoint; + } +} From 7f964b37d4514741a7ddc544a8f79dcdce977e61 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 20:35:32 +0900 Subject: [PATCH 018/147] =?UTF-8?q?feat:=20order=20adaptor=EC=97=90=20?= =?UTF-8?q?=EC=A3=BC=EB=AC=B8=20=EC=A3=BC=EC=86=8C=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=EA=B0=80=20=EB=A7=9E=EB=8A=94=EC=A7=80=20=ED=8C=90=EB=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/global/GlobalControllerAdvice.java | 4 +--- .../front/order/adaptor/OrderAdaptor.java | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java b/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java index 12e19650..def23bff 100644 --- a/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java +++ b/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java @@ -61,13 +61,11 @@ public String handleAuthException(RuntimeException ex) { @ExceptionHandler({OrderInfoNotMatchException.class}) - // 400 404 이게 리소스에서 나오는 모든 예외 public String handleOrderModulationException(Exception exception, HttpServletRequest request) { String previousUrl = request.getHeader(REFERER); - request.getSession().setAttribute("error", exception.getMessage()); + request.getSession().setAttribute("errosr", exception.getMessage()); return previousUrl.replace(domain, "redirect:"); } - } diff --git a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java index b5c4c732..acedcb17 100644 --- a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java +++ b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java @@ -1,9 +1,14 @@ package store.mybooks.front.order.adaptor; import lombok.RequiredArgsConstructor; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import store.mybooks.front.config.GatewayAdaptorProperties; +import store.mybooks.front.utils.Utils; /** * packageName : store.mybooks.front.order.adaptor
    @@ -21,4 +26,23 @@ public class OrderAdaptor { private final RestTemplate restTemplate; private final GatewayAdaptorProperties gatewayAdaptorProperties; + private static final String URL = "/api/order"; + + /** + * methodName : checkOrderUserAddressInfo
    + * author : minsu11
    + * description : 회원이 주문에서 선택한 주소가 실제로 회원이 등록된 주소인지 확인. + *
    * + * + * @param id 주소 아이디 + */ + public void checkOrderUserAddressInfo(Long id) { + ResponseEntity exchange = restTemplate.exchange(URL + "/check/address/{id}", + HttpMethod.GET, + null, + new ParameterizedTypeReference() { + }, id); + Utils.getResponseEntity(exchange, HttpStatus.NO_CONTENT); + } + } From 4d4e164176394f7f45ab4c8a07d2ffafeeaaaa0b Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 20:41:20 +0900 Subject: [PATCH 019/147] =?UTF-8?q?feat:=20html=20=EB=B3=80=EC=A1=B0=20?= =?UTF-8?q?=EB=90=9C=20=EA=B0=92=EC=97=90=20=EB=8C=80=ED=95=9C=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=83=81=ED=99=A9=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/admin/wrap/adaptor/WrapAdaptor.java | 11 ++++ .../mybooks/front/config/RedisConfig.java | 2 +- .../order/controller/OrderController.java | 5 +- .../order/dto/request/BookInfoRequest.java | 2 +- .../order/service/OrderInfoCheckService.java | 19 +------ .../front/order/service/OrderService.java | 51 ------------------- src/main/resources/templates/checkout.html | 9 ++-- 7 files changed, 24 insertions(+), 75 deletions(-) diff --git a/src/main/java/store/mybooks/front/admin/wrap/adaptor/WrapAdaptor.java b/src/main/java/store/mybooks/front/admin/wrap/adaptor/WrapAdaptor.java index 8c41c298..a9bec665 100644 --- a/src/main/java/store/mybooks/front/admin/wrap/adaptor/WrapAdaptor.java +++ b/src/main/java/store/mybooks/front/admin/wrap/adaptor/WrapAdaptor.java @@ -34,6 +34,17 @@ public class WrapAdaptor { private final GatewayAdaptorProperties gatewayAdaptorProperties; private static final String URL = "/api/wraps"; + public WrapResponse getWrap(Integer id) { + String url = gatewayAdaptorProperties.getAddress() + URL + "/{id}"; + ResponseEntity exchange = restTemplate.exchange(url, + HttpMethod.GET, + null, + new ParameterizedTypeReference() { + }, id); + return Utils.getResponseEntity(exchange, HttpStatus.OK); + } + + /** * methodName : getWrap
    * author : minsu11
    diff --git a/src/main/java/store/mybooks/front/config/RedisConfig.java b/src/main/java/store/mybooks/front/config/RedisConfig.java index 461016f7..5a5f688d 100644 --- a/src/main/java/store/mybooks/front/config/RedisConfig.java +++ b/src/main/java/store/mybooks/front/config/RedisConfig.java @@ -81,4 +81,4 @@ public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectio .cacheDefaults(cacheConfiguration) .build(); } -} +} \ No newline at end of file diff --git a/src/main/java/store/mybooks/front/order/controller/OrderController.java b/src/main/java/store/mybooks/front/order/controller/OrderController.java index f8d3e561..b0e0f9ae 100644 --- a/src/main/java/store/mybooks/front/order/controller/OrderController.java +++ b/src/main/java/store/mybooks/front/order/controller/OrderController.java @@ -17,6 +17,7 @@ import store.mybooks.front.cart.service.CartUserService; import store.mybooks.front.order.dto.request.BookOrderDirectRequest; import store.mybooks.front.order.dto.request.BookOrderRequest; +import store.mybooks.front.order.service.OrderInfoCheckService; import store.mybooks.front.order.service.OrderService; import store.mybooks.front.user.adaptor.UserAdaptor; import store.mybooks.front.user.dto.response.UserGetResponse; @@ -52,6 +53,7 @@ public class OrderController { private final UserCouponService userCouponService; private final CartNonUserService cartNonUserService; private final CartUserService cartUserService; + private final OrderInfoCheckService orderInfoCheckService; /** * methodName : viewOrderPage
    @@ -171,7 +173,8 @@ public String viewOrderPage(@ModelAttribute BookOrderDirectRequest request, @PostMapping("/order") public String doOrder(@ModelAttribute BookOrderRequest orderRequest) { - orderService.checkModulation(orderRequest); + List cart = cartUserService.getBookFromCart(); + orderInfoCheckService.checkModulation(orderRequest, cart); log.info("값 : {}", orderRequest.toString()); return "test"; } diff --git a/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java index b79358b1..6367d265 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java @@ -25,6 +25,6 @@ public class BookInfoRequest { private Integer saleCost; private Integer bookCost; private Integer selectWrapId; - private Integer selectCouponId; + private Long selectCouponId; } diff --git a/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java b/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java index 3120683f..6f531284 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java @@ -12,9 +12,7 @@ import store.mybooks.front.order.dto.request.BookOrderRequest; import store.mybooks.front.order.dto.request.OrderInfoRequest; import store.mybooks.front.order.exception.OrderInfoNotMatchException; -import store.mybooks.front.user.adaptor.UserAdaptor; import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; -import store.mybooks.front.user_address.response.UserAddressGetResponse; import store.mybooks.front.user_coupon.adaptor.UserCouponAdaptor; import store.mybooks.front.user_coupon.model.response.UserCouponGetResponseForOrder; import store.mybooks.front.userpoint.adaptor.UserPointAdaptor; @@ -37,7 +35,6 @@ public class OrderInfoCheckService { private final BookAdaptor bookAdaptor; private final OrderAdaptor orderAdapter; private final UserAddressAdaptor userAddressAdaptor; - private final UserAdaptor userAdaptor; private final WrapAdaptor wrapAdaptor; private final UserCouponAdaptor userCouponAdaptor; private final UserPointAdaptor userPointAdaptor; @@ -52,6 +49,7 @@ public void checkModulation(BookOrderRequest bookOrderRequest, List } + //todo 수량 체크하는 부분 추가해야함 public void checkBookInfo(List bookInfos, List cartInfos) { if (bookInfos.size() == cartInfos.size()) { throw new OrderInfoNotMatchException("장바구니에 담긴 물품의 갯수가 다름"); @@ -80,7 +78,6 @@ public void checkDuplicateCoupon(List bookInfos) { } } } - } public void checkBookCoupon(BookInfoRequest bookInfo) { @@ -96,27 +93,15 @@ public void checkBookCoupon(BookInfoRequest bookInfo) { } } - public void checkOrderInfo(OrderInfoRequest orderInfoRequest) { orderAdapter.checkOrderUserAddressInfo(orderInfoRequest.getAddressId()); checkPoint(orderInfoRequest.getUsingPoint()); } - public UserAddressGetResponse checkAddress(Long addressId) { - List userAddressGetResponses = userAddressAdaptor.findAllUserAddress(); - - for (UserAddressGetResponse address : userAddressGetResponses) { - if (Objects.equals(address.getId(), addressId)) { - return address; - } - } - throw new OrderInfoNotMatchException("회원 주소 정보 변조"); - } - public Integer checkPoint(Integer usingPoint) { PointResponse pointsHeld = userPointAdaptor.getPointsHeld(); if (usingPoint < 0 || pointsHeld.getRemainingPoint() < usingPoint) { - throw new OrderInfoNotMatchException("포인트 정보"); + throw new OrderInfoNotMatchException("포인트 정보가 다름"); } return usingPoint; } diff --git a/src/main/java/store/mybooks/front/order/service/OrderService.java b/src/main/java/store/mybooks/front/order/service/OrderService.java index c431b5bc..f6887b10 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderService.java @@ -1,7 +1,6 @@ package store.mybooks.front.order.service; import java.util.List; -import java.util.Objects; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -10,18 +9,11 @@ import store.mybooks.front.book.adaptor.BookAdaptor; import store.mybooks.front.cart.domain.CartDetail; import store.mybooks.front.order.adaptor.OrderAdaptor; -import store.mybooks.front.order.dto.request.BookInfoRequest; import store.mybooks.front.order.dto.request.BookOrderDirectRequest; -import store.mybooks.front.order.dto.request.BookOrderRequest; -import store.mybooks.front.order.dto.request.OrderInfoRequest; -import store.mybooks.front.order.exception.OrderInfoNotMatchException; import store.mybooks.front.user.adaptor.UserAdaptor; -import store.mybooks.front.user.dto.response.UserGetResponse; import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; -import store.mybooks.front.user_address.response.UserAddressGetResponse; import store.mybooks.front.user_coupon.adaptor.UserCouponAdaptor; import store.mybooks.front.userpoint.adaptor.UserPointAdaptor; -import store.mybooks.front.userpoint.dto.response.PointResponse; /** * packageName : store.mybooks.front.order.service
    @@ -81,47 +73,4 @@ public List calculateBooksCost(List cartDetailList) { .collect(Collectors.toList()); } - - public void checkModulation(BookOrderRequest bookOrderRequest) { - OrderInfoRequest orderInfoRequest = bookOrderRequest.getOrderInfo(); - List bookInfoRequest = bookOrderRequest.getBookInfoList(); - - - } - - public void checkOrderInfo(OrderInfoRequest orderInfoRequest) { - UserGetResponse user = checkUser(orderInfoRequest.getEmail()); - UserAddressGetResponse userAddress = checkAddress(orderInfoRequest.getAddressId()); - Integer point = checkPoint(orderInfoRequest.getUsingPoint()); - - - } - - public UserAddressGetResponse checkAddress(Long addressId) { - List userAddressGetResponses = userAddressAdaptor.findAllUserAddress(); - - for (UserAddressGetResponse address : userAddressGetResponses) { - if (Objects.equals(address.getId(), addressId)) { - return address; - } - } - throw new OrderInfoNotMatchException("회원 주소 정보 변조"); - } - - public UserGetResponse checkUser(String email) { - UserGetResponse user = userAdaptor.findUser(); - if (Objects.equals(user.getEmail(), email)) { - return user; - } - throw new OrderInfoNotMatchException("회원 정보 변조"); - } - - public Integer checkPoint(Integer usingPoint) { - PointResponse pointsHeld = userPointAdaptor.getPointsHeld(); - if (usingPoint < 0 || pointsHeld.getRemainingPoint() < usingPoint) { - throw new OrderInfoNotMatchException("포인트 정보"); - } - return usingPoint; - } - public } diff --git a/src/main/resources/templates/checkout.html b/src/main/resources/templates/checkout.html index b29d8bc5..efbaeb43 100644 --- a/src/main/resources/templates/checkout.html +++ b/src/main/resources/templates/checkout.html @@ -56,7 +56,7 @@
    구매자 정보
    @@ -68,7 +68,7 @@
    구매자 정보
    -
    @@ -79,7 +79,7 @@
    구매자 정보
    + name="userInfo.phoneNumber" readonly>
    @@ -188,7 +188,8 @@
    주문 내역

    + th:value="${bookCost}" + type="hidden">
    From 0672b0bb4ebe77c4c8eb89923e1c4ee670b03730 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 20:43:43 +0900 Subject: [PATCH 020/147] =?UTF-8?q?refactor:=20contorller=EC=97=90=20?= =?UTF-8?q?=EC=88=98=EB=9F=89=20=EB=84=98=EA=B8=B0=EB=8A=94=20input=20?= =?UTF-8?q?=ED=83=9C=EA=B7=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/checkout.html | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/resources/templates/checkout.html b/src/main/resources/templates/checkout.html index efbaeb43..30bfdb63 100644 --- a/src/main/resources/templates/checkout.html +++ b/src/main/resources/templates/checkout.html @@ -179,8 +179,13 @@
    주문 내역 - - + + + + +
    From 803e877573c473a09bb69725ddfce78031daedb8 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 20:58:41 +0900 Subject: [PATCH 021/147] =?UTF-8?q?docs:=20java=20doc=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/controller/OrderController.java | 2 +- .../order/dto/request/BookInfoRequest.java | 1 + .../order/service/OrderInfoCheckService.java | 63 +++++++++++++++++-- 3 files changed, 60 insertions(+), 6 deletions(-) diff --git a/src/main/java/store/mybooks/front/order/controller/OrderController.java b/src/main/java/store/mybooks/front/order/controller/OrderController.java index b0e0f9ae..6a31954d 100644 --- a/src/main/java/store/mybooks/front/order/controller/OrderController.java +++ b/src/main/java/store/mybooks/front/order/controller/OrderController.java @@ -83,7 +83,7 @@ public class OrderController { * methodName : viewCheckAddress
    * author : minsu11
    * description : 회원의 주소 목록만 나오는 view. - *
    * + *
    * * @param modelMap model * @return string diff --git a/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java index 6367d265..4da7f350 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/BookInfoRequest.java @@ -24,6 +24,7 @@ public class BookInfoRequest { private Long bookId; private Integer saleCost; private Integer bookCost; + private Integer amount; private Integer selectWrapId; private Long selectCouponId; diff --git a/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java b/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java index 6f531284..651e6c8f 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java @@ -40,6 +40,15 @@ public class OrderInfoCheckService { private final UserPointAdaptor userPointAdaptor; + /** + * methodName : checkModulation
    + * author : minsu11
    + * description : {@Code html}에서 변조 데이터 들어왔는지 검사. + *
    + * + * @param bookOrderRequest the book order request + * @param cartInfo the cart info + */ public void checkModulation(BookOrderRequest bookOrderRequest, List cartInfo) { OrderInfoRequest orderInfoRequest = bookOrderRequest.getOrderInfo(); List bookInfoRequest = bookOrderRequest.getBookInfoList(); @@ -49,7 +58,16 @@ public void checkModulation(BookOrderRequest bookOrderRequest, List } - //todo 수량 체크하는 부분 추가해야함 + /** + * methodName : checkBookInfo
    + * author : minsu11
    + * description : 장바구니에 담긴 정보랑 주문할 도서 정보가 같은지 확인. + *
    * + * + * @param bookInfos 주문할 도서 정보 + * @param cartInfos 장바구니 정보 + */ +//todo 수량 체크하는 부분 추가해야함 public void checkBookInfo(List bookInfos, List cartInfos) { if (bookInfos.size() == cartInfos.size()) { throw new OrderInfoNotMatchException("장바구니에 담긴 물품의 갯수가 다름"); @@ -57,8 +75,11 @@ public void checkBookInfo(List bookInfos, List cart for (int i = 0; i < bookInfos.size(); i++) { BookInfoRequest bookInfo = bookInfos.get(i); CartDetail cartInfo = cartInfos.get(i); - if (!bookInfo.getBookId().equals(cartInfo.getBookId()) - || !bookInfo.getSaleCost().equals(cartInfo.getSaleCost())) { + if ( + !bookInfo.getBookId().equals(cartInfo.getBookId()) + || !bookInfo.getSaleCost().equals(cartInfo.getSaleCost()) + || !Objects.equals(bookInfo.getAmount(), cartInfo.getCartDetailAmount()) + ) { throw new OrderInfoNotMatchException("도서의 정보가 다름"); } if (Objects.nonNull(bookInfo.getSelectWrapId())) { @@ -70,6 +91,14 @@ public void checkBookInfo(List bookInfos, List cart } } + /** + * methodName : checkDuplicateCoupon
    + * author : minsu11
    + * description : 같은 쿠폰이 있는지 확인. + *
    * + * + * @param bookInfos the book infos + */ public void checkDuplicateCoupon(List bookInfos) { for (int i = 0; i < bookInfos.size(); i++) { for (int j = i + 1; j < bookInfos.size(); j++) { @@ -80,6 +109,14 @@ public void checkDuplicateCoupon(List bookInfos) { } } + /** + * methodName : checkBookCoupon
    + * author : minsu11
    + * description : 책에 적용된 쿠폰 검사. 본인이 소유한 쿠폰이 아니면 {@cod throw}를 던짐. + *
    * + * + * @param bookInfo 도서관련 DTO + */ public void checkBookCoupon(BookInfoRequest bookInfo) { boolean isCheck = false; List couponList = userCouponAdaptor.getUsableUserCoupon(bookInfo.getBookId()); @@ -93,16 +130,32 @@ public void checkBookCoupon(BookInfoRequest bookInfo) { } } + /** + * methodName : checkOrderInfo
    + * author : minsu11
    + * description : 회원의 주문 정보를 검사하는 메서드. + *
    * + * + * @param orderInfoRequest 주문 정보가 담긴 DTO + */ public void checkOrderInfo(OrderInfoRequest orderInfoRequest) { orderAdapter.checkOrderUserAddressInfo(orderInfoRequest.getAddressId()); checkPoint(orderInfoRequest.getUsingPoint()); } - public Integer checkPoint(Integer usingPoint) { + /** + * methodName : checkPoint
    + * author : minsu11
    + * description : 회원이 가진 포인트 검사. DB에 등록된 회원의 포인트 보다 높으면 + * {@code OrderInfoNotMatchException}을 던짐. + *
    * + * + * @param usingPoint 사용할 포인트 + */ + public void checkPoint(Integer usingPoint) { PointResponse pointsHeld = userPointAdaptor.getPointsHeld(); if (usingPoint < 0 || pointsHeld.getRemainingPoint() < usingPoint) { throw new OrderInfoNotMatchException("포인트 정보가 다름"); } - return usingPoint; } } From 21b08d92216ededc50e8f0284377f431e906b492 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sat, 16 Mar 2024 21:44:18 +0900 Subject: [PATCH 022/147] =?UTF-8?q?docs:=20=EC=9E=90=EB=B0=94=EB=8F=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/cart/service/CartNonUserService.java | 7 +++++++ .../mybooks/front/cart/service/CartUserService.java | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java b/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java index 8816199c..c439c6ec 100644 --- a/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java +++ b/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java @@ -93,6 +93,13 @@ public void registerBookToCart(Cookie cookie, HttpServletResponse response, } + /** + * Order book in cart. + * + * @param cartCookie the cart cookie + * @param response the response + * @param orderItemRequestList the order item request list + */ public void orderBookInCart(Cookie cartCookie, HttpServletResponse response, List orderItemRequestList) { if (Objects.isNull(cartCookie)) { diff --git a/src/main/java/store/mybooks/front/cart/service/CartUserService.java b/src/main/java/store/mybooks/front/cart/service/CartUserService.java index d15bdbf4..f5928abe 100644 --- a/src/main/java/store/mybooks/front/cart/service/CartUserService.java +++ b/src/main/java/store/mybooks/front/cart/service/CartUserService.java @@ -104,6 +104,11 @@ public void deleteBookFromCart(Long bookId) { } } + /** + * Order book in cart. + * + * @param orderItemRequestList the order item request list + */ public void orderBookInCart(List orderItemRequestList) { List bookFromCart = getBookFromCart(); if (Objects.isNull(bookFromCart) || bookFromCart.isEmpty()) { @@ -123,11 +128,19 @@ public void orderBookInCart(List orderItemRequestList) { bookFromCart.forEach(cartDetail -> redisTemplate.opsForList().rightPush(carKey, cartDetail)); } + /** + * Delete all book from cart. + */ public void deleteAllBookFromCart() { String cartKey = cartKey(); redisTemplate.delete(cartKey); } + /** + * Cart key string. + * + * @return the string + */ public String cartKey() { UserGetResponse user = userAdaptor.findUser(); return CartController.CART_COOKIE_VALUE + ":" + user.getEmail(); From e5d7e05f303d7d6ee805ad0a684642bf82cd4035 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 23:35:15 +0900 Subject: [PATCH 023/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20dto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/dto/request/OrderCreateRequest.java | 15 ++++++++++-- .../dto/response/BookOrderCreateResponse.java | 24 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/main/java/store/mybooks/front/order/dto/response/BookOrderCreateResponse.java diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java index 57d526dd..d74327f4 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java @@ -1,7 +1,9 @@ package store.mybooks.front.order.dto.request; +import java.time.LocalDate; +import java.util.List; +import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.Setter; /** * packageName : store.mybooks.front.order.dto.request
    @@ -15,6 +17,15 @@ * 3/16/24 minsu11 최초 생성
    */ @Getter -@Setter +@AllArgsConstructor public class OrderCreateRequest { + private List bookInfoList; + private String deliveryName; + private LocalDate deliveryDate; + private Integer point; + private String recipientName; + private String recipientAddress; + private String recipientPhoneNumber; + private String receiverMessage; + private String orderNumber; } diff --git a/src/main/java/store/mybooks/front/order/dto/response/BookOrderCreateResponse.java b/src/main/java/store/mybooks/front/order/dto/response/BookOrderCreateResponse.java new file mode 100644 index 00000000..2d24ef76 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/dto/response/BookOrderCreateResponse.java @@ -0,0 +1,24 @@ +package store.mybooks.front.order.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * packageName : store.mybooks.front.order.dto.response
    + * fileName : BookOrderCreateResponse
    + * author : minsu11
    + * date : 3/16/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/16/24 minsu11 최초 생성
    + */ +@Getter +@AllArgsConstructor +public class BookOrderCreateResponse { + private String orderStatus; + private String number; + private Integer totalCost; + +} From 8b7932001368a1ac6c803f1b483cab00f091da03 Mon Sep 17 00:00:00 2001 From: minsu Date: Sat, 16 Mar 2024 23:36:21 +0900 Subject: [PATCH 024/147] =?UTF-8?q?feat:=20=EB=B0=B0=EC=86=A1=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=82=AC=ED=95=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/order/dto/request/OrderInfoRequest.java | 2 ++ src/main/resources/templates/checkout.html | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java index b4160382..4b4c2422 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java @@ -27,8 +27,10 @@ public class OrderInfoRequest { private Long addressId; private String recipientAddress; private String deliveryDate; + private String receiverMessage; private Integer usingPoint; private Integer wrapCost; private Integer couponApplicationAmount; + } diff --git a/src/main/resources/templates/checkout.html b/src/main/resources/templates/checkout.html index 30bfdb63..8f6315fe 100644 --- a/src/main/resources/templates/checkout.html +++ b/src/main/resources/templates/checkout.html @@ -262,15 +262,23 @@
    포인트 사용
  • -
    배송 날짜
    +
    배송
    +
    배송 날짜
    +
    +
    배송 시 요청 사항
    + +
  • From 3aacaebd5973a831775f9f5ec6b643d35dacf5e6 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sun, 17 Mar 2024 04:54:37 +0900 Subject: [PATCH 025/147] =?UTF-8?q?refactor:=20url=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybooks/front/cart/controller/CartController.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/store/mybooks/front/cart/controller/CartController.java b/src/main/java/store/mybooks/front/cart/controller/CartController.java index 0334070e..e2727c7e 100644 --- a/src/main/java/store/mybooks/front/cart/controller/CartController.java +++ b/src/main/java/store/mybooks/front/cart/controller/CartController.java @@ -111,10 +111,11 @@ private boolean isUser(HttpServletRequest request) { return Objects.nonNull(CookieUtils.getIdentityCookieValue(request)); } - @PostMapping("/cart/order") - public ResponseEntity cartOrder(@CookieValue(name = CartUtil.CART_COOKIE, required = false) Cookie cartCookie, - HttpServletResponse response, HttpServletRequest request, - @RequestBody List orderItemRequest) { + @PostMapping("/cart/update") + public ResponseEntity cartAmountUpdate( + @CookieValue(name = CartUtil.CART_COOKIE, required = false) Cookie cartCookie, + HttpServletResponse response, HttpServletRequest request, + @RequestBody List orderItemRequest) { if (isUser(request)) { cartUserService.orderBookInCart(orderItemRequest); } else { From f30974c7024fb13a4d83142769744fbb9016039f Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sun, 17 Mar 2024 04:55:41 +0900 Subject: [PATCH 026/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EB=88=8C=EB=A0=80=EC=9D=84?= =?UTF-8?q?=EB=95=8C=20=EC=88=98=EB=9F=89=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=ED=96=88=EC=9D=84=EB=95=8C=20=EB=B9=84=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?->=20=EB=8F=99=EA=B8=B0=EB=A1=9C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=88=98=EB=9F=89=20validation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/cart.html | 87 +++++++++++++++++++------- 1 file changed, 66 insertions(+), 21 deletions(-) diff --git a/src/main/resources/templates/cart.html b/src/main/resources/templates/cart.html index 878b5987..7942ec50 100644 --- a/src/main/resources/templates/cart.html +++ b/src/main/resources/templates/cart.html @@ -145,6 +145,9 @@
    { + let orderItems = []; + let cartItems = document.querySelectorAll('.cart-single-list'); - cartItems.forEach(function (cartItem) { - let bookId = cartItem.getAttribute('data-book-id'); - let amount = cartItem.querySelector('.counter').innerText; + cartItems.forEach(function (cartItem) { + let bookId = cartItem.getAttribute('data-book-id'); + let amount = cartItem.querySelector('.counter').innerText; - orderItems.push({ - bookId: bookId, - amount: amount + orderItems.push({ + bookId: bookId, + amount: amount + }); }); + + fetch('/cart/update', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(orderItems) + }) + .then(response => { + if (!response.ok) { + throw new Error("수량을 업데이트 할때 에러가 발생했다"); + } + resolve(); + }) + .catch(error => { + reject(error); + }); }); + } - fetch('/cart/order', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(orderItems) - }) - .then(response => { - if (!response.ok) { - throw new Error('response not ok'); + async function validateQuantity() { + return new Promise((resolve, reject) => { + let isValid = true; + let cartItems = document.querySelectorAll('.cart-single-list'); + + cartItems.forEach(function (cartItem) { + let quantity = parseInt(cartItem.querySelector('.counter').innerText); + if (quantity <= 0) { + isValid = false; + return; } - return response.json(); - }) + }); + + resolve(isValid); + }); } + @@ -212,7 +256,8 @@
  • From 20d0cf688f1ec5111f71846a4e3e7437303d66e5 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sun, 17 Mar 2024 04:58:51 +0900 Subject: [PATCH 027/147] =?UTF-8?q?Revert=20"feat:=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EB=88=8C=EB=A0=80?= =?UTF-8?q?=EC=9D=84=EB=95=8C=20=EC=88=98=EB=9F=89=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=ED=96=88=EC=9D=84=EB=95=8C=20=EB=B9=84?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20->=20=EB=8F=99=EA=B8=B0=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=EC=88=98=EB=9F=89=20validation"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit f30974c7024fb13a4d83142769744fbb9016039f. --- src/main/resources/templates/cart.html | 87 +++++++------------------- 1 file changed, 21 insertions(+), 66 deletions(-) diff --git a/src/main/resources/templates/cart.html b/src/main/resources/templates/cart.html index 7942ec50..878b5987 100644 --- a/src/main/resources/templates/cart.html +++ b/src/main/resources/templates/cart.html @@ -145,9 +145,6 @@
    { - let orderItems = []; - let cartItems = document.querySelectorAll('.cart-single-list'); + let orderItems = []; + let cartItems = document.querySelectorAll('.cart-single-list'); - cartItems.forEach(function (cartItem) { - let bookId = cartItem.getAttribute('data-book-id'); - let amount = cartItem.querySelector('.counter').innerText; + cartItems.forEach(function (cartItem) { + let bookId = cartItem.getAttribute('data-book-id'); + let amount = cartItem.querySelector('.counter').innerText; - orderItems.push({ - bookId: bookId, - amount: amount - }); + orderItems.push({ + bookId: bookId, + amount: amount }); - - fetch('/cart/update', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(orderItems) - }) - .then(response => { - if (!response.ok) { - throw new Error("수량을 업데이트 할때 에러가 발생했다"); - } - resolve(); - }) - .catch(error => { - reject(error); - }); }); - } - async function validateQuantity() { - return new Promise((resolve, reject) => { - let isValid = true; - let cartItems = document.querySelectorAll('.cart-single-list'); - - cartItems.forEach(function (cartItem) { - let quantity = parseInt(cartItem.querySelector('.counter').innerText); - if (quantity <= 0) { - isValid = false; - return; + fetch('/cart/order', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(orderItems) + }) + .then(response => { + if (!response.ok) { + throw new Error('response not ok'); } - }); - - resolve(isValid); - }); + return response.json(); + }) } - @@ -256,8 +212,7 @@
    From 9e092f9fe7abfc8d35948bcd9634d798da249129 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sun, 17 Mar 2024 04:59:01 +0900 Subject: [PATCH 028/147] =?UTF-8?q?Revert=20"refactor:=20url=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EC=88=98=EC=A0=95"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 3aacaebd5973a831775f9f5ec6b643d35dacf5e6. --- .../mybooks/front/cart/controller/CartController.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/store/mybooks/front/cart/controller/CartController.java b/src/main/java/store/mybooks/front/cart/controller/CartController.java index e2727c7e..0334070e 100644 --- a/src/main/java/store/mybooks/front/cart/controller/CartController.java +++ b/src/main/java/store/mybooks/front/cart/controller/CartController.java @@ -111,11 +111,10 @@ private boolean isUser(HttpServletRequest request) { return Objects.nonNull(CookieUtils.getIdentityCookieValue(request)); } - @PostMapping("/cart/update") - public ResponseEntity cartAmountUpdate( - @CookieValue(name = CartUtil.CART_COOKIE, required = false) Cookie cartCookie, - HttpServletResponse response, HttpServletRequest request, - @RequestBody List orderItemRequest) { + @PostMapping("/cart/order") + public ResponseEntity cartOrder(@CookieValue(name = CartUtil.CART_COOKIE, required = false) Cookie cartCookie, + HttpServletResponse response, HttpServletRequest request, + @RequestBody List orderItemRequest) { if (isUser(request)) { cartUserService.orderBookInCart(orderItemRequest); } else { From bfe4ece6d20069ec0096c7b5d287f9ddfe83adb3 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sun, 17 Mar 2024 05:03:37 +0900 Subject: [PATCH 029/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EB=88=8C=EB=A0=80=EC=9D=84?= =?UTF-8?q?=EB=95=8C=20=EC=88=98=EB=9F=89=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=ED=96=88=EC=9D=84=EB=95=8C=20=EB=B9=84=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?->=20=EB=8F=99=EA=B8=B0=EB=A1=9C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=88=98=EB=9F=89=20validation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/cart.html | 147 ++++++++++++++++--------- 1 file changed, 92 insertions(+), 55 deletions(-) diff --git a/src/main/resources/templates/cart.html b/src/main/resources/templates/cart.html index 878b5987..0daebacf 100644 --- a/src/main/resources/templates/cart.html +++ b/src/main/resources/templates/cart.html @@ -4,29 +4,28 @@ layout:decorate="~{common/layout/my-books-layout}" xmlns:th="http://www.thymeleaf.org"> - @@ -49,8 +48,7 @@

    Cart

    - - +
    @@ -78,8 +76,7 @@

    Cart

    삭제

    - - + +

    - @@ -202,8 +241,7 @@
    --> - - + - - From 0462e230fa71a12ea1bef2ae98d740ebd00e11b9 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Sun, 17 Mar 2024 05:04:01 +0900 Subject: [PATCH 030/147] =?UTF-8?q?refactor:=20url=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/mybooks/front/cart/controller/CartController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/store/mybooks/front/cart/controller/CartController.java b/src/main/java/store/mybooks/front/cart/controller/CartController.java index 0334070e..57b3e15f 100644 --- a/src/main/java/store/mybooks/front/cart/controller/CartController.java +++ b/src/main/java/store/mybooks/front/cart/controller/CartController.java @@ -111,7 +111,7 @@ private boolean isUser(HttpServletRequest request) { return Objects.nonNull(CookieUtils.getIdentityCookieValue(request)); } - @PostMapping("/cart/order") + @PostMapping("/cart/update") public ResponseEntity cartOrder(@CookieValue(name = CartUtil.CART_COOKIE, required = false) Cookie cartCookie, HttpServletResponse response, HttpServletRequest request, @RequestBody List orderItemRequest) { From 93a9c8c6e693f7f25004f4dcf671160e8813521c Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Sun, 17 Mar 2024 12:29:45 +0900 Subject: [PATCH 031/147] =?UTF-8?q?refactor:=20AuthorizationAspect=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=EB=90=98=EB=8A=94=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/auth/aop/AuthorizationAspect.java | 40 ++++++++----------- .../front/global/GlobalControllerAdvice.java | 7 +++- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/main/java/store/mybooks/front/auth/aop/AuthorizationAspect.java b/src/main/java/store/mybooks/front/auth/aop/AuthorizationAspect.java index e1d4ebb7..3ff0c6eb 100644 --- a/src/main/java/store/mybooks/front/auth/aop/AuthorizationAspect.java +++ b/src/main/java/store/mybooks/front/auth/aop/AuthorizationAspect.java @@ -79,32 +79,26 @@ public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable { new RefreshTokenRequest((String) request.getAttribute("identity_cookie_value"), Utils.getUserIp(request), Utils.getUserAgent(request))); - // 리프래시 토큰 만료 아니고 유효해서 재발급 됐음 - if (refreshTokenResponse.getIsValid()) { - // 쿠키에 재발급한 엑세스토큰 넣어주고 - CookieUtils.addJwtCookie(Objects.requireNonNull(response), refreshTokenResponse.getAccessToken()); - // 헤더 설정해주고 기존 메서드 다시 불러 - RequestContextHolder.currentRequestAttributes() - .setAttribute("authHeader", Utils.refreshAuthHeader(refreshTokenResponse.getAccessToken()), - RequestAttributes.SCOPE_REQUEST); - // 어드민 쿠키를 체크하는 redis 만료시간 재설정 - String adminCookieValue = (String) request.getAttribute("admin_cookie_value"); - if (Objects.nonNull(adminCookieValue)) { - redisAuthService.expireValues(adminCookieValue, redisProperties.getAdminExpiration()); - // 쿠키 만료시간 재설정 - CookieUtils.addAdminCookie(response,adminCookieValue); - } - return joinPoint.proceed(); - } else { - // 리프래시 토큰 만료됐거나 , 유효하지 않음 - CookieUtils.deleteJwtCookie(Objects.requireNonNull(response)); - CookieUtils.deleteAdminCookie(response); - // 리프래시 토큰이 만료면 TokenExpiredException -> 로그인하세요 + // 리프래시 토큰 만료 됐거나 유효하지않음 + if (refreshTokenResponse.getAccessToken().isEmpty()) { throw new TokenExpiredException(); } + + // 쿠키에 재발급한 엑세스토큰 넣어주고 + CookieUtils.addJwtCookie(Objects.requireNonNull(response), refreshTokenResponse.getAccessToken()); + // 헤더 설정해주고 기존 메서드 다시 불러 + RequestContextHolder.currentRequestAttributes() + .setAttribute("authHeader", Utils.refreshAuthHeader(refreshTokenResponse.getAccessToken()), + RequestAttributes.SCOPE_REQUEST); + // 어드민 쿠키를 체크하는 redis 만료시간 재설정 + String adminCookieValue = (String) request.getAttribute("admin_cookie_value"); + if (Objects.nonNull(adminCookieValue)) { + redisAuthService.expireValues(adminCookieValue, redisProperties.getAdminExpiration()); + // 쿠키 만료시간 재설정 + CookieUtils.addAdminCookie(response, adminCookieValue); + } + return joinPoint.proceed(); } else if (error.contains(ErrorMessage.INVALID_TOKEN.getMessage())) { // 토큰위조됨 쿠키삭제 - CookieUtils.deleteJwtCookie(Objects.requireNonNull(response)); - CookieUtils.deleteAdminCookie(response); throw new AuthenticationIsNotValidException(); } else if (error.contains(ErrorMessage.STATUS_IS_DORMANT_EXCEPTION.getMessage())) { // 휴면상태 -> 휴면인증사이트로 throw new StatusIsDormancyException(); diff --git a/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java b/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java index b277b39e..31b94ffc 100644 --- a/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java +++ b/src/main/java/store/mybooks/front/global/GlobalControllerAdvice.java @@ -1,6 +1,8 @@ package store.mybooks.front.global; +import java.util.Objects; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.client.HttpClientErrorException; @@ -9,6 +11,7 @@ import store.mybooks.front.auth.exception.StatusIsDormancyException; import store.mybooks.front.auth.exception.StatusIsLockException; import store.mybooks.front.auth.exception.TokenExpiredException; +import store.mybooks.front.utils.CookieUtils; /** * packageName : store.mybooks.front.global @@ -48,9 +51,11 @@ public String handleBadRequestAndNotFoundException(Exception exception, HttpServ // 토큰 인증/인가와 관련된 모든 예외를 잡음 @ExceptionHandler({AuthenticationIsNotValidException.class, AccessIdForbiddenException.class, StatusIsDormancyException.class, TokenExpiredException.class, StatusIsLockException.class}) - public String handleAuthException(RuntimeException ex) { + public String handleAuthException(RuntimeException ex, HttpServletResponse response) { if (ex instanceof AuthenticationIsNotValidException | ex instanceof TokenExpiredException) { + CookieUtils.deleteJwtCookie(Objects.requireNonNull(response)); + CookieUtils.deleteAdminCookie(response); return "redirect:/login"; // 토큰조작 됐거나 , 만료됐음 -> 다시 로그인 } else if (ex instanceof StatusIsDormancyException) { return "redirect:/verification/dormancy"; // 유저계정 휴면상태 From 22a5fab3142ac9fe4fd7f5b64e91bc5b3a3c2f94 Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Sun, 17 Mar 2024 12:30:01 +0900 Subject: [PATCH 032/147] =?UTF-8?q?refactor:=20RefreshTokenresponse=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybooks/front/auth/dto/response/RefreshTokenResponse.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/store/mybooks/front/auth/dto/response/RefreshTokenResponse.java b/src/main/java/store/mybooks/front/auth/dto/response/RefreshTokenResponse.java index 7eba7003..f63be8c6 100644 --- a/src/main/java/store/mybooks/front/auth/dto/response/RefreshTokenResponse.java +++ b/src/main/java/store/mybooks/front/auth/dto/response/RefreshTokenResponse.java @@ -1,5 +1,6 @@ package store.mybooks.front.auth.dto.response; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -16,9 +17,9 @@ */ @Getter @NoArgsConstructor +@AllArgsConstructor public class RefreshTokenResponse { - private Boolean isValid; private String accessToken; } From 632863ef9bd39ad1cc1205812262f580e3bbf03f Mon Sep 17 00:00:00 2001 From: minsu Date: Sun, 17 Mar 2024 14:50:17 +0900 Subject: [PATCH 033/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/order/adaptor/OrderAdaptor.java | 22 +++++- .../order/controller/OrderController.java | 11 ++- ...quest.java => BookOrderCreateRequest.java} | 16 ++-- .../order/dto/request/OrderInfoRequest.java | 1 - .../dto/request/OrderUserInfoRequest.java | 4 + .../order/service/OrderInfoCheckService.java | 29 ++++--- .../front/order/service/OrderService.java | 77 ++++++++++++++++++- .../mybooks/front/order/utils/OrderUtils.java | 2 + .../adaptor/UserCouponAdaptor.java | 23 ++++++ .../model/response/UserCouponResponse.java | 31 ++++++++ .../resources/templates/checkout-coupon.html | 32 ++++---- src/main/resources/templates/checkout.html | 30 +++++--- 12 files changed, 226 insertions(+), 52 deletions(-) rename src/main/java/store/mybooks/front/order/dto/request/{OrderCreateRequest.java => BookOrderCreateRequest.java} (68%) create mode 100644 src/main/java/store/mybooks/front/user_coupon/model/response/UserCouponResponse.java diff --git a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java index acedcb17..04db8a3d 100644 --- a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java +++ b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java @@ -2,12 +2,16 @@ import lombok.RequiredArgsConstructor; import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; +import store.mybooks.front.auth.Annotation.RequiredAuthorization; import store.mybooks.front.config.GatewayAdaptorProperties; +import store.mybooks.front.order.dto.request.BookOrderCreateRequest; +import store.mybooks.front.order.dto.response.BookOrderCreateResponse; import store.mybooks.front.utils.Utils; /** @@ -26,7 +30,8 @@ public class OrderAdaptor { private final RestTemplate restTemplate; private final GatewayAdaptorProperties gatewayAdaptorProperties; - private static final String URL = "/api/order"; + private static final String URL = "/api/orders"; + private static final String MEMBER_URL = "/api/member/orders"; /** * methodName : checkOrderUserAddressInfo
    @@ -37,7 +42,8 @@ public class OrderAdaptor { * @param id 주소 아이디 */ public void checkOrderUserAddressInfo(Long id) { - ResponseEntity exchange = restTemplate.exchange(URL + "/check/address/{id}", + ResponseEntity exchange = restTemplate.exchange( + gatewayAdaptorProperties.getAddress() + URL + "/check/address/{id}", HttpMethod.GET, null, new ParameterizedTypeReference() { @@ -45,4 +51,16 @@ public void checkOrderUserAddressInfo(Long id) { Utils.getResponseEntity(exchange, HttpStatus.NO_CONTENT); } + + @RequiredAuthorization + public BookOrderCreateResponse createBookOrder(BookOrderCreateRequest request) { + HttpEntity httpEntity = new HttpEntity<>(request, Utils.getAuthHeader()); + ResponseEntity exchange = restTemplate.exchange( + gatewayAdaptorProperties.getAddress() + MEMBER_URL, + HttpMethod.POST, + httpEntity, + new ParameterizedTypeReference() { + }); + return Utils.getResponseEntity(exchange, HttpStatus.CREATED); + } } diff --git a/src/main/java/store/mybooks/front/order/controller/OrderController.java b/src/main/java/store/mybooks/front/order/controller/OrderController.java index 6a31954d..6bc982ae 100644 --- a/src/main/java/store/mybooks/front/order/controller/OrderController.java +++ b/src/main/java/store/mybooks/front/order/controller/OrderController.java @@ -17,6 +17,7 @@ import store.mybooks.front.cart.service.CartUserService; import store.mybooks.front.order.dto.request.BookOrderDirectRequest; import store.mybooks.front.order.dto.request.BookOrderRequest; +import store.mybooks.front.order.dto.response.BookOrderCreateResponse; import store.mybooks.front.order.service.OrderInfoCheckService; import store.mybooks.front.order.service.OrderService; import store.mybooks.front.user.adaptor.UserAdaptor; @@ -160,7 +161,6 @@ public String viewOrderPage(@ModelAttribute BookOrderDirectRequest request, LocalDate localDate = LocalDate.now(); UserGetResponse user = userAdaptor.findUser(); List bookFromCart = cartUserService.getBookFromCart(); - log.info("날짜: {}", localDate); modelMap.put("bookLists", bookFromCart); modelMap.put("totalCost", orderService.calculateTotalCost(bookFromCart)); modelMap.put("point", pointResponse.getRemainingPoint()); @@ -173,9 +173,16 @@ public String viewOrderPage(@ModelAttribute BookOrderDirectRequest request, @PostMapping("/order") public String doOrder(@ModelAttribute BookOrderRequest orderRequest) { + log.info("값 : {}", orderRequest.toString()); List cart = cartUserService.getBookFromCart(); orderInfoCheckService.checkModulation(orderRequest, cart); - log.info("값 : {}", orderRequest.toString()); + int point = orderService.getPoint(orderRequest.getOrderInfo()); + int couponCost = orderService.calculateBookCouponCost(orderRequest.getBookInfoList()); + int wrapCost = orderService.calculateBookWrapCost(orderRequest.getBookInfoList()); + int totalCost = orderService.calculateTotalCost(cart); + BookOrderCreateResponse response = orderService.createOrder(orderRequest.getBookInfoList(), + orderRequest.getOrderInfo(), point, couponCost, wrapCost, totalCost); + return "test"; } } diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java b/src/main/java/store/mybooks/front/order/dto/request/BookOrderCreateRequest.java similarity index 68% rename from src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java rename to src/main/java/store/mybooks/front/order/dto/request/BookOrderCreateRequest.java index d74327f4..6a7a621e 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderCreateRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/BookOrderCreateRequest.java @@ -1,6 +1,5 @@ package store.mybooks.front.order.dto.request; -import java.time.LocalDate; import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; @@ -18,14 +17,13 @@ */ @Getter @AllArgsConstructor -public class OrderCreateRequest { +public class BookOrderCreateRequest { private List bookInfoList; - private String deliveryName; - private LocalDate deliveryDate; - private Integer point; - private String recipientName; - private String recipientAddress; - private String recipientPhoneNumber; - private String receiverMessage; + private OrderInfoRequest orderInfoRequest; private String orderNumber; + private Integer pointCost; + private Integer couponCost; + private Integer wrapCost; + private Integer totalCost; + } diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java index 4b4c2422..d86f34a9 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java @@ -24,7 +24,6 @@ public class OrderInfoRequest { private String recipientName; private String recipientPhoneNumber; - private Long addressId; private String recipientAddress; private String deliveryDate; private String receiverMessage; diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderUserInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderUserInfoRequest.java index d0b9af68..0d7b9bb3 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderUserInfoRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderUserInfoRequest.java @@ -3,6 +3,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.ToString; /** * packageName : store.mybooks.front.order.dto.request
    @@ -18,8 +19,11 @@ @Getter @Setter @NoArgsConstructor +@ToString public class OrderUserInfoRequest { private String userName; private String email; private String phoneNumber; + private Long addressId; + } diff --git a/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java b/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java index 651e6c8f..45b34613 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderInfoCheckService.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Objects; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import store.mybooks.front.admin.wrap.adaptor.WrapAdaptor; import store.mybooks.front.book.adaptor.BookAdaptor; @@ -11,6 +12,7 @@ import store.mybooks.front.order.dto.request.BookInfoRequest; import store.mybooks.front.order.dto.request.BookOrderRequest; import store.mybooks.front.order.dto.request.OrderInfoRequest; +import store.mybooks.front.order.dto.request.OrderUserInfoRequest; import store.mybooks.front.order.exception.OrderInfoNotMatchException; import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; import store.mybooks.front.user_coupon.adaptor.UserCouponAdaptor; @@ -29,6 +31,7 @@ * -----------------------------------------------------------
    * 3/5/24 minsu11 최초 생성
    */ +@Slf4j @Service @RequiredArgsConstructor public class OrderInfoCheckService { @@ -52,9 +55,10 @@ public class OrderInfoCheckService { public void checkModulation(BookOrderRequest bookOrderRequest, List cartInfo) { OrderInfoRequest orderInfoRequest = bookOrderRequest.getOrderInfo(); List bookInfoRequest = bookOrderRequest.getBookInfoList(); - checkOrderInfo(orderInfoRequest); + checkOrderAddress(bookOrderRequest.getUserInfo()); checkDuplicateCoupon(bookInfoRequest); checkBookInfo(bookInfoRequest, cartInfo); + checkPoint(orderInfoRequest.getUsingPoint()); } @@ -69,15 +73,15 @@ public void checkModulation(BookOrderRequest bookOrderRequest, List */ //todo 수량 체크하는 부분 추가해야함 public void checkBookInfo(List bookInfos, List cartInfos) { - if (bookInfos.size() == cartInfos.size()) { + if (bookInfos.size() != cartInfos.size()) { throw new OrderInfoNotMatchException("장바구니에 담긴 물품의 갯수가 다름"); } for (int i = 0; i < bookInfos.size(); i++) { BookInfoRequest bookInfo = bookInfos.get(i); CartDetail cartInfo = cartInfos.get(i); if ( - !bookInfo.getBookId().equals(cartInfo.getBookId()) - || !bookInfo.getSaleCost().equals(cartInfo.getSaleCost()) + !Objects.equals(bookInfo.getBookId(), cartInfo.getBookId()) + || !Objects.equals(bookInfo.getSaleCost(), cartInfo.getSaleCost()) || !Objects.equals(bookInfo.getAmount(), cartInfo.getCartDetailAmount()) ) { throw new OrderInfoNotMatchException("도서의 정보가 다름"); @@ -102,6 +106,10 @@ public void checkBookInfo(List bookInfos, List cart public void checkDuplicateCoupon(List bookInfos) { for (int i = 0; i < bookInfos.size(); i++) { for (int j = i + 1; j < bookInfos.size(); j++) { + if (Objects.isNull(bookInfos.get(i).getSelectCouponId())) { + break; + } + if (Objects.equals(bookInfos.get(i).getSelectCouponId(), bookInfos.get(j).getSelectCouponId())) { throw new OrderInfoNotMatchException("같은 쿠폰이 입력됨"); } @@ -121,7 +129,7 @@ public void checkBookCoupon(BookInfoRequest bookInfo) { boolean isCheck = false; List couponList = userCouponAdaptor.getUsableUserCoupon(bookInfo.getBookId()); for (int j = 0; j < couponList.size(); j++) { - if (Objects.equals(couponList.get(j), bookInfo.getSelectCouponId())) { + if (Objects.equals(couponList.get(j).getUserCouponId(), bookInfo.getSelectCouponId())) { isCheck = true; } } @@ -136,11 +144,11 @@ public void checkBookCoupon(BookInfoRequest bookInfo) { * description : 회원의 주문 정보를 검사하는 메서드. *
    * * - * @param orderInfoRequest 주문 정보가 담긴 DTO + * @param userInfoRequest 주문 정보가 담긴 DTO */ - public void checkOrderInfo(OrderInfoRequest orderInfoRequest) { - orderAdapter.checkOrderUserAddressInfo(orderInfoRequest.getAddressId()); - checkPoint(orderInfoRequest.getUsingPoint()); + public void checkOrderAddress(OrderUserInfoRequest userInfoRequest) { + Long id = userInfoRequest.getAddressId(); + orderAdapter.checkOrderUserAddressInfo(id); } /** @@ -154,8 +162,11 @@ public void checkOrderInfo(OrderInfoRequest orderInfoRequest) { */ public void checkPoint(Integer usingPoint) { PointResponse pointsHeld = userPointAdaptor.getPointsHeld(); + if (usingPoint < 0 || pointsHeld.getRemainingPoint() < usingPoint) { throw new OrderInfoNotMatchException("포인트 정보가 다름"); } } + + } diff --git a/src/main/java/store/mybooks/front/order/service/OrderService.java b/src/main/java/store/mybooks/front/order/service/OrderService.java index f6887b10..c20b1790 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderService.java @@ -1,19 +1,26 @@ package store.mybooks.front.order.service; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import store.mybooks.front.admin.book.model.response.BookDetailResponse; import store.mybooks.front.admin.wrap.adaptor.WrapAdaptor; +import store.mybooks.front.admin.wrap.dto.response.WrapResponse; import store.mybooks.front.book.adaptor.BookAdaptor; import store.mybooks.front.cart.domain.CartDetail; import store.mybooks.front.order.adaptor.OrderAdaptor; +import store.mybooks.front.order.dto.request.BookInfoRequest; +import store.mybooks.front.order.dto.request.BookOrderCreateRequest; import store.mybooks.front.order.dto.request.BookOrderDirectRequest; +import store.mybooks.front.order.dto.request.OrderInfoRequest; +import store.mybooks.front.order.dto.response.BookOrderCreateResponse; +import store.mybooks.front.order.utils.OrderUtils; import store.mybooks.front.user.adaptor.UserAdaptor; import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; import store.mybooks.front.user_coupon.adaptor.UserCouponAdaptor; -import store.mybooks.front.userpoint.adaptor.UserPointAdaptor; +import store.mybooks.front.user_coupon.model.response.UserCouponResponse; /** * packageName : store.mybooks.front.order.service
    @@ -35,7 +42,6 @@ public class OrderService { private final UserAdaptor userAdaptor; private final WrapAdaptor wrapAdaptor; private final UserCouponAdaptor userCouponAdaptor; - private final UserPointAdaptor userPointAdaptor; /** * methodName : getBook
    @@ -73,4 +79,71 @@ public List calculateBooksCost(List cartDetailList) { .collect(Collectors.toList()); } + + public Integer calculateBookCouponCost(List bookInfoRequests) { + int result = 0; + for (int i = 0; i < bookInfoRequests.size(); i++) { + int saleCost = bookInfoRequests.get(i).getSaleCost(); + int amount = bookInfoRequests.get(i).getAmount(); + int couponCost = 0; + Long couponId = bookInfoRequests.get(i).getSelectCouponId(); + if (Objects.nonNull(couponId)) { + + UserCouponResponse coupon = userCouponAdaptor.getUserCouponResponse(couponId); + if (coupon.isRate()) { // true 시 할인 률 + couponCost = (saleCost * amount) * coupon.getDiscountRate() / 100; + } else { + couponCost = coupon.getDiscountCost(); + } + + if (coupon.isRate() && couponCost > coupon.getMaxDiscountCost()) { + couponCost = coupon.getMaxDiscountCost(); + } + } + result += couponCost; + } + + return result; + } + + /** + * methodName : calculateBookWrapCost
    + * author : minsu11
    + * description : 도서에 적용된 총 포장지 가격 계산. + *
    + * + * @param bookInfoRequests the book info requests + * @return the integer + */ + public Integer calculateBookWrapCost(List bookInfoRequests) { + int result = 0; + for (int i = 0; i < bookInfoRequests.size(); i++) { + Integer wrapId = bookInfoRequests.get(i).getSelectWrapId(); + if (Objects.nonNull(wrapId)) { + + WrapResponse wrapResponse = wrapAdaptor.getWrap(wrapId); + result += wrapResponse.getCost(); + } + } + return result; + } + + public Integer getPoint(OrderInfoRequest orderInfoRequest) { + return orderInfoRequest.getUsingPoint(); + } + + public BookOrderCreateResponse createOrder(List bookInfo, + OrderInfoRequest orderInfo, + Integer point, + Integer couponCost, + Integer wrapCost, + Integer totalCost) { + totalCost += wrapCost - point - couponCost; + //todo 해당 주문 번호가 있는지 확인하는 메서드 필요 + String orderNumber = OrderUtils.createOrderNumber(); + + BookOrderCreateRequest request = new BookOrderCreateRequest(bookInfo, orderInfo, + orderNumber, point, couponCost, wrapCost, totalCost); + return orderAdapter.createBookOrder(request); + } } diff --git a/src/main/java/store/mybooks/front/order/utils/OrderUtils.java b/src/main/java/store/mybooks/front/order/utils/OrderUtils.java index e28fb662..a877f29e 100644 --- a/src/main/java/store/mybooks/front/order/utils/OrderUtils.java +++ b/src/main/java/store/mybooks/front/order/utils/OrderUtils.java @@ -39,4 +39,6 @@ public static String createOrderNumber() { return orderNumber.append(time) .append(randomStr).toString(); } + + } diff --git a/src/main/java/store/mybooks/front/user_coupon/adaptor/UserCouponAdaptor.java b/src/main/java/store/mybooks/front/user_coupon/adaptor/UserCouponAdaptor.java index 26cd9cb5..bb9bc2a6 100644 --- a/src/main/java/store/mybooks/front/user_coupon/adaptor/UserCouponAdaptor.java +++ b/src/main/java/store/mybooks/front/user_coupon/adaptor/UserCouponAdaptor.java @@ -15,6 +15,7 @@ import store.mybooks.front.pageable.dto.response.PageResponse; import store.mybooks.front.user_coupon.model.response.UserCouponGetResponse; import store.mybooks.front.user_coupon.model.response.UserCouponGetResponseForOrder; +import store.mybooks.front.user_coupon.model.response.UserCouponResponse; import store.mybooks.front.utils.Utils; /** @@ -105,4 +106,26 @@ public List getUsableUserTotalCoupon() { return Utils.getResponseEntity(exchange, HttpStatus.OK); } + + + /** + * methodName : getUserCouponResponse
    + * author : minsu11
    + * description : 회원 쿠폰 아이디로 쿠폰 조회. + * + * @param id the id + * @return the user coupon response + */ + @RequiredAuthorization + public UserCouponResponse getUserCouponResponse(Long id) { + HttpEntity requestEntity = new HttpEntity<>(Utils.getAuthHeader()); + + ResponseEntity exchange = restTemplate.exchange( + gatewayAdaptorProperties.getAddress() + URL_USER + "/" + id, + HttpMethod.GET, + requestEntity, + new ParameterizedTypeReference() { + }, id); + return Utils.getResponseEntity(exchange, HttpStatus.OK); + } } diff --git a/src/main/java/store/mybooks/front/user_coupon/model/response/UserCouponResponse.java b/src/main/java/store/mybooks/front/user_coupon/model/response/UserCouponResponse.java new file mode 100644 index 00000000..42332665 --- /dev/null +++ b/src/main/java/store/mybooks/front/user_coupon/model/response/UserCouponResponse.java @@ -0,0 +1,31 @@ +package store.mybooks.front.user_coupon.model.response; + +import java.time.LocalDate; +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * packageName : store.mybooks.front.user_coupon.model.response
    + * fileName : UserCouponResponse
    + * author : minsu11
    + * date : 3/17/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/17/24 minsu11 최초 생성
    + */ +@Getter +@NoArgsConstructor +public class UserCouponResponse { + private Long userCouponId; + private String name; + private Integer orderMin; + private Integer discountRate; + private Integer discountCost; + private Integer maxDiscountCost; + private boolean rate; + private LocalDate startDate; + private LocalDate endDate; + +} diff --git a/src/main/resources/templates/checkout-coupon.html b/src/main/resources/templates/checkout-coupon.html index a877f10d..517c80c7 100644 --- a/src/main/resources/templates/checkout-coupon.html +++ b/src/main/resources/templates/checkout-coupon.html @@ -19,20 +19,25 @@ - + - - + @@ -66,17 +71,13 @@ if (!beforecouponCost) { // 행의 처음 선택 했을 때 opener.document.getElementsByClassName('select-coupon-cost')[index].value = couponCost; } else { - alert("쿠폰 적용한 총 값: " + parseInt(opener.document.getElementById("coupon-cost").value)); opener.document.getElementById("coupon-cost").value = parseInt(opener.document.getElementById("coupon-cost").value) - parseInt(beforecouponCost); } opener.document.querySelectorAll('p[class="select-coupon-name"]')[index].textContent = couponName - opener.document.querySelectorAll('.select-coupon-id')[index].value = selectId; - alert(couponCost) - alert(bookSale) - alert(typeof check) - alert(check) + opener.document.getElementsByClassName("select-coupon-id")[index].value = selectId; + alert(index) if (check === "true") { const maxDiscount = parseInt(document.getElementById('coupon-btn').getAttribute("coupon-max-discount-cost")); @@ -106,11 +107,9 @@ opener.document.getElementsByClassName('select-coupon-cost')[index].value = saleCost; alert(opener.document.getElementsByClassName('select-coupon-cost')[index].value) } - alert("book total cost의 값:" + parseInt(bookTotalCost)) - alert("coupon cost의 값:" + parseInt(opener.document.getElementById("coupon-cost").value)) - alert("coupon cost의 값:" + parseInt(opener.document.getElementById('user-point').value)) opener.document.getElementById('totalCost').textContent = (parseInt(bookTotalCost) - parseInt(opener.document.getElementById("coupon-cost").value) - parseInt(opener.document.getElementById('user-point').value)).toString() + alert(opener.document.getElementsByClassName('select-coupon-id')[index].value) window.close() } @@ -140,16 +139,19 @@ const couponBtn = document.getElementById('coupon-btn'); const coupon = radio.parentElement.querySelector('.price'); const couponId = radio.parentElement.querySelector('input[class="coupon-id-form"]').id + alert("error") const couponOrderMin = radio.parentElement.querySelector(".coupon-order-min").getAttribute("data-min") + alert("error1") + alert("if") + alert("test: " + radio.parentElement.querySelector(".max-discount-cost").getAttribute("data-maxDiscount")) const maxDiscountCost = radio.parentElement.querySelector(".max-discount-cost").getAttribute("data-maxDiscount") + couponBtn.setAttribute('coupon-max-discount-cost', maxDiscountCost) alert(couponOrderMin) - alert(maxDiscountCost) couponBtn.setAttribute('coupon-name', radio.value); couponBtn.setAttribute('coupon-cost', coupon.innerText); couponBtn.setAttribute('radio-id', couponId) couponBtn.setAttribute('coupon-rate', coupon.getAttribute('data-check')) couponBtn.setAttribute('coupon-order-min', couponOrderMin) - couponBtn.setAttribute('coupon-max-discount-cost', maxDiscountCost) } diff --git a/src/main/resources/templates/checkout.html b/src/main/resources/templates/checkout.html index 8f6315fe..ce387609 100644 --- a/src/main/resources/templates/checkout.html +++ b/src/main/resources/templates/checkout.html @@ -123,7 +123,7 @@
    받는 사람 정보
    주문 내역 - - + - - + + +
    + +
    @@ -198,7 +204,7 @@
    주문 내역
    - + @@ -209,9 +215,9 @@
    주문 내역 type="hidden"> - +

    @@ -253,7 +259,7 @@
    포인트 사용

    @@ -293,7 +299,7 @@
    결제
    + type="hidden"/>
    From 3d03070cfe5ea1fc16e0d83c2c271543a522cc97 Mon Sep 17 00:00:00 2001 From: minsu Date: Sun, 17 Mar 2024 15:54:05 +0900 Subject: [PATCH 034/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=20=EC=84=9C?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=ED=95=98=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adaptor/DeliveryRuleAdaptor.java | 17 +++++++++++++++++ .../service/DeliveryRuleService.java | 5 +++++ .../front/order/controller/OrderController.java | 5 +++++ .../dto/request/BookOrderCreateRequest.java | 2 +- .../order/dto/request/BookOrderRequest.java | 2 +- .../order/dto/request/OrderInfoRequest.java | 1 + .../mybooks/front/order/utils/OrderUtils.java | 2 +- src/main/resources/templates/checkout.html | 16 ++++++++++++++++ 8 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/main/java/store/mybooks/front/admin/delivery_rule/adaptor/DeliveryRuleAdaptor.java b/src/main/java/store/mybooks/front/admin/delivery_rule/adaptor/DeliveryRuleAdaptor.java index 4f1b18c2..0e59859d 100644 --- a/src/main/java/store/mybooks/front/admin/delivery_rule/adaptor/DeliveryRuleAdaptor.java +++ b/src/main/java/store/mybooks/front/admin/delivery_rule/adaptor/DeliveryRuleAdaptor.java @@ -121,4 +121,21 @@ public void deleteDeliveryRule(Integer id) { Utils.getResponseEntity(exchange, HttpStatus.OK); } + + /** + * 이름으로 배송 규정 조회. + * + * @param name the name + * @return the delivery rule by name + */ + public DeliveryRuleResponse getDeliveryRuleByName(String name) { + ResponseEntity exchange = restTemplate.exchange( + gatewayAdaptorProperties.getAddress() + URL + "/name/{name}", + HttpMethod.GET, + null, + new ParameterizedTypeReference() { + }, name + ); + return Utils.getResponseEntity(exchange, HttpStatus.OK); + } } diff --git a/src/main/java/store/mybooks/front/admin/delivery_rule/service/DeliveryRuleService.java b/src/main/java/store/mybooks/front/admin/delivery_rule/service/DeliveryRuleService.java index 20084845..577a9b2a 100644 --- a/src/main/java/store/mybooks/front/admin/delivery_rule/service/DeliveryRuleService.java +++ b/src/main/java/store/mybooks/front/admin/delivery_rule/service/DeliveryRuleService.java @@ -71,4 +71,9 @@ public void modifyDeliveryRule(DeliveryRuleModifyRequest deliveryRuleModifyReque public void deleteDeliveryRule(Integer id) { deliveryRuleAdaptor.deleteDeliveryRule(id); } + + public DeliveryRuleResponse getDeliveryRuleResponseByName(String name) { + return deliveryRuleAdaptor.getDeliveryRuleByName(name); + } + } diff --git a/src/main/java/store/mybooks/front/order/controller/OrderController.java b/src/main/java/store/mybooks/front/order/controller/OrderController.java index 6bc982ae..a540f0e9 100644 --- a/src/main/java/store/mybooks/front/order/controller/OrderController.java +++ b/src/main/java/store/mybooks/front/order/controller/OrderController.java @@ -10,6 +10,8 @@ import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import store.mybooks.front.admin.delivery_rule.dto.DeliveryRuleResponse; +import store.mybooks.front.admin.delivery_rule.service.DeliveryRuleService; import store.mybooks.front.admin.wrap.dto.response.WrapResponse; import store.mybooks.front.admin.wrap.service.WrapService; import store.mybooks.front.cart.domain.CartDetail; @@ -55,6 +57,7 @@ public class OrderController { private final CartNonUserService cartNonUserService; private final CartUserService cartUserService; private final OrderInfoCheckService orderInfoCheckService; + private final DeliveryRuleService deliveryRuleService; /** * methodName : viewOrderPage
    @@ -161,12 +164,14 @@ public String viewOrderPage(@ModelAttribute BookOrderDirectRequest request, LocalDate localDate = LocalDate.now(); UserGetResponse user = userAdaptor.findUser(); List bookFromCart = cartUserService.getBookFromCart(); + DeliveryRuleResponse deliveryRule = deliveryRuleService.getDeliveryRuleResponseByName("배송 비"); modelMap.put("bookLists", bookFromCart); modelMap.put("totalCost", orderService.calculateTotalCost(bookFromCart)); modelMap.put("point", pointResponse.getRemainingPoint()); modelMap.put("bookCostList", orderService.calculateBooksCost(bookFromCart)); modelMap.put("localDate", localDate); modelMap.put("user", user); + modelMap.put("delivery", deliveryRule); modelMap.put("quantity", request.getQuantity()); return "checkout"; } diff --git a/src/main/java/store/mybooks/front/order/dto/request/BookOrderCreateRequest.java b/src/main/java/store/mybooks/front/order/dto/request/BookOrderCreateRequest.java index 6a7a621e..1b659f13 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/BookOrderCreateRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/BookOrderCreateRequest.java @@ -19,7 +19,7 @@ @AllArgsConstructor public class BookOrderCreateRequest { private List bookInfoList; - private OrderInfoRequest orderInfoRequest; + private OrderInfoRequest orderInfo; private String orderNumber; private Integer pointCost; private Integer couponCost; diff --git a/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java b/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java index 9c1974a5..008edd3b 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/BookOrderRequest.java @@ -22,7 +22,7 @@ @Setter @ToString public class BookOrderRequest { - private OrderInfoRequest orderInfo; private List bookInfoList; + private OrderInfoRequest orderInfo; private OrderUserInfoRequest userInfo; } diff --git a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java index d86f34a9..b3ec666a 100644 --- a/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java +++ b/src/main/java/store/mybooks/front/order/dto/request/OrderInfoRequest.java @@ -25,6 +25,7 @@ public class OrderInfoRequest { private String recipientName; private String recipientPhoneNumber; private String recipientAddress; + private Integer deliveryId; private String deliveryDate; private String receiverMessage; private Integer usingPoint; diff --git a/src/main/java/store/mybooks/front/order/utils/OrderUtils.java b/src/main/java/store/mybooks/front/order/utils/OrderUtils.java index a877f29e..428f9970 100644 --- a/src/main/java/store/mybooks/front/order/utils/OrderUtils.java +++ b/src/main/java/store/mybooks/front/order/utils/OrderUtils.java @@ -29,7 +29,7 @@ public static String createOrderNumber() { String time = LocalDateTime.now().format(DateTimeFormatter.BASIC_ISO_DATE); int leftLimit = 48; int rightLimit = 122; - int targetStringLength = 13; + int targetStringLength = 12; String randomStr = new Random() .ints(leftLimit, rightLimit + 1) .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97)) diff --git a/src/main/resources/templates/checkout.html b/src/main/resources/templates/checkout.html index ce387609..cc231e8e 100644 --- a/src/main/resources/templates/checkout.html +++ b/src/main/resources/templates/checkout.html @@ -285,6 +285,22 @@
    배송 시 요청 사항
    name="orderInfo.receiverMessage">
    +
    +
    + 배송 비 +
    + + + + + + 0원 + + +
  • From f9f021ba4e3bc526269a64d30333d97e318f155d Mon Sep 17 00:00:00 2001 From: minsu Date: Sun, 17 Mar 2024 16:10:20 +0900 Subject: [PATCH 035/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=EB=90=9C=20=EB=B2=88=ED=98=B8=EC=9D=B8=EC=A7=80=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/order/adaptor/OrderAdaptor.java | 10 +++++++ .../front/order/service/OrderService.java | 26 +++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java index 04db8a3d..e8f1ba3e 100644 --- a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java +++ b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java @@ -63,4 +63,14 @@ public BookOrderCreateResponse createBookOrder(BookOrderCreateRequest request) { }); return Utils.getResponseEntity(exchange, HttpStatus.CREATED); } + + public Boolean checkBookOrderNumber(String orderNumber) { + ResponseEntity exchange = restTemplate.exchange( + gatewayAdaptorProperties.getAddress() + URL + "/orderNumber/{orderNumber}", + HttpMethod.GET, + null, + new ParameterizedTypeReference() { + }, orderNumber); + return Utils.getResponseEntity(exchange, HttpStatus.OK); + } } diff --git a/src/main/java/store/mybooks/front/order/service/OrderService.java b/src/main/java/store/mybooks/front/order/service/OrderService.java index c20b1790..4773002b 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderService.java @@ -128,10 +128,27 @@ public Integer calculateBookWrapCost(List bookInfoRequests) { return result; } + /** + * 회원의 포인트 조회. + * + * @param orderInfoRequest the order info request + * @return the point + */ public Integer getPoint(OrderInfoRequest orderInfoRequest) { return orderInfoRequest.getUsingPoint(); } + /** + * 주문 등록. + * + * @param bookInfo the book info + * @param orderInfo the order info + * @param point the point + * @param couponCost the coupon cost + * @param wrapCost the wrap cost + * @param totalCost the total cost + * @return the book order create response + */ public BookOrderCreateResponse createOrder(List bookInfo, OrderInfoRequest orderInfo, Integer point, @@ -139,11 +156,16 @@ public BookOrderCreateResponse createOrder(List bookInfo, Integer wrapCost, Integer totalCost) { totalCost += wrapCost - point - couponCost; - //todo 해당 주문 번호가 있는지 확인하는 메서드 필요 - String orderNumber = OrderUtils.createOrderNumber(); + String orderNumber = ""; + + do { + orderNumber = OrderUtils.createOrderNumber(); + } while (!orderAdapter.checkBookOrderNumber(orderNumber)); BookOrderCreateRequest request = new BookOrderCreateRequest(bookInfo, orderInfo, orderNumber, point, couponCost, wrapCost, totalCost); return orderAdapter.createBookOrder(request); } + + } From 2a97c118c552380984db6bf474bc94e7cd626690 Mon Sep 17 00:00:00 2001 From: minsu Date: Sun, 17 Mar 2024 16:50:05 +0900 Subject: [PATCH 036/147] =?UTF-8?q?feat:=20=EA=B2=B0=EC=A0=9C=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=ED=81=B4=EB=A6=AD=20=EC=8B=9C=20=ED=95=B4=EB=8B=B9?= =?UTF-8?q?=20=EC=A3=BC=EB=AC=B8=EC=84=9C=EC=97=90=EC=84=9C=20=EA=B0=9C?= =?UTF-8?q?=EB=B3=84=20=EC=BF=A0=ED=8F=B0=EC=9D=84=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=96=88=EB=8A=94=EC=A7=80=EC=9D=98=20=EA=B0=92=EC=9D=84=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EA=B2=8C=20=EB=A7=8C=EB=93=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/order/adaptor/OrderAdaptor.java | 8 ++++---- .../front/order/controller/OrderController.java | 4 ++-- .../response/BookOrderResultCreateResponse.java | 17 +++++++++++++++++ .../front/order/service/OrderService.java | 16 ++++++++-------- 4 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 src/main/java/store/mybooks/front/order/dto/response/BookOrderResultCreateResponse.java diff --git a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java index e8f1ba3e..acf5eee5 100644 --- a/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java +++ b/src/main/java/store/mybooks/front/order/adaptor/OrderAdaptor.java @@ -11,7 +11,7 @@ import store.mybooks.front.auth.Annotation.RequiredAuthorization; import store.mybooks.front.config.GatewayAdaptorProperties; import store.mybooks.front.order.dto.request.BookOrderCreateRequest; -import store.mybooks.front.order.dto.response.BookOrderCreateResponse; +import store.mybooks.front.order.dto.response.BookOrderResultCreateResponse; import store.mybooks.front.utils.Utils; /** @@ -53,13 +53,13 @@ public void checkOrderUserAddressInfo(Long id) { @RequiredAuthorization - public BookOrderCreateResponse createBookOrder(BookOrderCreateRequest request) { + public BookOrderResultCreateResponse createBookOrder(BookOrderCreateRequest request) { HttpEntity httpEntity = new HttpEntity<>(request, Utils.getAuthHeader()); - ResponseEntity exchange = restTemplate.exchange( + ResponseEntity exchange = restTemplate.exchange( gatewayAdaptorProperties.getAddress() + MEMBER_URL, HttpMethod.POST, httpEntity, - new ParameterizedTypeReference() { + new ParameterizedTypeReference() { }); return Utils.getResponseEntity(exchange, HttpStatus.CREATED); } diff --git a/src/main/java/store/mybooks/front/order/controller/OrderController.java b/src/main/java/store/mybooks/front/order/controller/OrderController.java index a540f0e9..78ee619f 100644 --- a/src/main/java/store/mybooks/front/order/controller/OrderController.java +++ b/src/main/java/store/mybooks/front/order/controller/OrderController.java @@ -19,7 +19,7 @@ import store.mybooks.front.cart.service.CartUserService; import store.mybooks.front.order.dto.request.BookOrderDirectRequest; import store.mybooks.front.order.dto.request.BookOrderRequest; -import store.mybooks.front.order.dto.response.BookOrderCreateResponse; +import store.mybooks.front.order.dto.response.BookOrderResultCreateResponse; import store.mybooks.front.order.service.OrderInfoCheckService; import store.mybooks.front.order.service.OrderService; import store.mybooks.front.user.adaptor.UserAdaptor; @@ -185,7 +185,7 @@ public String doOrder(@ModelAttribute BookOrderRequest orderRequest) { int couponCost = orderService.calculateBookCouponCost(orderRequest.getBookInfoList()); int wrapCost = orderService.calculateBookWrapCost(orderRequest.getBookInfoList()); int totalCost = orderService.calculateTotalCost(cart); - BookOrderCreateResponse response = orderService.createOrder(orderRequest.getBookInfoList(), + BookOrderResultCreateResponse response = orderService.createOrder(orderRequest.getBookInfoList(), orderRequest.getOrderInfo(), point, couponCost, wrapCost, totalCost); return "test"; diff --git a/src/main/java/store/mybooks/front/order/dto/response/BookOrderResultCreateResponse.java b/src/main/java/store/mybooks/front/order/dto/response/BookOrderResultCreateResponse.java new file mode 100644 index 00000000..18bd6fc8 --- /dev/null +++ b/src/main/java/store/mybooks/front/order/dto/response/BookOrderResultCreateResponse.java @@ -0,0 +1,17 @@ +package store.mybooks.front.order.dto.response; + +/** + * packageName : store.mybooks.front.order.dto.response
    + * fileName : BookOrderResultCreateResponse
    + * author : minsu11
    + * date : 3/17/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/17/24 minsu11 최초 생성
    + */ +public class BookOrderResultCreateResponse { + private BookOrderCreateResponse bookOrderInfo; + private Boolean isCouponUsed; +} diff --git a/src/main/java/store/mybooks/front/order/service/OrderService.java b/src/main/java/store/mybooks/front/order/service/OrderService.java index 4773002b..c0fd55e4 100644 --- a/src/main/java/store/mybooks/front/order/service/OrderService.java +++ b/src/main/java/store/mybooks/front/order/service/OrderService.java @@ -15,7 +15,7 @@ import store.mybooks.front.order.dto.request.BookOrderCreateRequest; import store.mybooks.front.order.dto.request.BookOrderDirectRequest; import store.mybooks.front.order.dto.request.OrderInfoRequest; -import store.mybooks.front.order.dto.response.BookOrderCreateResponse; +import store.mybooks.front.order.dto.response.BookOrderResultCreateResponse; import store.mybooks.front.order.utils.OrderUtils; import store.mybooks.front.user.adaptor.UserAdaptor; import store.mybooks.front.user_address.adaptor.UserAddressAdaptor; @@ -149,12 +149,12 @@ public Integer getPoint(OrderInfoRequest orderInfoRequest) { * @param totalCost the total cost * @return the book order create response */ - public BookOrderCreateResponse createOrder(List bookInfo, - OrderInfoRequest orderInfo, - Integer point, - Integer couponCost, - Integer wrapCost, - Integer totalCost) { + public BookOrderResultCreateResponse createOrder(List bookInfo, + OrderInfoRequest orderInfo, + Integer point, + Integer couponCost, + Integer wrapCost, + Integer totalCost) { totalCost += wrapCost - point - couponCost; String orderNumber = ""; @@ -167,5 +167,5 @@ public BookOrderCreateResponse createOrder(List bookInfo, return orderAdapter.createBookOrder(request); } - + } From e26f593424261417ff5d871e4a6346d1fc9a55d7 Mon Sep 17 00:00:00 2001 From: minsu Date: Sun, 17 Mar 2024 17:20:26 +0900 Subject: [PATCH 037/147] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EB=A7=88=EB=AC=B4=EB=A6=AC=20=EB=B0=8F=20=EA=B2=B0?= =?UTF-8?q?=EC=A0=9C=20html=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/controller/OrderController.java | 7 +- .../dto/response/BookOrderCreateResponse.java | 2 + .../BookOrderResultCreateResponse.java | 7 ++ .../payment/controller/PayController.java | 1 + .../common/layout/my-books-layout.html | 2 +- src/main/resources/templates/payment.html | 84 +++++++++++-------- 6 files changed, 62 insertions(+), 41 deletions(-) diff --git a/src/main/java/store/mybooks/front/order/controller/OrderController.java b/src/main/java/store/mybooks/front/order/controller/OrderController.java index 78ee619f..63de3127 100644 --- a/src/main/java/store/mybooks/front/order/controller/OrderController.java +++ b/src/main/java/store/mybooks/front/order/controller/OrderController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; import store.mybooks.front.admin.delivery_rule.dto.DeliveryRuleResponse; import store.mybooks.front.admin.delivery_rule.service.DeliveryRuleService; import store.mybooks.front.admin.wrap.dto.response.WrapResponse; @@ -177,7 +178,8 @@ public String viewOrderPage(@ModelAttribute BookOrderDirectRequest request, } @PostMapping("/order") - public String doOrder(@ModelAttribute BookOrderRequest orderRequest) { + public String doOrder(@ModelAttribute BookOrderRequest orderRequest, + RedirectAttributes redirectAttributes) { log.info("값 : {}", orderRequest.toString()); List cart = cartUserService.getBookFromCart(); orderInfoCheckService.checkModulation(orderRequest, cart); @@ -187,7 +189,6 @@ public String doOrder(@ModelAttribute BookOrderRequest orderRequest) { int totalCost = orderService.calculateTotalCost(cart); BookOrderResultCreateResponse response = orderService.createOrder(orderRequest.getBookInfoList(), orderRequest.getOrderInfo(), point, couponCost, wrapCost, totalCost); - - return "test"; + return "redirect:/pay"; } } diff --git a/src/main/java/store/mybooks/front/order/dto/response/BookOrderCreateResponse.java b/src/main/java/store/mybooks/front/order/dto/response/BookOrderCreateResponse.java index 2d24ef76..429c1861 100644 --- a/src/main/java/store/mybooks/front/order/dto/response/BookOrderCreateResponse.java +++ b/src/main/java/store/mybooks/front/order/dto/response/BookOrderCreateResponse.java @@ -2,6 +2,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; /** * packageName : store.mybooks.front.order.dto.response
    @@ -15,6 +16,7 @@ * 3/16/24 minsu11 최초 생성
    */ @Getter +@NoArgsConstructor @AllArgsConstructor public class BookOrderCreateResponse { private String orderStatus; diff --git a/src/main/java/store/mybooks/front/order/dto/response/BookOrderResultCreateResponse.java b/src/main/java/store/mybooks/front/order/dto/response/BookOrderResultCreateResponse.java index 18bd6fc8..9e70072a 100644 --- a/src/main/java/store/mybooks/front/order/dto/response/BookOrderResultCreateResponse.java +++ b/src/main/java/store/mybooks/front/order/dto/response/BookOrderResultCreateResponse.java @@ -1,5 +1,9 @@ package store.mybooks.front.order.dto.response; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + /** * packageName : store.mybooks.front.order.dto.response
    * fileName : BookOrderResultCreateResponse
    @@ -11,6 +15,9 @@ * -----------------------------------------------------------
    * 3/17/24 minsu11 최초 생성
    */ +@Getter +@NoArgsConstructor +@AllArgsConstructor public class BookOrderResultCreateResponse { private BookOrderCreateResponse bookOrderInfo; private Boolean isCouponUsed; diff --git a/src/main/java/store/mybooks/front/payment/controller/PayController.java b/src/main/java/store/mybooks/front/payment/controller/PayController.java index c401f786..4ed009a4 100644 --- a/src/main/java/store/mybooks/front/payment/controller/PayController.java +++ b/src/main/java/store/mybooks/front/payment/controller/PayController.java @@ -119,6 +119,7 @@ public String paymentRequest(HttpServletRequest request, Model model) throws Exc @GetMapping public String index(HttpServletRequest request, ModelMap model) throws Exception { model.put("tossValue", tossAppKey.getClientKey()); + return "payment"; } diff --git a/src/main/resources/templates/common/layout/my-books-layout.html b/src/main/resources/templates/common/layout/my-books-layout.html index 7336e173..66d7c1e0 100644 --- a/src/main/resources/templates/common/layout/my-books-layout.html +++ b/src/main/resources/templates/common/layout/my-books-layout.html @@ -5,7 +5,7 @@ MyBooks - + diff --git a/src/main/resources/templates/payment.html b/src/main/resources/templates/payment.html index 0cca9e34..0a58a588 100644 --- a/src/main/resources/templates/payment.html +++ b/src/main/resources/templates/payment.html @@ -1,7 +1,8 @@ - - - + +
    토스페이먼츠 샘플 프로젝트 +
    + +
    +
    +
    +
    +

    결제 정보

    + + +
    - - - -
    -
    +
    - - -
    - -
    - -
    -
    - + + +
    + +
    + +
    +
    + +
    +
    + +
    + +
    +
    +
    - -
    - -
    +
    - - - \ No newline at end of file From 2af45b180b2830e6ff24f05041b6c2ffc05b2463 Mon Sep 17 00:00:00 2001 From: minsu Date: Sun, 17 Mar 2024 20:20:50 +0900 Subject: [PATCH 038/147] =?UTF-8?q?feat:=20=EA=B2=B0=EC=A0=9C=EC=97=90=20?= =?UTF-8?q?=EB=84=98=EA=B8=B8=20=EC=A3=BC=EB=AC=B8=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?dto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/BookOrderInfoResponse.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/store/mybooks/front/order/dto/response/BookOrderInfoResponse.java diff --git a/src/main/java/store/mybooks/front/order/dto/response/BookOrderInfoResponse.java b/src/main/java/store/mybooks/front/order/dto/response/BookOrderInfoResponse.java new file mode 100644 index 00000000..8515b33c --- /dev/null +++ b/src/main/java/store/mybooks/front/order/dto/response/BookOrderInfoResponse.java @@ -0,0 +1,24 @@ +package store.mybooks.front.order.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * packageName : store.mybooks.front.order.dto.response
    + * fileName : BookOrderInfoResponse
    + * author : minsu11
    + * date : 3/17/24
    + * description : + * ===========================================================
    + * DATE AUTHOR NOTE
    + * -----------------------------------------------------------
    + * 3/17/24 minsu11 최초 생성
    + */ +@Getter +@AllArgsConstructor +public class BookOrderInfoResponse { + private String orderStatus; + private String number; + private Integer totalCost; + private Boolean isCouponUsed; +} From 041c75408ad41d70755d2c8b1ab516bf7882324e Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Mon, 18 Mar 2024 01:54:49 +0900 Subject: [PATCH 039/147] =?UTF-8?q?refactor:=20dto=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=9E=AC=EA=B3=A0,=20=EC=83=81=ED=83=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/admin/book/model/response/BookCartResponse.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/store/mybooks/front/admin/book/model/response/BookCartResponse.java b/src/main/java/store/mybooks/front/admin/book/model/response/BookCartResponse.java index beddc8a5..3cfa4398 100644 --- a/src/main/java/store/mybooks/front/admin/book/model/response/BookCartResponse.java +++ b/src/main/java/store/mybooks/front/admin/book/model/response/BookCartResponse.java @@ -22,4 +22,6 @@ public class BookCartResponse { private String bookImage; private Integer cost; private Integer saleCost; + private Integer stock; + private String sellingStatus; } \ No newline at end of file From 7df0877eabfd948f49a66e0e58df264895f90c0c Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Mon, 18 Mar 2024 01:55:15 +0900 Subject: [PATCH 040/147] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybooks/front/cart/controller/CartController.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/store/mybooks/front/cart/controller/CartController.java b/src/main/java/store/mybooks/front/cart/controller/CartController.java index 57b3e15f..04340dc6 100644 --- a/src/main/java/store/mybooks/front/cart/controller/CartController.java +++ b/src/main/java/store/mybooks/front/cart/controller/CartController.java @@ -112,15 +112,14 @@ private boolean isUser(HttpServletRequest request) { } @PostMapping("/cart/update") - public ResponseEntity cartOrder(@CookieValue(name = CartUtil.CART_COOKIE, required = false) Cookie cartCookie, - HttpServletResponse response, HttpServletRequest request, - @RequestBody List orderItemRequest) { + public ResponseEntity updateBookAmount(@CookieValue(name = CartUtil.CART_COOKIE, required = false) Cookie cartCookie, + HttpServletResponse response, HttpServletRequest request, + @RequestBody List orderItemRequest) { if (isUser(request)) { - cartUserService.orderBookInCart(orderItemRequest); + cartUserService.updateAmountBookInCart(orderItemRequest); } else { cartNonUserService.orderBookInCart(cartCookie, response, orderItemRequest); } - return ResponseEntity.ok().build(); } } \ No newline at end of file From ca343d112c8a2feb510bb5303219da1cf237a009 Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Mon, 18 Mar 2024 01:55:32 +0900 Subject: [PATCH 041/147] =?UTF-8?q?refactor:=20dto=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=9E=AC=EA=B3=A0,=20=EC=83=81=ED=83=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/store/mybooks/front/cart/domain/CartDetail.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/store/mybooks/front/cart/domain/CartDetail.java b/src/main/java/store/mybooks/front/cart/domain/CartDetail.java index a2fe4ec8..172f1da9 100644 --- a/src/main/java/store/mybooks/front/cart/domain/CartDetail.java +++ b/src/main/java/store/mybooks/front/cart/domain/CartDetail.java @@ -27,6 +27,8 @@ public class CartDetail { private String bookImage; private Integer cost; private Integer saleCost; + private Integer stock; + private String sellingStatus; public void addAmount(int amount) { this.cartDetailAmount = this.cartDetailAmount + amount; From 29a33f4acd0cded4a7e114c606de94ef1ebad7ab Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Mon, 18 Mar 2024 01:55:49 +0900 Subject: [PATCH 042/147] =?UTF-8?q?refactor:=20dto=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=9E=AC=EA=B3=A0,=20=EC=83=81=ED=83=9C=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20service=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/mybooks/front/cart/service/CartNonUserService.java | 4 +++- .../store/mybooks/front/cart/service/CartUserService.java | 4 ++-- src/main/java/store/mybooks/front/cart/service/CartUtil.java | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java b/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java index c439c6ec..52164733 100644 --- a/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java +++ b/src/main/java/store/mybooks/front/cart/service/CartNonUserService.java @@ -81,7 +81,9 @@ public void registerBookToCart(Cookie cookie, HttpServletResponse response, cartBook.getName(), cartBook.getBookImage(), cartBook.getCost(), - cartBook.getSaleCost())); + cartBook.getSaleCost(), + cartBook.getStock(), + cartBook.getSellingStatus())); } String cartJson = objectMapper.writeValueAsString(cartDetailList); String encode = URLEncoder.encode(cartJson, StandardCharsets.UTF_8); diff --git a/src/main/java/store/mybooks/front/cart/service/CartUserService.java b/src/main/java/store/mybooks/front/cart/service/CartUserService.java index f5928abe..e82e18c3 100644 --- a/src/main/java/store/mybooks/front/cart/service/CartUserService.java +++ b/src/main/java/store/mybooks/front/cart/service/CartUserService.java @@ -79,7 +79,7 @@ public void addBookToCart(CartRegisterRequest cartRegisterRequest) { CartDetail cartDetail = new CartDetail(cartBook.getId(), cartRegisterRequest.getQuantity(), cartBook.getName(), cartBook.getBookImage(), cartBook.getCost(), - cartBook.getSaleCost()); + cartBook.getSaleCost(), cartBook.getStock(), cartBook.getSellingStatus()); cartDetailList.add(cartDetail); redisTemplate.opsForList().rightPush(cartKey, cartDetail); } @@ -109,7 +109,7 @@ public void deleteBookFromCart(Long bookId) { * * @param orderItemRequestList the order item request list */ - public void orderBookInCart(List orderItemRequestList) { + public void updateAmountBookInCart(List orderItemRequestList) { List bookFromCart = getBookFromCart(); if (Objects.isNull(bookFromCart) || bookFromCart.isEmpty()) { return; diff --git a/src/main/java/store/mybooks/front/cart/service/CartUtil.java b/src/main/java/store/mybooks/front/cart/service/CartUtil.java index 8130633a..9e73de72 100644 --- a/src/main/java/store/mybooks/front/cart/service/CartUtil.java +++ b/src/main/java/store/mybooks/front/cart/service/CartUtil.java @@ -61,7 +61,7 @@ public void registerBookToCart(Cookie cookie, HttpServletResponse response, Long if (!isAlreadyCart) { cartDetailList.add(new CartDetail(cartBook.getId(), amount, cartBook.getName(), cartBook.getBookImage(), cartBook.getCost(), - cartBook.getSaleCost())); + cartBook.getSaleCost(), cartBook.getStock(), cartBook.getSellingStatus())); } String cartJson = objectMapper.writeValueAsString(cartDetailList); String encode = URLEncoder.encode(cartJson, StandardCharsets.UTF_8); From f9098bb3826bd189b1865c9d799ccaf98190719d Mon Sep 17 00:00:00 2001 From: hyeonjaez Date: Mon, 18 Mar 2024 01:56:03 +0900 Subject: [PATCH 043/147] =?UTF-8?q?feat:=20=EA=B0=92=EB=93=A4=20validation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/cart.html | 60 +++++++++++++++++++++----- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/src/main/resources/templates/cart.html b/src/main/resources/templates/cart.html index 0daebacf..94cf16a1 100644 --- a/src/main/resources/templates/cart.html +++ b/src/main/resources/templates/cart.html @@ -89,14 +89,15 @@

    - Type: Mirrorless - Color: Black + +

    0

    - +

    @@ -117,11 +118,15 @@
    { + let isValid = true; + let cartItems = document.querySelectorAll('.cart-single-list'); + + cartItems.forEach(async function (cartItem) { + let status = cartItem.querySelector('.book-status').innerText; + + if (status !== "도서상태: 판매중") { + isValid = false; + let bookId = cartItem.getAttribute('data-book-id'); + + try { + await fetch('/cart/delete?bookId=' + bookId); + cartItem.remove(); + } catch (error) { + console.error("카트에서 도서 삭제하는 중에 오류가 발생 했다: ", error); + } + + } + }); + resolve(isValid); + }); + } + async function validateQuantity() { return new Promise((resolve, reject) => { let isValid = true; @@ -213,7 +250,8 @@
    stock) { isValid = false; return; } @@ -250,7 +288,7 @@
    From c3211a9bf08530a4f3eab081334d03472b180dfa Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Mon, 18 Mar 2024 02:26:56 +0900 Subject: [PATCH 044/147] =?UTF-8?q?feat:=20Review=20=EA=B4=80=EB=A0=A8=20V?= =?UTF-8?q?iew=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../header/my-books-header-bottom.html | 2 +- src/main/resources/templates/contact.html | 127 ----------- .../resources/templates/review-modify.html | 204 ++++++++++++++++++ .../resources/templates/review-register.html | 199 +++++++++++++++++ src/main/resources/templates/review.html | 128 +++++++++++ 5 files changed, 532 insertions(+), 128 deletions(-) delete mode 100644 src/main/resources/templates/contact.html create mode 100644 src/main/resources/templates/review-modify.html create mode 100644 src/main/resources/templates/review-register.html create mode 100644 src/main/resources/templates/review.html diff --git a/src/main/resources/templates/common/fragment/my-book/header/my-books-header-bottom.html b/src/main/resources/templates/common/fragment/my-book/header/my-books-header-bottom.html index 673e9a7d..8e2ab32a 100644 --- a/src/main/resources/templates/common/fragment/my-book/header/my-books-header-bottom.html +++ b/src/main/resources/templates/common/fragment/my-book/header/my-books-header-bottom.html @@ -93,7 +93,7 @@ - +
  • From 3b906e5934dda1793a8031945d27020892e57202 Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 15:20:36 +0900 Subject: [PATCH 128/147] =?UTF-8?q?feat:=20status.html=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=EC=83=81=ED=83=9C=20=EB=B7=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/admin/view/user/status.html | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/resources/templates/admin/view/user/status.html diff --git a/src/main/resources/templates/admin/view/user/status.html b/src/main/resources/templates/admin/view/user/status.html new file mode 100644 index 00000000..3481422c --- /dev/null +++ b/src/main/resources/templates/admin/view/user/status.html @@ -0,0 +1,28 @@ + + + +
    +
    + + + + + + + + + + + +
    회원 상태표
    + + + +
    + + +
    + + From 295da74922d919f370caa8309dd46bde8aa9ee1b Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 15:21:01 +0900 Subject: [PATCH 129/147] =?UTF-8?q?feat:=20grade.html=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EC=9D=98=20=EC=83=81=ED=83=9C=EB=A5=BC=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B4=80=EB=A6=AC=EC=9E=90=20=EB=B7=B0=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/view/user/grade-active.html | 146 ++++++++++++++++++ .../templates/admin/view/user/grade-all.html | 41 +++++ 2 files changed, 187 insertions(+) create mode 100644 src/main/resources/templates/admin/view/user/grade-active.html create mode 100644 src/main/resources/templates/admin/view/user/grade-all.html diff --git a/src/main/resources/templates/admin/view/user/grade-active.html b/src/main/resources/templates/admin/view/user/grade-active.html new file mode 100644 index 00000000..5db53996 --- /dev/null +++ b/src/main/resources/templates/admin/view/user/grade-active.html @@ -0,0 +1,146 @@ + + + + + + + + + + +
    +
    +

    활성 회원등급표

    + + + + + + + + + + + + + + + + + + + + + +
    이름최소 가격최대 가격포인트 적립률 (%)생성일관리
    + +
    + +
    + + + + + + + +
    + + + + + diff --git a/src/main/resources/templates/admin/view/user/grade-all.html b/src/main/resources/templates/admin/view/user/grade-all.html new file mode 100644 index 00000000..8375f2e8 --- /dev/null +++ b/src/main/resources/templates/admin/view/user/grade-all.html @@ -0,0 +1,41 @@ + + + + + + +
    +
    +

    모든 회원등급표(비활성 등급 포함)

    + + + + + + + + + + + + + + + + + + + +
    이름최소 가격최대 가격포인트 적립률 (%)생성일
    +
    + + + +
    + + + + + From 8aca626a4cc83afb81dff173fa0a9db5a362263f Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 15:21:13 +0900 Subject: [PATCH 130/147] =?UTF-8?q?refactor:=20=ED=8E=98=ED=82=A4=EC=A7=80?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=EC=9D=B8=ED=95=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/admin/view/user/user-all.html | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/main/resources/templates/admin/view/user/user-all.html diff --git a/src/main/resources/templates/admin/view/user/user-all.html b/src/main/resources/templates/admin/view/user/user-all.html new file mode 100644 index 00000000..d345cf67 --- /dev/null +++ b/src/main/resources/templates/admin/view/user/user-all.html @@ -0,0 +1,66 @@ + + + +
    + +
    +

    회원 정보

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    회원 이름전화번호이메일생년생월일가입일등급상태최근 로그인등급 변경일
    +
    + +
    +
    + + + + + +
    + + From 10610928e0b49900ad6431845d0d7eb33058813b Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 15:21:53 +0900 Subject: [PATCH 131/147] =?UTF-8?q?feat:=20social.html=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=BD=94=20=ED=9A=8C=EC=9B=90=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EB=AF=B8=EB=8F=99=EC=9D=98=EC=8B=9C=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=EB=A1=9C=20=EC=A0=95=EB=B3=B4=EB=B0=9B=EB=8A=94=20=EB=B7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/social.html | 163 +++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 src/main/resources/templates/social.html diff --git a/src/main/resources/templates/social.html b/src/main/resources/templates/social.html new file mode 100644 index 00000000..5a091941 --- /dev/null +++ b/src/main/resources/templates/social.html @@ -0,0 +1,163 @@ + + + +
    + + + + + + +
    + +
    + + + + +
    + From 643a9ba1f2459915a83c9cf49268a75017343957 Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 15:22:24 +0900 Subject: [PATCH 132/147] =?UTF-8?q?refactor:=20=ED=8E=98=ED=82=A4=EC=A7=80?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=EB=B3=80=EA=B2=BD=20member->user?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybooks/front/admin/user/adaptor/AdminUserAdaptor.java | 4 ++-- .../front/admin/user/controller/AdminUserController.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/store/mybooks/front/admin/user/adaptor/AdminUserAdaptor.java b/src/main/java/store/mybooks/front/admin/user/adaptor/AdminUserAdaptor.java index 7abef5aa..2bd1f651 100644 --- a/src/main/java/store/mybooks/front/admin/user/adaptor/AdminUserAdaptor.java +++ b/src/main/java/store/mybooks/front/admin/user/adaptor/AdminUserAdaptor.java @@ -29,7 +29,7 @@ @Component @RequiredArgsConstructor -public class UserAdaptor { +public class AdminUserAdaptor { private final RestTemplate restTemplate; @@ -37,7 +37,7 @@ public class UserAdaptor { private static final String ADMIN_URL = "/api/admin/users"; @RequiredAuthorization - public PageResponse getPagedMembers(Pageable pageable) { + public PageResponse getPagedUsers(Pageable pageable) { ResponseEntity> exchange = restTemplate.exchange( gatewayAdaptorProperties.getAddress() + ADMIN_URL + "/page?page=" + pageable.getPageNumber() diff --git a/src/main/java/store/mybooks/front/admin/user/controller/AdminUserController.java b/src/main/java/store/mybooks/front/admin/user/controller/AdminUserController.java index 72c87aee..66bdc89a 100644 --- a/src/main/java/store/mybooks/front/admin/user/controller/AdminUserController.java +++ b/src/main/java/store/mybooks/front/admin/user/controller/AdminUserController.java @@ -24,7 +24,7 @@ @Controller @RequiredArgsConstructor @RequestMapping("/admin/member") -public class UserController { +public class AdminUserController { private final AdminUserAdaptor adminUserAdaptor; From cac9ab906b06f0be95de0da1479d12dd8da3a5a7 Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 15:22:47 +0900 Subject: [PATCH 133/147] =?UTF-8?q?feat:=20UserGrade=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EB=B0=8F=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20dto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/request/UserGradeCreateRequest.java | 26 ++++++++++++++ .../dto/response/UserGradeGetResponse.java | 36 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/main/java/store/mybooks/front/admin/user_grade/dto/request/UserGradeCreateRequest.java create mode 100644 src/main/java/store/mybooks/front/admin/user_grade/dto/response/UserGradeGetResponse.java diff --git a/src/main/java/store/mybooks/front/admin/user_grade/dto/request/UserGradeCreateRequest.java b/src/main/java/store/mybooks/front/admin/user_grade/dto/request/UserGradeCreateRequest.java new file mode 100644 index 00000000..1f3cee3a --- /dev/null +++ b/src/main/java/store/mybooks/front/admin/user_grade/dto/request/UserGradeCreateRequest.java @@ -0,0 +1,26 @@ +package store.mybooks.front.admin.user_grade.dto.request; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * packageName : store.mybooks.front.admin.user_grade.dto.request
    + * fileName : UserGradeCreateRequest
    + * author : masiljangajji
    + * date : 3/22/24
    + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 3/22/24 masiljangajji 최초 생성 + */ + +@Getter +@AllArgsConstructor +public class UserGradeCreateRequest { + + private Integer rate; + + private String userGradeNameId; + +} diff --git a/src/main/java/store/mybooks/front/admin/user_grade/dto/response/UserGradeGetResponse.java b/src/main/java/store/mybooks/front/admin/user_grade/dto/response/UserGradeGetResponse.java new file mode 100644 index 00000000..02607046 --- /dev/null +++ b/src/main/java/store/mybooks/front/admin/user_grade/dto/response/UserGradeGetResponse.java @@ -0,0 +1,36 @@ +package store.mybooks.front.admin.user_grade.dto.response; + +import java.time.LocalDate; +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * packageName : store.mybooks.resource.user_grade.dto.response
    + * fileName : UserGradeGetResponse
    + * author : masiljangajji
    + * date : 2/19/24
    + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2/19/24 masiljangajji 최초 생성 + */ + + +@Getter +@NoArgsConstructor +public class UserGradeGetResponse { + + Integer id; + + String userGradeNameId; + + Integer minCost; + + Integer maxCost; + + Integer rate; + + LocalDate createdDate; + +} From 67be9e3b619a281cf54011d6ecf35ec9fa3d8b42 Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 15:23:11 +0900 Subject: [PATCH 134/147] =?UTF-8?q?feat:=20UserGrade=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=EB=B0=8F=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user_grade/adaptor/UserGradeAdaptor.java | 95 +++++++++++++++++++ .../controller/UserGradeController.java | 51 ++++++++++ 2 files changed, 146 insertions(+) create mode 100644 src/main/java/store/mybooks/front/admin/user_grade/adaptor/UserGradeAdaptor.java create mode 100644 src/main/java/store/mybooks/front/admin/user_grade/controller/UserGradeController.java diff --git a/src/main/java/store/mybooks/front/admin/user_grade/adaptor/UserGradeAdaptor.java b/src/main/java/store/mybooks/front/admin/user_grade/adaptor/UserGradeAdaptor.java new file mode 100644 index 00000000..f765551c --- /dev/null +++ b/src/main/java/store/mybooks/front/admin/user_grade/adaptor/UserGradeAdaptor.java @@ -0,0 +1,95 @@ +package store.mybooks.front.admin.user_grade.adaptor; + +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import store.mybooks.front.admin.user_grade.dto.request.UserGradeCreateRequest; +import store.mybooks.front.admin.user_grade.dto.response.UserGradeGetResponse; +import store.mybooks.front.auth.Annotation.RequiredAuthorization; +import store.mybooks.front.config.GatewayAdaptorProperties; +import store.mybooks.front.utils.Utils; + +/** + * packageName : store.mybooks.front.admin.member_grade.adaptor
    + * fileName : MemberGradeAdaptor
    + * author : masiljangajji
    + * date : 3/22/24
    + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 3/22/24 masiljangajji 최초 생성 + */ +@Component +@RequiredArgsConstructor +public class UserGradeAdaptor { + + private final RestTemplate restTemplate; + + private static final String URL_ADMIN = "/api/admin/users-grades"; + + private final GatewayAdaptorProperties gatewayAdaptorProperties; + + + /** + * methodName : findUserStatusById + * author : masiljangajji + * description : 유저가 가질 수 있는 상태를 찾음 + * + * @return user status get response + */ + + @RequiredAuthorization + public List findAllAvailableUserGrade() { + ResponseEntity> responseEntity = + restTemplate.exchange(gatewayAdaptorProperties.getAddress() + URL_ADMIN, HttpMethod.GET, + new HttpEntity<>(Utils.getAuthHeader()), + new ParameterizedTypeReference<>() { + }); + + if (responseEntity.getStatusCode() != HttpStatus.OK) { + throw new RuntimeException(); + } + + return responseEntity.getBody(); + } + + @RequiredAuthorization + public List findAllUserGrade() { + + ResponseEntity> responseEntity = + restTemplate.exchange( + gatewayAdaptorProperties.getAddress() + URL_ADMIN + "/all", HttpMethod.GET, + new HttpEntity<>(Utils.getAuthHeader()), + new ParameterizedTypeReference<>() { + }); + + if (responseEntity.getStatusCode() != HttpStatus.OK) { + throw new RuntimeException(); + } + + return responseEntity.getBody(); + } + + @RequiredAuthorization + public void createUserGrade(UserGradeCreateRequest createRequest) { + ResponseEntity responseEntity = + restTemplate.exchange(gatewayAdaptorProperties.getAddress() + URL_ADMIN, HttpMethod.POST, + new HttpEntity<>(createRequest, Utils.getAuthHeader()), + new ParameterizedTypeReference<>() { + }); + + if (responseEntity.getStatusCode() != HttpStatus.CREATED) { + throw new RuntimeException(); + } + + } + + +} diff --git a/src/main/java/store/mybooks/front/admin/user_grade/controller/UserGradeController.java b/src/main/java/store/mybooks/front/admin/user_grade/controller/UserGradeController.java new file mode 100644 index 00000000..cf232d4f --- /dev/null +++ b/src/main/java/store/mybooks/front/admin/user_grade/controller/UserGradeController.java @@ -0,0 +1,51 @@ +package store.mybooks.front.admin.user_grade.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import store.mybooks.front.admin.user_grade.adaptor.UserGradeAdaptor; +import store.mybooks.front.admin.user_grade.dto.request.UserGradeCreateRequest; + +/** + * packageName : store.mybooks.front.admin.member_grade.controller
    + * fileName : MemberGradeController
    + * author : masiljangajji
    + * date : 3/22/24
    + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 3/22/24 masiljangajji 최초 생성 + */ +@Controller +@RequiredArgsConstructor +@RequestMapping("/admin/member/grade") +public class UserGradeController { + + private final UserGradeAdaptor userGradeAdaptor; + + + @GetMapping + public String findAllAvailableUserGrade(Model model) { + model.addAttribute("userGrades", userGradeAdaptor.findAllAvailableUserGrade()); + return "admin/view/user/grade-active"; + } + + @GetMapping("/all") + public String findAllUserGrade(Model model) { + model.addAttribute("userGrades", userGradeAdaptor.findAllUserGrade()); + return "admin/view/user/grade-all"; + } + + @PostMapping + public String createUserGrade(@ModelAttribute UserGradeCreateRequest request) { + userGradeAdaptor.createUserGrade(request); + return "redirect:/admin/member/grade"; + } + + +} From f6634384969788bb095fa81a70bbad03e88772a1 Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 15:23:25 +0900 Subject: [PATCH 135/147] =?UTF-8?q?feat:=20UserStatusResponse=20dto=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/UserStatusGetResponse.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/store/mybooks/front/admin/user_status/dto/response/UserStatusGetResponse.java diff --git a/src/main/java/store/mybooks/front/admin/user_status/dto/response/UserStatusGetResponse.java b/src/main/java/store/mybooks/front/admin/user_status/dto/response/UserStatusGetResponse.java new file mode 100644 index 00000000..7d9bf3a5 --- /dev/null +++ b/src/main/java/store/mybooks/front/admin/user_status/dto/response/UserStatusGetResponse.java @@ -0,0 +1,23 @@ +package store.mybooks.front.admin.user_status.dto.response; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * packageName : store.mybooks.resource.user_status.dto.response
    + * fileName : UserStatusGetResponse
    + * author : masiljangajji
    + * date : 2/19/24
    + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2/19/24 masiljangajji 최초 생성 + */ +@Getter +@NoArgsConstructor +public class UserStatusGetResponse { + + private String id; + +} From a5dccf5ea7f71fb8027aa45e72c9e36e79aa9323 Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 15:23:39 +0900 Subject: [PATCH 136/147] =?UTF-8?q?feat:=20UserStatus=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adaptor/UserStatusAdaptor.java | 65 +++++++++++++++++++ .../controller/UserStatusController.java | 37 +++++++++++ 2 files changed, 102 insertions(+) create mode 100644 src/main/java/store/mybooks/front/admin/user_status/adaptor/UserStatusAdaptor.java create mode 100644 src/main/java/store/mybooks/front/admin/user_status/controller/UserStatusController.java diff --git a/src/main/java/store/mybooks/front/admin/user_status/adaptor/UserStatusAdaptor.java b/src/main/java/store/mybooks/front/admin/user_status/adaptor/UserStatusAdaptor.java new file mode 100644 index 00000000..12183c19 --- /dev/null +++ b/src/main/java/store/mybooks/front/admin/user_status/adaptor/UserStatusAdaptor.java @@ -0,0 +1,65 @@ +package store.mybooks.front.admin.user_status.adaptor; + +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import store.mybooks.front.admin.user_status.dto.response.UserStatusGetResponse; +import store.mybooks.front.auth.Annotation.RequiredAuthorization; +import store.mybooks.front.config.GatewayAdaptorProperties; +import store.mybooks.front.utils.Utils; + +/** + * packageName : store.mybooks.front.user_status.adaptor
    + * fileName : UserStatusAdaptor
    + * author : masiljangajji
    + * date : 2/22/24
    + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2/22/24 masiljangajji 최초 생성 + */ +@Component +@RequiredArgsConstructor +public class UserStatusAdaptor { + + private final RestTemplate restTemplate; + + + private static final String ADMIN_URL = "/api/admin/users-statuses"; + + private final GatewayAdaptorProperties gatewayAdaptorProperties; + + + /** + * methodName : findUserStatusById + * author : masiljangajji + * description : 유저가 가질 수 있는 상태를 찾음 + * + * @return user status get response + */ + + @RequiredAuthorization + public List findAllUserStatus() { + + ResponseEntity> responseEntity = + restTemplate.exchange(gatewayAdaptorProperties.getAddress() + ADMIN_URL, HttpMethod.GET, + new HttpEntity<>(Utils.getAuthHeader()), + new ParameterizedTypeReference<>() { + }); + + if (responseEntity.getStatusCode() != HttpStatus.OK) { + throw new RuntimeException(); + } + + return responseEntity.getBody(); + } + + +} diff --git a/src/main/java/store/mybooks/front/admin/user_status/controller/UserStatusController.java b/src/main/java/store/mybooks/front/admin/user_status/controller/UserStatusController.java new file mode 100644 index 00000000..66bd6b26 --- /dev/null +++ b/src/main/java/store/mybooks/front/admin/user_status/controller/UserStatusController.java @@ -0,0 +1,37 @@ +package store.mybooks.front.admin.user_status.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import store.mybooks.front.admin.user_status.adaptor.UserStatusAdaptor; + +/** + * packageName : store.mybooks.resource.user_status.controller
    + * fileName : UserStatusRestController
    + * author : masiljangajji
    + * date : 2/18/24
    + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2/18/24 masiljangajji 최초 생성 + */ +@Controller +@RequiredArgsConstructor +@RequestMapping("/admin/member/status") +public class UserStatusController { + + private final UserStatusAdaptor userStatusAdaptor; + + + @GetMapping + public String findUserStatusById(Model model) { + model.addAttribute("userStatus", userStatusAdaptor.findAllUserStatus()); + + return "admin/view/user/status"; + } + + +} From 068dd3c5d579ef701a0b9afe5696401c38582a36 Mon Sep 17 00:00:00 2001 From: damho Date: Fri, 22 Mar 2024 16:08:12 +0900 Subject: [PATCH 137/147] =?UTF-8?q?refactor:=20=EC=B5=9C=EB=8C=80=ED=95=A0?= =?UTF-8?q?=EC=9D=B8=EA=B8=88=EC=95=A1=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/user-coupon-page.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/templates/user-coupon-page.html b/src/main/resources/templates/user-coupon-page.html index 434262bf..c1767a7f 100644 --- a/src/main/resources/templates/user-coupon-page.html +++ b/src/main/resources/templates/user-coupon-page.html @@ -17,7 +17,7 @@ 할인 대상 최소 주문 금액 할인율 / 할인금액 - 최대 할인 금맥 + 최대 할인 금액 시작일 종료일 From ab37bf32ac1322bb0ebf959dbfdeba5cd9f4ec43 Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 16:59:25 +0900 Subject: [PATCH 138/147] =?UTF-8?q?feat:=20User=20OauthId=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=EC=B6=94=EA=B0=80=EB=A1=9C=EC=9D=B8=ED=95=9C=20dto=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/request/UserOauthCreateRequest.java | 2 ++ .../dto/request/UserOauthLoginRequest.java | 2 +- .../user/dto/request/UserOauthRequest.java | 34 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/main/java/store/mybooks/front/user/dto/request/UserOauthRequest.java diff --git a/src/main/java/store/mybooks/front/user/dto/request/UserOauthCreateRequest.java b/src/main/java/store/mybooks/front/user/dto/request/UserOauthCreateRequest.java index 7289c07f..110781e5 100644 --- a/src/main/java/store/mybooks/front/user/dto/request/UserOauthCreateRequest.java +++ b/src/main/java/store/mybooks/front/user/dto/request/UserOauthCreateRequest.java @@ -26,6 +26,8 @@ public class UserOauthCreateRequest { private String birthMonthDay; + private String oauthId; + } diff --git a/src/main/java/store/mybooks/front/user/dto/request/UserOauthLoginRequest.java b/src/main/java/store/mybooks/front/user/dto/request/UserOauthLoginRequest.java index 6aa4de4f..96515562 100644 --- a/src/main/java/store/mybooks/front/user/dto/request/UserOauthLoginRequest.java +++ b/src/main/java/store/mybooks/front/user/dto/request/UserOauthLoginRequest.java @@ -19,6 +19,6 @@ @AllArgsConstructor public class UserOauthLoginRequest { - private String email; + private String oauthId; } diff --git a/src/main/java/store/mybooks/front/user/dto/request/UserOauthRequest.java b/src/main/java/store/mybooks/front/user/dto/request/UserOauthRequest.java new file mode 100644 index 00000000..b4058a20 --- /dev/null +++ b/src/main/java/store/mybooks/front/user/dto/request/UserOauthRequest.java @@ -0,0 +1,34 @@ +package store.mybooks.front.user.dto.request; + +import java.time.LocalDate; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * packageName : store.mybooks.front.user.dto.request
    + * fileName : UserSocialModifyRequest
    + * author : masiljangajji
    + * date : 3/22/24
    + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 3/22/24 masiljangajji 최초 생성 + */ +@Getter +@AllArgsConstructor +public class UserOauthRequest { + + private String name; + + private String email; + + private String phoneNumber; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate birth; + + private String oauthId; + +} From 61da6ee86e157077a2e8c182a3735ae2151aebdd Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 16:59:43 +0900 Subject: [PATCH 139/147] =?UTF-8?q?feat:=20social.html=20oauthId=20?= =?UTF-8?q?=EC=A0=84=EB=8B=AC=EB=B0=9B=EB=8F=84=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/templates/social.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/templates/social.html b/src/main/resources/templates/social.html index 5a091941..d992fd1b 100644 --- a/src/main/resources/templates/social.html +++ b/src/main/resources/templates/social.html @@ -38,6 +38,9 @@
    + + +
    From 558928a386494c21a737c3d8223dab7381ea638e Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 17:01:01 +0900 Subject: [PATCH 140/147] =?UTF-8?q?feat:=20Oauth=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=8B=9C=EB=8F=84=EC=8B=9C=20=EC=A1=B4=EC=9E=AC?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=ED=9A=8C=EC=9B=90=EC=9D=B8=EC=A7=80=20?= =?UTF-8?q?=ED=8C=90=EB=B3=84=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20,=20=EC=A0=95=EB=B3=B4=EC=A0=9C=EA=B3=B5?= =?UTF-8?q?=20=EB=8F=99=EC=9D=98,=EB=AF=B8=EB=8F=99=EC=9D=98=20=EB=B6=84?= =?UTF-8?q?=EA=B8=B0=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybooks/front/oauth/OauthController.java | 9 +++++--- .../mybooks/front/oauth/OauthService.java | 22 ++++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/java/store/mybooks/front/oauth/OauthController.java b/src/main/java/store/mybooks/front/oauth/OauthController.java index e1ce9fb7..a2bbcfb1 100644 --- a/src/main/java/store/mybooks/front/oauth/OauthController.java +++ b/src/main/java/store/mybooks/front/oauth/OauthController.java @@ -40,16 +40,19 @@ public String oauthLogin(@PathVariable String provider, @RequestParam String cod UserLoginResponse loginResponse = oauthService.oauthLogin(provider, code); + if (loginResponse.getUserId().equals(0L)) { + return "redirect:/verification/social/"+loginResponse.getStatus(); + } + if (loginResponse.getIsValidUser()) { // 기존에 계정이 있거나 , 회원가입에 문제가 없는 경우 로그인 + TokenCreateResponse tokenCreateResponse = tokenAdaptor.createToken( new TokenCreateRequest(loginResponse.getIsAdmin(), loginResponse.getUserId(), loginResponse.getStatus(), String.valueOf(UUID.randomUUID()), - Utils.getUserIp(request),Utils.getUserAgent(request))); - + Utils.getUserIp(request), Utils.getUserAgent(request))); CookieUtils.addJwtCookie(response, tokenCreateResponse.getAccessToken()); - return "redirect:/"; } diff --git a/src/main/java/store/mybooks/front/oauth/OauthService.java b/src/main/java/store/mybooks/front/oauth/OauthService.java index 96a45890..4bd64280 100644 --- a/src/main/java/store/mybooks/front/oauth/OauthService.java +++ b/src/main/java/store/mybooks/front/oauth/OauthService.java @@ -1,6 +1,7 @@ package store.mybooks.front.oauth; import java.util.Map; +import java.util.Objects; import lombok.RequiredArgsConstructor; import org.springframework.core.ParameterizedTypeReference; import org.springframework.stereotype.Service; @@ -49,8 +50,6 @@ private OauthTokenResponse getToken(String code, OauthProvider provider) { // 바디부에 필요한 정보들 추가 , 페이코 api 양식에 맞춰서 private MultiValueMap tokenRequest(String code, OauthProvider provider) { - System.out.println(code); - MultiValueMap formData = new LinkedMultiValueMap<>(); formData.add("client_id", keyConfig.keyStore(provider.getClientId())); formData.add("client_secret", keyConfig.keyStore(provider.getClientSecret())); @@ -79,22 +78,29 @@ public UserLoginResponse oauthLogin(String providerName, String code) { // 유저 정보 가져오기 UserProfile userProfile = getUserProfile(providerName, tokenResponse, provider); - // 가져온걸로 db 긁어서 있는회원인지 확인 + + // 가져온 OauthId 가지고 db 긁어서 있는회원인지 확인 UserLoginResponse userLoginResponse = - userAdaptor.loginOauthUser(new UserOauthLoginRequest(userProfile.getEmail())); + userAdaptor.loginOauthUser(new UserOauthLoginRequest(userProfile.getOauthId())); if (userLoginResponse.getIsValidUser()) { // 이미 존재하는 회원이면 그대로 로그인 return userLoginResponse; } - // 존재하는 회원 아니면 회원가입 시키기 + // 만약 null 이라면 = 정보제공 동의 안해주면 , 추가정보 받기 + if (Objects.isNull(userProfile.getEmail()) || Objects.isNull(userProfile.getBirthday()) || + Objects.isNull(userProfile.getMobile()) || Objects.isNull(userProfile.getName())) { + return new UserLoginResponse(false,false,0L,userProfile.getOauthId()); + } + + // 정보제공 동의 해줬다면 바로 회원가입 시키기 UserOauthCreateRequest createRequest = new UserOauthCreateRequest(userProfile.getName(), userProfile.getMobile(), userProfile.getEmail(), - userProfile.getBirthday()); + userProfile.getBirthday(),userProfile.getOauthId()); - UserOauthCreateResponse createResponse=userAdaptor.createOauthUser(createRequest); + UserOauthCreateResponse createResponse = userAdaptor.createOauthUser(createRequest); - return new UserLoginResponse(true,false,createResponse.getId(),createResponse.getUserStatusName()); + return new UserLoginResponse(true, false, createResponse.getId(), createResponse.getUserStatusName()); } From 34fc4136cb1a91ba876a4eb11894db379da9d654 Mon Sep 17 00:00:00 2001 From: masiljangajji Date: Fri, 22 Mar 2024 17:01:18 +0900 Subject: [PATCH 141/147] =?UTF-8?q?feat:=20UserController=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=EC=A0=9C=EA=B3=B5=20=EB=B9=84=EB=8F=99=EC=9D=98?= =?UTF-8?q?=EC=8B=9C=20=EC=B6=94=EA=B0=80=EC=A0=81=EC=9D=B8=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=9E=85=EB=A0=A5=EB=B0=9B=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/user/adaptor/UserAdaptor.java | 17 +++++++++++++ .../front/user/controller/UserController.java | 24 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/main/java/store/mybooks/front/user/adaptor/UserAdaptor.java b/src/main/java/store/mybooks/front/user/adaptor/UserAdaptor.java index 08b8ab2c..e9f2b359 100644 --- a/src/main/java/store/mybooks/front/user/adaptor/UserAdaptor.java +++ b/src/main/java/store/mybooks/front/user/adaptor/UserAdaptor.java @@ -17,6 +17,7 @@ import store.mybooks.front.user.dto.request.UserModifyRequest; import store.mybooks.front.user.dto.request.UserOauthCreateRequest; import store.mybooks.front.user.dto.request.UserOauthLoginRequest; +import store.mybooks.front.user.dto.request.UserOauthRequest; import store.mybooks.front.user.dto.request.UserPasswordModifyRequest; import store.mybooks.front.user.dto.request.UserStatusModifyRequest; import store.mybooks.front.user.dto.response.UserCreateResponse; @@ -168,6 +169,22 @@ public UserOauthCreateResponse createOauthUser(UserOauthCreateRequest createRequ return response.getBody(); } + public UserOauthCreateResponse createAndLoginOauthUser(UserOauthRequest request){ + ResponseEntity responseEntity = + restTemplate.exchange(gatewayAdaptorProperties.getAddress() + URL + "/oauth/no-info", + HttpMethod.POST, + new HttpEntity<>(request, Utils.getHttpHeader()), + new ParameterizedTypeReference<>() { + }); + + if (responseEntity.getStatusCode() != HttpStatus.CREATED) { + throw new RuntimeException(); + } + return responseEntity.getBody(); + } + + + /** * methodName : findUserById diff --git a/src/main/java/store/mybooks/front/user/controller/UserController.java b/src/main/java/store/mybooks/front/user/controller/UserController.java index cc62b7d3..3cf48e3b 100644 --- a/src/main/java/store/mybooks/front/user/controller/UserController.java +++ b/src/main/java/store/mybooks/front/user/controller/UserController.java @@ -28,11 +28,13 @@ import store.mybooks.front.user.dto.request.UserGradeModifyRequest; import store.mybooks.front.user.dto.request.UserLoginRequest; import store.mybooks.front.user.dto.request.UserModifyRequest; +import store.mybooks.front.user.dto.request.UserOauthRequest; import store.mybooks.front.user.dto.request.UserPasswordModifyRequest; import store.mybooks.front.user.dto.request.UserStatusModifyRequest; import store.mybooks.front.user.dto.response.UserEncryptedPasswordResponse; import store.mybooks.front.user.dto.response.UserGetResponse; import store.mybooks.front.user.dto.response.UserLoginResponse; +import store.mybooks.front.user.dto.response.UserOauthCreateResponse; import store.mybooks.front.utils.CookieUtils; import store.mybooks.front.utils.Utils; @@ -137,6 +139,28 @@ public String verifyLockUser(@ModelAttribute UserPasswordModifyRequest request) return "redirect:/"; } + @GetMapping("/verification/social/{oauthId}") + public String socialUserForm(HttpServletRequest request,@PathVariable("oauthId")String oauthId) { + request.setAttribute("nowDate",LocalDate.now()); + request.setAttribute("oauthId",oauthId); + return "social"; + } + + @PostMapping("/social") + public String createAndLoginOauthUser(@ModelAttribute UserOauthRequest oauthRequest, HttpServletRequest request, HttpServletResponse response) { + + UserOauthCreateResponse createResponse = userAdaptor.createAndLoginOauthUser(oauthRequest); + + + TokenCreateResponse tokenCreateResponse = + tokenAdaptor.createToken( + new TokenCreateRequest(false, createResponse.getId(), + createResponse.getUserStatusName(), String.valueOf(UUID.randomUUID()), + Utils.getUserIp(request), Utils.getUserAgent(request))); + + CookieUtils.addJwtCookie(response, tokenCreateResponse.getAccessToken()); + return "redirect:/"; + } /** * methodName : myPageForm From 067d27b716f94a80d8441ce4a732c2a4ff67c0e8 Mon Sep 17 00:00:00 2001 From: damho Date: Fri, 22 Mar 2024 17:02:46 +0900 Subject: [PATCH 142/147] =?UTF-8?q?refactor:=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../header/my-books-header-bottom.html | 1 + .../resources/templates/point-history.html | 24 +++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/resources/templates/common/fragment/my-book/header/my-books-header-bottom.html b/src/main/resources/templates/common/fragment/my-book/header/my-books-header-bottom.html index ade4e380..53be07cb 100644 --- a/src/main/resources/templates/common/fragment/my-book/header/my-books-header-bottom.html +++ b/src/main/resources/templates/common/fragment/my-book/header/my-books-header-bottom.html @@ -76,6 +76,7 @@ + diff --git a/src/main/resources/templates/point-history.html b/src/main/resources/templates/point-history.html index c9ba1543..2c867a25 100644 --- a/src/main/resources/templates/point-history.html +++ b/src/main/resources/templates/point-history.html @@ -26,19 +26,19 @@ -
    -
    - \ No newline at end of file From 391c01ba26c30fa3cba9442a8001744f423da3d6 Mon Sep 17 00:00:00 2001 From: newjaehun Date: Fri, 22 Mar 2024 22:06:46 +0900 Subject: [PATCH 143/147] =?UTF-8?q?refactor:=20properties=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.properties | 18 +-------------- .../resources/application-prod.properties | 9 -------- src/main/resources/application.properties | 22 +++++++------------ 3 files changed, 9 insertions(+), 40 deletions(-) diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 5043bc41..94de8592 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -5,20 +5,4 @@ logging.level.root = debug # Logging file logging.file.name=./logs/resource.log -logging.file.path=./logs - - - - -# OAuth2 User Payco Configuration -oauth2.user.payco.clientId=67b877c819e74256a1d27b5b37647366 -oauth2.user.payco.clientSecret=da6beeed938047f6b3148c8d8d86b27a -oauth2.user.payco.redirectUri=93d29b6eed9842a38f2e05a0fef269e6 - - - -# cookie - -cookie.domain=localhost - -my-books.redis.database=21 \ No newline at end of file +logging.file.path=./logs \ No newline at end of file diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 82d64da6..cca3441f 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -6,20 +6,11 @@ logging.file.name=/home/administrator/log/resource.log logging.file.path=/home/administrator/log - - - - - # OAuth2 User Payco Configuration oauth2.user.payco.clientId=48f2dddcf1fb47e2b12112c6274a4b78 oauth2.user.payco.clientSecret=52497d49c33c4a0fbb7b0b0280714d26 oauth2.user.payco.redirectUri=7298e380b6a0480aa781ebe1adb32ffe - - -# cookie - cookie.domain=my-books.store my-books.redis.database=22 \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index c0c5a864..789a7ceb 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -22,21 +22,15 @@ my-books.redis.host=133.186.241.167 my-books.redis.port=6379 my-books.redis.password=*N2vya7H@muDTwdNMR! my-books.redis.admin-expiration=3600000 -## ????? -#spring.profiles.active=dev +my-books.redis.database=21 + toss.api.key=081bdd46905c4d92aff5a8d51c0e2501 toss.api.client-key=1c7a8079bed84ba881abb9dd32cf048f -# -## ??? -store.mybooks.front.config.gateway.address=c0722344686f4afba3ebd708d26c1380 -# Log Levels -logging.level.root=INFO -# Logging file -logging.file.name=/home/administrator/log/resource.log -logging.file.path=/home/administrator/log + # OAuth2 User Payco Configuration -oauth2.user.payco.clientId=48f2dddcf1fb47e2b12112c6274a4b78 -oauth2.user.payco.clientSecret=52497d49c33c4a0fbb7b0b0280714d26 -oauth2.user.payco.redirectUri=7298e380b6a0480aa781ebe1adb32ffe +oauth2.user.payco.clientId=67b877c819e74256a1d27b5b37647366 +oauth2.user.payco.clientSecret=da6beeed938047f6b3148c8d8d86b27a +oauth2.user.payco.redirectUri=93d29b6eed9842a38f2e05a0fef269e6 + # cookie -cookie.domain=my-books.store +cookie.domain=localhost \ No newline at end of file From 396e535ba30d0ae172c085c93bd93e6cf5282697 Mon Sep 17 00:00:00 2001 From: newjaehun Date: Fri, 22 Mar 2024 22:07:30 +0900 Subject: [PATCH 144/147] =?UTF-8?q?refactor:=20=EB=8F=84=EC=84=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=EC=8B=9C=20=EC=A0=84=EC=B2=B4=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95=EA=B0=80=EB=8A=A5,=20=EC=82=AC?= =?UTF-8?q?=EC=A7=84=ED=8F=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/view/book/book-update.html | 162 ++++++++++++++---- 1 file changed, 132 insertions(+), 30 deletions(-) diff --git a/src/main/resources/templates/admin/view/book/book-update.html b/src/main/resources/templates/admin/view/book/book-update.html index cab1c821..726d190d 100644 --- a/src/main/resources/templates/admin/view/book/book-update.html +++ b/src/main/resources/templates/admin/view/book/book-update.html @@ -8,9 +8,8 @@ width: 100%; } - - - + + @@ -24,31 +23,44 @@

    도서 수정

    - +
    + th:value="${book.name}" required + minlength="1" + maxlength="100">
    + th:value="${book.isbn}" required + pattern="\d{13}">
    -
    +
    - +
    +
    +
    @@ -56,7 +68,7 @@

    도서 수정

    + name="publishDate" th:value="${book.publishDate}" required>
    @@ -64,14 +76,16 @@

    도서 수정

    -
    +
    +
    - -
    + +
    +
    @@ -81,15 +95,15 @@

    도서 수정

    - +
    -
    @@ -99,7 +113,8 @@

    도서 수정

    + th:value="${book.page}" required + min="1">
    @@ -109,7 +124,7 @@

    도서 수정

    + name="originalCost" th:value="${book.originalCost}" required min="1">
    @@ -155,7 +170,8 @@

    도서 수정

    @@ -167,7 +183,8 @@

    도서 수정

    -
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    @@ -217,7 +246,80 @@

    도서 수정

    + + + + +