Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.

feat:Check OrderList(Host) #7

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 39 additions & 8 deletions src/main/java/com/deliveryjumper/controller/OrderController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,42 @@

import com.deliveryjumper.domain.Address;
import com.deliveryjumper.domain.Order;
import com.deliveryjumper.domain.OrderItem;
import com.deliveryjumper.domain.OrderStatus;
import com.deliveryjumper.repository.MemberRepository;
import com.deliveryjumper.repository.OrderRepository;
import com.deliveryjumper.repository.StoreRepository;
import com.deliveryjumper.service.OrderService;
import com.deliveryjumper.vo.OrderCheckRes;
import com.deliveryjumper.vo.OrderRequest;
import java.time.LocalDateTime;
import java.util.List;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
* Project : delivery-jumper
* Created by gonuu
* Date : 2021-08-09
* Time : 오전 9:04
* Blog : http://devonuu.tistory.com
* Github : http://github.com/devonuu
* Project : delivery-jumper Created by gonuu Date : 2021-08-09 Time : 오전 9:04 Blog :
* http://devonuu.tistory.com Github : http://github.com/devonuu
*/

@RestController
@RequiredArgsConstructor
public class OrderController {

private final OrderService orderService;
private final MemberRepository memberRepository;
private final StoreRepository storeRepository;
private final OrderRepository orderRepository;

@PostMapping("/order")
public ResponseEntity<OrderDto> saveOrder(@RequestBody OrderRequest request){
public ResponseEntity<OrderDto> saveOrder(@RequestBody OrderRequest request) {
Long saveId = orderService.save(request);
Order findOrder = orderService.findById(saveId);
OrderDto result = new OrderDto(findOrder);
Expand All @@ -39,16 +46,40 @@ public ResponseEntity<OrderDto> saveOrder(@RequestBody OrderRequest request){

@Data
static class OrderDto {

private LocalDateTime createDate;
private OrderStatus orderStatus;
private Address address;
private String phoneNumber;

public OrderDto(Order order){
public OrderDto(Order order) {
this.createDate = order.getCreateDate();
this.orderStatus = order.getOrderStatus();
this.address = order.getAddress();
this.phoneNumber = order.getPhoneNumber();
}
}

@Data
static class OrderItemDto{
private String title;
private double orderItemPrice;
private int orderItemQuantity;

public OrderItemDto(OrderItem orderItem){
title = orderItem.getItem().getTitle();
orderItemPrice = orderItem.getOrderItemPrice();
orderItemQuantity = orderItem.getOrderItemQuantity();

}
}

@GetMapping("/order")
public ResponseEntity<OrderCheckRes> checkOrder(@RequestParam Long storeId) {

List<OrderCheckRes> orderList = orderService.orderCheckById(storeId);

return new ResponseEntity<OrderCheckRes>((OrderCheckRes) orderList, HttpStatus.OK);
}

}
15 changes: 15 additions & 0 deletions src/main/java/com/deliveryjumper/repository/OrderRepository.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package com.deliveryjumper.repository;

import com.deliveryjumper.domain.Order;
import com.deliveryjumper.domain.OrderStatus;
import com.deliveryjumper.vo.OrderCheckRes;
import io.lettuce.core.dynamic.annotation.Param;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

/**
* Project : delivery-jumper
Expand All @@ -14,4 +20,13 @@

public interface OrderRepository extends JpaRepository<Order, Long> {

// @Query("select distinct o from Order o join fetch com.deliveryjumper.domain.orderItem oi "
// + "where o.storeId = storeId and o.orderStatus = 'ORDER'") //and o.orderId in :orderId
// List<OrderCheckRes> findByStoreIdAndOrderStatus(Long storeId, OrderStatus orderStatus);

@Query(value = "select distinct o from Order o join fetch o.com.deliveryjumper.domain.orderItem oi "
+ "where o.storeId = :storeId and o.orderStatus = :orderStatus", nativeQuery = true) //and o.orderId in :orderId
List<OrderCheckRes> findByStoreIdAndOrderStatus(@Param("storeId") Long storeId, @Param("orderStatus") OrderStatus orderStatus);


}
56 changes: 43 additions & 13 deletions src/main/java/com/deliveryjumper/service/OrderService.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,33 @@
package com.deliveryjumper.service;

import com.deliveryjumper.domain.Item;
import com.deliveryjumper.domain.ItemStatus;
import com.deliveryjumper.domain.Member;
import com.deliveryjumper.domain.Order;
import com.deliveryjumper.domain.OrderItem;
import com.deliveryjumper.domain.OrderStatus;
import com.deliveryjumper.domain.Store;
import com.deliveryjumper.domain.StoreStatus;
import com.deliveryjumper.repository.ItemRepository;
import com.deliveryjumper.repository.MemberRepository;
import com.deliveryjumper.repository.OrderItemRepository;
import com.deliveryjumper.repository.OrderRepository;
import com.deliveryjumper.repository.StoreRepository;
import com.deliveryjumper.vo.OrderCheckRes;
import com.deliveryjumper.vo.OrderItemRequest;
import com.deliveryjumper.vo.OrderRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.LongStream;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
* Project : delivery-jumper
* Created by gonuu
* Date : 2021-08-09
* Time : 오전 8:21
* Blog : http://devonuu.tistory.com
* Github : http://github.com/devonuu
* Project : delivery-jumper Created by gonuu Date : 2021-08-09 Time : 오전 8:21 Blog :
* http://devonuu.tistory.com Github : http://github.com/devonuu
*/

@Service
Expand All @@ -44,14 +41,21 @@ public class OrderService {
private final ItemRepository itemRepository;
private final OrderItemRepository orderItemRepository;

@Transactional
public Long save(OrderRequest request){
@Transactional(rollbackFor = Exception.class)
public Long save(OrderRequest request) {

Member member = memberRepository.findById(request.getMemberId())
.orElseThrow();
Store store = storeRepository.findById(request.getStoreId())
.orElseThrow();

//영업시간이 아닌 경우에 주문들어올 경우 예외처리
if (store.getStoreStatus().equals(StoreStatus.CLOSE)) {

throw new RuntimeException("the store is closed");

}

List<Long> itemIds = createItemIds(request.getOrderItemRequests());
List<Item> itemList = itemRepository.findAllByIds(itemIds);

Expand All @@ -72,7 +76,9 @@ public Long save(OrderRequest request){
return order.getId();
}

private List<OrderItem> createOrderItems(Map<Long, Item> items, Order order, List<OrderItemRequest> itemRequests) {

private List<OrderItem> createOrderItems(Map<Long, Item> items, Order order,
List<OrderItemRequest> itemRequests) {
List<OrderItem> orderItems = new ArrayList<>();
for (int i = 0; i < itemRequests.size(); i++) {
OrderItemRequest orderItemRequest = itemRequests.get(i);
Expand All @@ -87,17 +93,41 @@ private List<OrderItem> createOrderItems(Map<Long, Item> items, Order order, Lis
return orderItems;
}

@Transactional(rollbackFor = Exception.class)
private List<Long> createItemIds(List<OrderItemRequest> orderItemRequests) {
List<Long> itemIds = new ArrayList<>();
for (int i = 0; i < orderItemRequests.size(); i++) {
itemIds.add(orderItemRequests.get(i).getItemId());

Optional<Item> itemStatus = itemRepository
.findById(orderItemRequests.get(i).getItemId());

//음식메뉴가 On으로 되어 있는 itemId만 담도록 처리
if (itemStatus.equals(ItemStatus.ON)) {

itemIds.add(orderItemRequests.get(i).getItemId());

} else {

throw new RuntimeException("itemStatus is off");

}

}
return itemIds;
}

public Order findById(Long id){
public Order findById(Long id) {
Optional<Order> byId = orderRepository.findById(id);
Order order = byId.orElseThrow();
return order;
}

@Transactional
public List<OrderCheckRes> orderCheckById(Long storeId) {

List<OrderCheckRes> orderInfoList = orderRepository.findByStoreIdAndOrderStatus(storeId, OrderStatus.ORDER);

return orderInfoList;
}

}
28 changes: 28 additions & 0 deletions src/main/java/com/deliveryjumper/vo/OrderCheckRes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.deliveryjumper.vo;


import com.deliveryjumper.domain.Address;
import java.util.Collections;
import java.util.List;
import lombok.Data;

@Data
public class OrderCheckRes {

private List<Long> orderId;
private Long memberId;
private Long storeId;
private Address address;
private String phoneNumber;
private List<OrderItemRequest> orderItemRequests;

public OrderCheckRes(List<Long> orderId, Long memberId, Long storeId, Address address, String phoneNumber,
List<OrderItemRequest> orderItemRequests) {
this.orderId = orderId;
this.memberId = memberId;
this.storeId = storeId;
this.address = address;
this.phoneNumber = phoneNumber;
this.orderItemRequests = orderItemRequests;
}
}