Skip to content

Commit

Permalink
feat: update save order api
Browse files Browse the repository at this point in the history
  • Loading branch information
Kang1221 committed Sep 2, 2024
1 parent b687661 commit c2da100
Showing 1 changed file with 23 additions and 32 deletions.
55 changes: 23 additions & 32 deletions src/main/java/co/orange/ddanzi/service/OrderService.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,11 @@
import co.orange.ddanzi.domain.product.Item;
import co.orange.ddanzi.domain.product.OptionDetail;
import co.orange.ddanzi.domain.product.Product;
import co.orange.ddanzi.domain.product.enums.ItemStatus;
import co.orange.ddanzi.domain.user.User;
import co.orange.ddanzi.dto.mypage.MyOrder;
import co.orange.ddanzi.dto.order.CheckProductResponseDto;
import co.orange.ddanzi.dto.order.CreateOrderRequestDto;
import co.orange.ddanzi.dto.order.*;
import co.orange.ddanzi.common.response.ApiResponse;
import co.orange.ddanzi.common.response.Success;
import co.orange.ddanzi.dto.order.OrderResponseDto;
import co.orange.ddanzi.dto.order.UpdateOrderResponseDto;
import co.orange.ddanzi.global.jwt.AuthUtils;
import co.orange.ddanzi.repository.*;
import jakarta.transaction.Transactional;
Expand All @@ -27,10 +23,11 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;

@Slf4j
Expand All @@ -39,7 +36,6 @@
public class OrderService {
private final AuthUtils authUtils;
private final ProductRepository productRepository;
private final ItemRepository itemRepository;
private final OrderRepository orderRepository;
private final PaymentRepository paymentRepository;
private final DiscountRepository discountRepository;
Expand Down Expand Up @@ -80,33 +76,25 @@ public ApiResponse<?> checkOrderProduct(String productId){
}

@Transactional
public ApiResponse<?> createOrder(CreateOrderRequestDto requestDto){
log.info("Checking the payment is done.");
///////////////////////////////////////////////////////////////////////////////////////////
// 형변환 해놨음 다시 수정필요

Payment payment = paymentRepository.findById(Long.parseLong(requestDto.getPaymentId())).orElseThrow(() -> new PaymentNotFoundException());
public ApiResponse<?> saveOrder(SaveOrderRequestDto requestDto){

///////////////////////////////////////////////////////////////////////////////////////////
Order order = orderRepository.findById(requestDto.getOrderId()).orElseThrow(OrderNotFoundException::new);
log.info("Checking the payment is done.");
Payment payment = order.getPayment();
if(!payment.getPayStatus().equals(PayStatus.PAID))
return ApiResponse.onFailure(Error.PAYMENT_REQUIRED,null);

User user = authUtils.getUser();
if(!payment.getBuyer().equals(user))
if(!order.getBuyer().equals(user))
return ApiResponse.onFailure(Error.PAYMENT_CANNOT_CHANGE,null);

Item item = itemRepository.findById(requestDto.getItemId()).orElseThrow(() -> new ItemNotFoundException());
item.updateStatus(ItemStatus.CLOSED);
log.info("Updated item status.");


Order order = createOrderRecord(requestDto, user, item);
order.updateStatus(OrderStatus.ORDER_PLACE);
termService.createOrderAgreements(order);

createOrderOptionDetails(order, requestDto.getSelectedOptionDetailIdList());
log.info("Created order option details.");

return ApiResponse.onSuccess(Success.CREATE_ORDER_SUCCESS, Map.of("orderId", order.getId()));
return ApiResponse.onSuccess(Success.CREATE_ORDER_SUCCESS, SaveOrderResponseDto.builder().orderId(order.getId()).orderStatus(order.getStatus()).build());
}

@Transactional
Expand Down Expand Up @@ -150,7 +138,7 @@ public ApiResponse<?> confirmedOrderToSale(String orderId){
.build());
}

public Order createOrder(User buyer, Item item){
public Order createOrderRecord(User buyer, Item item){
String orderId = createOrderId(item.getId());
Order newOrder = Order.builder()
.id(orderId)
Expand All @@ -163,6 +151,10 @@ public Order createOrder(User buyer, Item item){
return orderRepository.save(newOrder);
}

public Order getOrderRecord(String orderId){
return orderRepository.findById(orderId).orElseThrow(() -> new OrderNotFoundException());
}

private String createModifiedProductName(String productName){
return productName.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9,._\\s ]", "");
}
Expand All @@ -175,19 +167,18 @@ private void createOrderOptionDetails(Order order, List<Long> optionDetailIds){
}


private Order createOrderRecord(CreateOrderRequestDto requestDto, User user, Item item){
String orderId = createOrderId(requestDto.getItemId());
Order order = requestDto.toOrder(orderId, user, item);
order = orderRepository.save(order);
log.info("Create new order, order_id: {}", orderId);
return order;
}

private String createOrderId(String itemId){
String uploadDatePart = itemId.substring(itemId.length() - 8, itemId.length() - 2);
LocalDate uploadDate = LocalDate.parse(uploadDatePart, DateTimeFormatter.ofPattern("yyyyMMdd"));

LocalDate currentDate = LocalDate.now();
long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(uploadDate, currentDate);

Random random = new Random();
char firstChar = (char) ('A' + random.nextInt(26));
char secondChar = (char) ('A' + random.nextInt(26));
return itemId + firstChar + secondChar;
char thirdChar = (char) ('A' + random.nextInt(26));
return itemId + daysBetween + firstChar + secondChar + thirdChar;
}

private OrderResponseDto setOrderResponseDto(User user, Order order, Item item, Payment payment){
Expand Down

0 comments on commit c2da100

Please sign in to comment.