From 79252f8f75df0b85d0d3688cbc278d2dc9c201bc Mon Sep 17 00:00:00 2001 From: osjkate Date: Mon, 14 Oct 2024 11:14:30 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EA=B1=B0=EB=9E=98=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=8B=9C=20qr=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=A0=9C=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Order/controller/TransactionController.java | 3 ++- .../concon/Order/dto/OrderRequestResponseDto.java | 5 +++-- .../concon/Order/service/TransactionService.java | 12 +++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/sookmyung/concon/Order/controller/TransactionController.java b/src/main/java/com/sookmyung/concon/Order/controller/TransactionController.java index 57be048..da691a8 100644 --- a/src/main/java/com/sookmyung/concon/Order/controller/TransactionController.java +++ b/src/main/java/com/sookmyung/concon/Order/controller/TransactionController.java @@ -52,7 +52,8 @@ public ResponseEntity requestOrder( @PostMapping("/cancel/{order-id}") public ResponseEntity cancelTransaction( @PathVariable("order-id") Long orderId) { - return ResponseEntity.ok(transactionService.cancelTransaction(orderId)); + transactionService.cancelTransaction(orderId); + return ResponseEntity.noContent().build(); } // 거래 완료 diff --git a/src/main/java/com/sookmyung/concon/Order/dto/OrderRequestResponseDto.java b/src/main/java/com/sookmyung/concon/Order/dto/OrderRequestResponseDto.java index 11269b0..631602a 100644 --- a/src/main/java/com/sookmyung/concon/Order/dto/OrderRequestResponseDto.java +++ b/src/main/java/com/sookmyung/concon/Order/dto/OrderRequestResponseDto.java @@ -8,15 +8,16 @@ @Builder @Getter public class OrderRequestResponseDto { private Long orderId; - private String orderTitle; private Long requesterId; private String requesterName; + private String qrImage; - public static OrderRequestResponseDto toDto(Orders orders, User requester) { + public static OrderRequestResponseDto toDto(Orders orders, User requester, String qrImage) { return OrderRequestResponseDto.builder() .orderId(orders.getId()) .requesterId(requester.getId()) .requesterName(requester.getUsername()) + .qrImage(qrImage) .build(); } } diff --git a/src/main/java/com/sookmyung/concon/Order/service/TransactionService.java b/src/main/java/com/sookmyung/concon/Order/service/TransactionService.java index 395a0d7..7c2695b 100644 --- a/src/main/java/com/sookmyung/concon/Order/service/TransactionService.java +++ b/src/main/java/com/sookmyung/concon/Order/service/TransactionService.java @@ -10,6 +10,7 @@ import com.sookmyung.concon.Order.exception.OrderInProgressException; import com.sookmyung.concon.Order.repository.OrderRepository; import com.sookmyung.concon.Order.repository.OrderRequestRedisRepository; +import com.sookmyung.concon.Photo.service.PhotoFacade; import com.sookmyung.concon.Photo.service.PhotoService; import com.sookmyung.concon.User.Entity.User; import com.sookmyung.concon.User.Jwt.JwtUtil; @@ -43,6 +44,7 @@ public class TransactionService { private final UserFacade userFacade; private final CouponFacade couponFacade; private final OrderFacade orderFacade; + private final PhotoFacade photoFacade; // order 아이디로 거래 찾기 @@ -108,7 +110,7 @@ private OrderDetailResponseDto toOrderDetailDto(Orders order) { // 거래 요청 시 바로 거래 중으로 변경 @Transactional - public OrderDetailResponseDto requestOrder(Long orderId, String token) { + public OrderRequestResponseDto requestOrder(Long orderId, String token) { Orders orders = findOrdersById(orderId); User buyer = userFacade.findUserByToken(token); if (orders.getStatus() != OrderStatus.AVAILABLE) { @@ -122,12 +124,14 @@ public OrderDetailResponseDto requestOrder(Long orderId, String token) { Long sellerId = orders.getSeller().getId(); OrderEventAlarmDto response = OrderEventAlarmDto.toDto(orders, buyer); eventPublisher.publishEvent(sellerId, ORDER_REQUESTED, response); - return toOrderDetailDto(orders); + + String userQRPhotoUrl = photoFacade.getUserQRPhotoUrl(orders.getBuyer()); + return OrderRequestResponseDto.toDto(orders, buyer, userQRPhotoUrl); } // 거래 중 취소 @Transactional - public OrderDetailResponseDto cancelTransaction(Long orderId) { + public void cancelTransaction(Long orderId) { Orders order = findOrdersById(orderId); User buyer = order.getBuyer(); order.setBuyer(null); @@ -137,8 +141,6 @@ public OrderDetailResponseDto cancelTransaction(Long orderId) { List userIds = List.of(order.getSeller().getId(), buyer.getId()); OrderEventAlarmDto response = OrderEventAlarmDto.toDto(order, buyer); eventPublisher.publishEventToMultipleUsers(userIds, ORDER_CANCELED, response); - - return toOrderDetailDto(order); } // 거래 완료 From f393a1a04c49bb72b6e544ea82927bb88e42d118 Mon Sep 17 00:00:00 2001 From: osjkate Date: Mon, 14 Oct 2024 11:31:08 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=ED=8C=90=EB=A7=A4=20=EC=98=AC?= =?UTF-8?q?=EB=A6=AC=EB=A9=B4=20Coupon=20Image,=20Barcode=20Image=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EB=B6=88=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sookmyung/concon/Coupon/Entity/Coupon.java | 6 ++++++ .../concon/Coupon/dto/CouponCreateRequestDto.java | 1 + .../concon/Coupon/dto/CouponCreateResponseDto.java | 2 ++ .../concon/Coupon/dto/CouponDetailResponseDto.java | 11 +++++++++-- .../concon/Coupon/dto/CouponSimpleResponseDto.java | 2 ++ .../sookmyung/concon/Coupon/service/CouponFacade.java | 9 +++++++-- .../concon/Coupon/service/CouponService.java | 6 ++++-- .../concon/Order/service/OrderServiceImpl.java | 3 +++ .../concon/Order/service/TransactionService.java | 1 + 9 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/sookmyung/concon/Coupon/Entity/Coupon.java b/src/main/java/com/sookmyung/concon/Coupon/Entity/Coupon.java index c8f1ec8..5fd06dd 100644 --- a/src/main/java/com/sookmyung/concon/Coupon/Entity/Coupon.java +++ b/src/main/java/com/sookmyung/concon/Coupon/Entity/Coupon.java @@ -60,6 +60,8 @@ public void useCoupon(LocalDate useDate) { @Setter private boolean buyFlag; // 구매 여부 + private boolean sellFlag; + private String memo; @@ -67,6 +69,10 @@ public void changeUser(User user) { this.user = user; } + public void updateSellFlag(boolean sellFlag) { + this.sellFlag = sellFlag; + } + public void update(String barcode, Double remainingPrice, LocalDate expirationDate, String memo, Item item, String itemImageUrl, Double itemPrice) { diff --git a/src/main/java/com/sookmyung/concon/Coupon/dto/CouponCreateRequestDto.java b/src/main/java/com/sookmyung/concon/Coupon/dto/CouponCreateRequestDto.java index fd27518..52355b0 100644 --- a/src/main/java/com/sookmyung/concon/Coupon/dto/CouponCreateRequestDto.java +++ b/src/main/java/com/sookmyung/concon/Coupon/dto/CouponCreateRequestDto.java @@ -32,6 +32,7 @@ public Coupon toEntity(User user, Item item, LocalDateTime now) { .itemPrice(item.getPrice()) .remainingPrice(price) .expirationDate(expirationDate) + .sellFlag(false) .buyFlag(false) .memo(memo) .build(); diff --git a/src/main/java/com/sookmyung/concon/Coupon/dto/CouponCreateResponseDto.java b/src/main/java/com/sookmyung/concon/Coupon/dto/CouponCreateResponseDto.java index d03652a..854cc26 100644 --- a/src/main/java/com/sookmyung/concon/Coupon/dto/CouponCreateResponseDto.java +++ b/src/main/java/com/sookmyung/concon/Coupon/dto/CouponCreateResponseDto.java @@ -16,6 +16,7 @@ public class CouponCreateResponseDto { private Double price; private String category; private boolean isUsed; + private boolean isSellFlag; private boolean isBuyFlag; private String barcodeImageUploadUrl; private String couponImageUploadUrl; @@ -29,6 +30,7 @@ public static CouponCreateResponseDto toDto(Coupon coupon, ItemSimpleResponseDto .expirationDate(coupon.getExpirationDate()) .price(coupon.getRemainingPrice()) .isUsed(false) + .isSellFlag(coupon.isSellFlag()) .isBuyFlag(coupon.isBuyFlag()) .barcodeImageUploadUrl(barcodeImageUploadUrl) .couponImageUploadUrl(couponImageUploadUrl) diff --git a/src/main/java/com/sookmyung/concon/Coupon/dto/CouponDetailResponseDto.java b/src/main/java/com/sookmyung/concon/Coupon/dto/CouponDetailResponseDto.java index 012b905..315a60d 100644 --- a/src/main/java/com/sookmyung/concon/Coupon/dto/CouponDetailResponseDto.java +++ b/src/main/java/com/sookmyung/concon/Coupon/dto/CouponDetailResponseDto.java @@ -26,7 +26,8 @@ public class CouponDetailResponseDto { private Double price; private LocalDate expirationDate; private LocalDate usedDate; - private Boolean buyFlag; + private boolean sellFlag; + private boolean buyFlag; private String memo; private List reviews; @@ -34,17 +35,23 @@ public class CouponDetailResponseDto { public static CouponDetailResponseDto toDto(Coupon coupon, UserSimpleResponseDto user, ItemSimpleResponseDto item, String barcodeImageUrl, String couponImageUrl, List reviews) { + String barcode = ""; + if (!coupon.isSellFlag()) { + barcode = coupon.getBarcode(); + } + return CouponDetailResponseDto.builder() .couponId(coupon.getId()) .user(user) .item(item) - .barcode(coupon.getBarcode()) + .barcode(barcode) .barcodeImageUrl(barcodeImageUrl) .itemImageUrl(item.getImageUrl()) .couponImageUrl(couponImageUrl) .price(coupon.getRemainingPrice()) .expirationDate(coupon.getExpirationDate()) .usedDate(coupon.getUsedDate()) + .sellFlag(coupon.isSellFlag()) .buyFlag(coupon.isBuyFlag()) .memo(coupon.getMemo()) .reviews(reviews) diff --git a/src/main/java/com/sookmyung/concon/Coupon/dto/CouponSimpleResponseDto.java b/src/main/java/com/sookmyung/concon/Coupon/dto/CouponSimpleResponseDto.java index 16b664e..aeb5ddd 100644 --- a/src/main/java/com/sookmyung/concon/Coupon/dto/CouponSimpleResponseDto.java +++ b/src/main/java/com/sookmyung/concon/Coupon/dto/CouponSimpleResponseDto.java @@ -16,6 +16,7 @@ public class CouponSimpleResponseDto { private Double price; private boolean isUsed; private boolean isBuyFlag; + private boolean isSellFlag; private String memo; public static CouponSimpleResponseDto toDto(Coupon coupon, ItemSimpleResponseDto item, boolean isUsed) { @@ -25,6 +26,7 @@ public static CouponSimpleResponseDto toDto(Coupon coupon, ItemSimpleResponseDto .expirationDate(coupon.getExpirationDate()) .price(coupon.getRemainingPrice()) .isUsed(isUsed) + .isSellFlag(coupon.isSellFlag()) .isBuyFlag(coupon.isBuyFlag()) .memo(coupon.getMemo()) .build(); diff --git a/src/main/java/com/sookmyung/concon/Coupon/service/CouponFacade.java b/src/main/java/com/sookmyung/concon/Coupon/service/CouponFacade.java index 9289a8a..6ea85b8 100644 --- a/src/main/java/com/sookmyung/concon/Coupon/service/CouponFacade.java +++ b/src/main/java/com/sookmyung/concon/Coupon/service/CouponFacade.java @@ -28,10 +28,15 @@ public class CouponFacade { private final ReviewRepository reviewRepository; public CouponDetailResponseDto toDetailDto(Coupon coupon, User user, Item item) { - String couponImageUrl = photoFacade.getCouponPhotoUrl(coupon); - String barcodeImageUrl = photoFacade.getCouponBarcodePhotoUrl(coupon); + String couponImageUrl = ""; + String barcodeImageUrl = ""; + if (!coupon.isSellFlag()) { + couponImageUrl = photoFacade.getCouponPhotoUrl(coupon); + barcodeImageUrl = photoFacade.getCouponBarcodePhotoUrl(coupon); + } UserSimpleResponseDto userDto = UserSimpleResponseDto.toDto(user, photoFacade.getUserPhotoUrl(user)); ItemSimpleResponseDto itemDto = ItemSimpleResponseDto.toDto(item, photoFacade.getItemPhotoUrl(item)); + List reviews = reviewRepository.findAllByItemId(item.getId(), PageRequest.of(0, 10)) .stream().map(ReviewSimpleResponseDto::toDto).toList(); diff --git a/src/main/java/com/sookmyung/concon/Coupon/service/CouponService.java b/src/main/java/com/sookmyung/concon/Coupon/service/CouponService.java index 98239bb..0caa361 100644 --- a/src/main/java/com/sookmyung/concon/Coupon/service/CouponService.java +++ b/src/main/java/com/sookmyung/concon/Coupon/service/CouponService.java @@ -34,8 +34,6 @@ public class CouponService { private final ItemFacade itemFacade; private final OrderUserFacade orderUserFacade; private final CouponFacade couponFacade; - private final PhotoFacade photoFacade; - private final UserFacade userFacade; private final ReviewRepository reviewRepository; @@ -61,6 +59,9 @@ public List getAllMyCoupon(String token) { .map(couponFacade::toSimpleDto) .toList(); } + + + // 쿠폰 ID 로 단일 조회 @Transactional(readOnly = true) public CouponDetailResponseDto getCouponDetail(String token, Long couponId) { User user = orderUserFacade.findUserByToken(token); @@ -95,6 +96,7 @@ public CouponDetailResponseDto cancelCoupon(Long couponId) { return couponFacade.toDetailDto(coupon, coupon.getUser(), coupon.getItem()); } + // 남은 돈 업데이트 @Transactional public CouponDetailResponseDto changeRemainPrice(CouponChangePriceRequestDto request) { Coupon coupon = couponFacade.findByCouponId(request.getCouponId()); diff --git a/src/main/java/com/sookmyung/concon/Order/service/OrderServiceImpl.java b/src/main/java/com/sookmyung/concon/Order/service/OrderServiceImpl.java index 0ae9de4..4215c23 100644 --- a/src/main/java/com/sookmyung/concon/Order/service/OrderServiceImpl.java +++ b/src/main/java/com/sookmyung/concon/Order/service/OrderServiceImpl.java @@ -48,6 +48,9 @@ public OrderDetailResponseDto createOrder(OrderCreateRequestDto request) { User seller = coupon.getUser(); Orders orders = request.toEntity(coupon, seller); orderRepository.save(orders); + + coupon.updateSellFlag(true); + return OrderDetailResponseDto.toDto(orders, CouponSimpleResponseDto.toDto(coupon, ItemSimpleResponseDto.toDto(item, photoFacade.getItemPhotoUrl(item)), diff --git a/src/main/java/com/sookmyung/concon/Order/service/TransactionService.java b/src/main/java/com/sookmyung/concon/Order/service/TransactionService.java index 7c2695b..6bddc5a 100644 --- a/src/main/java/com/sookmyung/concon/Order/service/TransactionService.java +++ b/src/main/java/com/sookmyung/concon/Order/service/TransactionService.java @@ -153,6 +153,7 @@ public OrderDetailResponseDto completeTransaction(Long orderId) { Coupon coupon = order.getCoupon(); coupon.changeUser(order.getBuyer()); coupon.setBuyFlag(true); + coupon.updateSellFlag(false); // orderRequestRedisRepository.delete(orderId);