feat(customer-vue, order-service): 상품 상세페이지, 장바구니 기능 추가

- 상품 상세페이지
- 장바구니 기능 추가
This commit is contained in:
hoon7566
2022-03-08 17:14:25 +09:00
parent 053f33654a
commit b6583eaec2
19 changed files with 429 additions and 12 deletions

View File

@@ -64,6 +64,22 @@ public class Order extends BaseEntity {
return order;
}
public static Order of(Long userId, Long userCouponId, Long storeId, Long orderPrice,
OrderItem orderItem) {
Order order = new Order();
order.userId = userId;
order.userCouponId = userCouponId;
order.storeId = storeId;
order.orderPrice = orderPrice;
order.addOrderItem(orderItem);
order.usedPoint = 0L;
order.orderStatus = OrderStatus.PLACED;
order.orderTime = LocalDateTime.now();
return order;
}
public void setTransaction(Transaction transaction) {
this.transaction = transaction;
transaction.setOrder(this);

View File

@@ -3,6 +3,8 @@ package com.justpickup.orderservice.domain.order.repository;
import com.justpickup.orderservice.domain.order.entity.Order;
import org.springframework.data.jpa.repository.JpaRepository;
public interface OrderRepository extends JpaRepository<Order, Long> {
import java.util.Optional;
public interface OrderRepository extends JpaRepository<Order, Long> {
Optional<Order> findByUserId(Long userId);
}

View File

@@ -3,6 +3,7 @@ package com.justpickup.orderservice.domain.order.service;
import com.justpickup.orderservice.domain.order.dto.OrderDto;
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.SliceImpl;
@@ -13,4 +14,5 @@ public interface OrderService {
List<OrderDto> findOrderMain(OrderSearchCondition condition, Long storeId);
Page<OrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long storeId);
SliceImpl<OrderDto> findOrderHistory(Pageable pageable, Long userId);
void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId);
}

View File

@@ -6,6 +6,11 @@ import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
import com.justpickup.orderservice.domain.order.entity.Order;
import com.justpickup.orderservice.domain.order.repository.OrderRepository;
import com.justpickup.orderservice.domain.order.repository.OrderRepositoryCustom;
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
import com.justpickup.orderservice.domain.orderItem.entity.OrderItem;
import com.justpickup.orderservice.domain.orderItem.repository.OrderItemRepository;
import com.justpickup.orderservice.domain.orderItemOption.entity.OrderItemOption;
import com.justpickup.orderservice.domain.orderItemOption.repository.OrderItemOptionRepository;
import com.justpickup.orderservice.global.client.store.GetItemResponse;
import com.justpickup.orderservice.global.client.store.StoreClient;
import com.justpickup.orderservice.global.client.user.GetCustomerResponse;
@@ -20,6 +25,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Service
@@ -29,6 +35,8 @@ import java.util.stream.Collectors;
public class OrderServiceImpl implements OrderService {
private final OrderRepository orderRepository;
private final OrderItemRepository orderItemRepository;
private final OrderItemOptionRepository orderItemOptionRepository;
private final OrderRepositoryCustom orderRepositoryCustom;
private final StoreClient storeClient;
private final UserClient userClient;
@@ -91,4 +99,31 @@ public class OrderServiceImpl implements OrderService {
});
});
}
@Override
@Transactional
public void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId) {
orderItemDto.getCount();
//orderItemOption Entity를 생성한다.
List<OrderItemOption> orderItemOptions = orderItemDto.getOrderItemOptionDtoList()
.stream().map(orderItemOptionDto -> OrderItemOption.of(orderItemDto.getId()))
.collect(Collectors.toList());
//orderItem을 Entity를 생성한다.
OrderItem orderItem = OrderItem.of(orderItemDto.getItemId()
, orderItemDto.getPrice()
, orderItemDto.getCount()
,orderItemOptions);
//HARD_CODE
Long userCouponId=0L;
Optional<Order> optionalOrder = orderRepository.findByUserId(userId);
if(optionalOrder.isPresent()){
optionalOrder.get().addOrderItem(orderItem);
}else{
orderRepository.save(Order.of(userId,userCouponId,storeId,orderItemDto.getPrice(),orderItem));
}
}
}

View File

@@ -5,6 +5,7 @@ import com.justpickup.orderservice.domain.order.entity.OrderStatus;
import com.justpickup.orderservice.domain.order.service.OrderService;
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
import com.justpickup.orderservice.global.dto.Result;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
@@ -14,10 +15,7 @@ import org.springframework.data.domain.SliceImpl;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.time.format.DateTimeFormatter;
import java.util.List;
@@ -89,4 +87,37 @@ public class OrderCustomerApiController {
}
}
}
/**
* order
*/
@PostMapping("item")
public ResponseEntity addItemToBasket( @RequestBody RequestItem requestItem,
@RequestHeader(value = "user-id") String userId){
OrderItemDto orderItemDto = OrderItemDto.of(-1L,
requestItem.itemId,
requestItem.getPrice(),
requestItem.getCount(),
requestItem.getItemOptionIds());
orderService.addItemToBasket(orderItemDto,requestItem.getStoreId() ,Long.parseLong(userId));
return ResponseEntity.status(HttpStatus.NO_CONTENT)
.body(Result.createSuccessResult(null));
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class RequestItem{
private Long itemId;
private Long storeId;
private Long price;
private Long count;
private List<Long> itemOptionIds ;
}
}

View File

@@ -1,10 +1,14 @@
package com.justpickup.orderservice.domain.orderItem.dto;
import com.justpickup.orderservice.domain.orderItem.entity.OrderItem;
import com.justpickup.orderservice.domain.orderItemOption.dto.OrderItemOptionDto;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.stream.Collectors;
@Getter @NoArgsConstructor
public class OrderItemDto {
@@ -14,7 +18,7 @@ public class OrderItemDto {
private String itemName;
// private List<OrderItemOptionDto> orderItemOptionDtoList;
private List<OrderItemOptionDto> orderItemOptionDtoList;
private Long price;
@@ -38,6 +42,18 @@ public class OrderItemDto {
.build();
}
public static OrderItemDto of(Long id, Long itemId, Long price, Long count, List<Long> itemOptionIds) {
OrderItemDto orderItemDto = new OrderItemDto();
orderItemDto.id = id;
orderItemDto.itemId = itemId;
orderItemDto.price = price;
orderItemDto.count = count;
orderItemDto.orderItemOptionDtoList = itemOptionIds.stream()
.map(OrderItemOptionDto::new)
.collect(Collectors.toList());
return orderItemDto;
}
// == 변수 변경 메소드 == //
public void setItemName(String itemName) {
this.itemName = itemName;

View File

@@ -54,4 +54,15 @@ public class OrderItem extends BaseEntity {
}
return orderItem;
}
public static OrderItem of(Long itemId, Long price, Long count, List<OrderItemOption> orderItemOptions) {
OrderItem orderItem = new OrderItem();
orderItem.itemId = itemId;
orderItem.price = price;
orderItem.count = count;
for (OrderItemOption orderItemOption : orderItemOptions) {
orderItem.addOrderItemOption(orderItemOption);
}
return orderItem;
}
}

View File

@@ -0,0 +1,14 @@
package com.justpickup.orderservice.domain.orderItemOption.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor
public class OrderItemOptionDto {
private Long id;
public OrderItemOptionDto(Long id) {
this.id = id;
}
}

View File

@@ -32,4 +32,11 @@ public class OrderItemOption extends BaseEntity {
OrderItemOption orderItemOption = new OrderItemOption();
return orderItemOption;
}
public static OrderItemOption of(Long itemOptionId) {
OrderItemOption orderItemOption = new OrderItemOption();
orderItemOption.itemOptionId = itemOptionId;
return orderItemOption;
}
}

View File

@@ -0,0 +1,8 @@
package com.justpickup.orderservice.domain.orderItemOption.repository;
import com.justpickup.orderservice.domain.orderItemOption.entity.OrderItemOption;
import org.springframework.data.jpa.repository.JpaRepository;
public interface OrderItemOptionRepository extends JpaRepository<OrderItemOption , Long> {
}

View File

@@ -7,7 +7,7 @@ spring:
jpa:
hibernate:
ddl-auto: validate
ddl-auto: create-drop
generate-ddl: true
open-in-view: false
properties: