- Order 조회
- OrderService
@Slf4j
@Service
public class OrderService {
@Autowired
private OrderRepository orderRepository;
@Autowired
private MemberRepository memberRepository;
@Autowired
private OrderProductRepository orderProductRepository;
//전체 주문 조회
public List<Order> list() {
return orderRepository.findAll();
}
//회원 전화번호 별 주문 조회
public List<Order> findByPhoneNum(String PhoneNum) {
return orderRepository.findByPhoneNum(PhoneNum);
}
//주문 생성
@Transactional
public OrderDto create(Long memberId, OrderDto dto) {
Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new IllegalArgumentException("생성 실패, 대상 회원이 없음"));
Order order = Order.createOrder(dto, member);
Order created = orderRepository.save(order);
return OrderDto.createOrderDto(created);
}
}
- OrderRepository
public interface OrderRepository extends JpaRepository<Order, Long> {
//회원 전화번호 별 주문 조회
@Query(value = "SELECT * FROM orders WHERE member_id = " +
"(SELECT id FROM member WHERE phone_num = :PhoneNum);", nativeQuery = true)
List<Order> findByPhoneNum(@Param("PhoneNum")String PhoneNum);
}
- OrderAPIController
@RestController
public class OrderAPIController {
@Autowired
private OrderService orderService;
//전체 주문 조회
@GetMapping("/api/orders")
public List<Order> list() {
return orderService.list();
}
//회원 전화번호 별 주문 조회
@GetMapping("/api/orders/{PhoneNum}")
public List<Order> listByPhone(@PathVariable String PhoneNum) {
return orderService.findByPhoneNum(PhoneNum);
}
//주문 생성
@PostMapping("/api/orders/{memberId}")
public ResponseEntity<OrderDto> create(@PathVariable Long memberId, @RequestBody OrderDto dto) {
OrderDto createdDto = orderService.create(memberId, dto);
return ResponseEntity.status(HttpStatus.OK).body(createdDto);
}
}
- Orderproduct 등록
- OrderProduct
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Entity
@Table (name = "OrderProduct")
public class OrderProduct {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "order_id")
private Order order;
@ManyToOne
@JoinColumn(name = "product_id")
private Product product;
@Column
private int Total;
public static OrderProduct createOrderProduct(OrderProductDto dto, Order order, Product product) {
return new OrderProduct(
dto.getId(),
order,
product,
product.getPrice()
);
}
}
- OrderProductDto
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class OrderProductDto {
private Long id;
@JsonProperty("order_id")
private Long OrderId;
@JsonProperty("product_id")
private Long ProductId;
@JsonProperty("total")
private int Total;
public static OrderProductDto createOrderProductDto(OrderProduct created) {
return new OrderProductDto(
created.getId(),
created.getOrder().getId(),
created.getProduct().getId(),
created.getTotal()
);
}
}
- OrderProductService
@Slf4j
@Service
public class OrderProductService {
@Autowired
private OrderProductRepository orderProductRepository;
@Autowired
private OrderRepository orderRepository;
@Autowired
private ProductRepository productRepository;
//주문 목록
public List<OrderProduct> list() {
return orderProductRepository.findAll();
}
//주문 등록
@Transactional
public OrderProductDto create(Long OrderId, Long ProductId, OrderProductDto dto) {
Order order = orderRepository.findById(OrderId)
.orElseThrow(() -> new IllegalArgumentException("대상 주문이 없음"));
Product product = productRepository.findById(ProductId)
.orElseThrow(() -> new IllegalArgumentException("대상 상품이 없음"));
OrderProduct orderProduct = OrderProduct.createOrderProduct(dto, order, product);
OrderProduct created = orderProductRepository.save(orderProduct);
return OrderProductDto.createOrderProductDto(created);
}
}
- OrderProductAPIController
@Slf4j
@RestController
public class OrderProductAPIController {
@Autowired
private OrderProductService orderProductService;
@GetMapping("/api/orderproducts")
public List<OrderProduct> list() {
return orderProductService.list();
}
//order_product 등록
@PostMapping("/api/orderproducts/{orderId}/{productId}")
public ResponseEntity<OrderProductDto> create(@PathVariable Long orderId, @PathVariable Long productId,
@RequestBody OrderProductDto dto) {
OrderProductDto createdDto = orderProductService.create(orderId, productId, dto);
return ResponseEntity.status(HttpStatus.OK).body(createdDto);
}
}
- OrderProduct 삭제
- OrderProductService
@Slf4j
@Service
public class OrderProductService {
.
.
.
.
//삭제
@Transactional
public OrderProduct delete(Long id) {
OrderProduct target = orderProductRepository.findById(id).orElse(null);
if (target == null) {
return null;
}
orderProductRepository.delete(target);
return target;
}
}
- OrderProductAPIController
@Slf4j
@RestController
public class OrderProductAPIController {
.
.
.
//order_product 삭제
@DeleteMapping("/api/orderproducts/{id}")
public ResponseEntity<OrderProduct> delete(@PathVariable Long id) {
OrderProduct deleted = orderProductService.delete(id);
return (deleted != null) ?
ResponseEntity.status(HttpStatus.OK).build() :
ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
}
GitHub - Pearlmoon997/CoffeeShop: CoffeeShop
CoffeeShop. Contribute to Pearlmoon997/CoffeeShop development by creating an account on GitHub.
github.com
'프로젝트_ 커피주문 서비스' 카테고리의 다른 글
Store CRUD (0) | 2022.08.08 |
---|---|
Order 삭제 (0) | 2022.08.07 |
OrderProduct_ SELECT 테스트 (0) | 2022.07.30 |
OrderDate 삽입 (0) | 2022.06.20 |
시간 등록을 위한 JPA Auditing 테스트 (0) | 2022.06.18 |