본문 바로가기

프로젝트_ 커피주문 서비스

Store - Order 연결

  • Entity/Order
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Entity
@Table(name = "Orders")
public class Order extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "member_id")
    private Member member;

    @ManyToOne
    @JoinColumn(name = "store_id")
    private Store store;

    @CreatedDate
    @Column
    private LocalDateTime orderDate;

    public static Order createOrder(OrderDto dto, Member member, Store store) {
        if (dto.getId() != null) {
            throw new IllegalArgumentException("생성 실패, 주문에는 ID가 없어야 함.");
        }
//        if (dto.getMemberId() != member.getId()) {
//            throw new IllegalArgumentException("생성 실패, 회원의 ID가 다름");
//        }
        return new Order(
                dto.getId(),
                member,
                store,
                dto.getOrderDate()
        );
    }
}

 

  • OrderDto
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class OrderDto {
    private Long id;

    @JsonProperty("member_id")
    private Long memberId;

    @JsonProperty("store_id")
    private Long storeId;

    private LocalDateTime orderDate;

    public static OrderDto createOrderDto(Order order) {
        return new OrderDto(
                order.getId(),
                order.getMember().getId(),
                order.getStore().getId(),
                order.getOrderDate()
        );
    }
}

 

  • 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);

    //지점 별 주문 조회
    @Query(value = "SELECT * FROM orders WHERE store_id = (SELECT id FROM store WHERE name = :StoreName)", nativeQuery = true)
    List<Order> listByStoreName(@Param("StoreName")String StoreName);

}

 

  • 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);
    }

    //지점 별 주문 조회
    @GetMapping("/api/orders/store/{StoreName}")
    public List<Order> listByStoreName(@PathVariable String StoreName) {
        return orderService.listByStoreName(StoreName);
    }

    //주문 생성
    @PostMapping("/api/orders/{memberId}/{storeId}")
    public ResponseEntity<OrderDto> create(@PathVariable Long memberId, @PathVariable Long storeId, @RequestBody OrderDto dto) {
        OrderDto createdDto = orderService.create(memberId, storeId, dto);

        return ResponseEntity.status(HttpStatus.OK).body(createdDto);
    }

    //주문 삭제
    @DeleteMapping("/api/orders/{id}")
    public ResponseEntity<Order> delete(@PathVariable Long id) {
        Order deleted = orderService.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

 

'프로젝트_ 커피주문 서비스' 카테고리의 다른 글

네이버 로그인 API (+구글 로그인 API)  (0) 2022.08.11
레이아웃, Member 변경  (0) 2022.08.11
Store CRUD  (0) 2022.08.08
Order 삭제  (0) 2022.08.07
Order 조회, Order_Product 등록, 삭제  (0) 2022.08.05