Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class Menu {
private Long menuId;

private int category;
private int orderId;
// private int orderId;

@Column(length = 100, nullable = false)
private String menuName;
Expand Down
40 changes: 14 additions & 26 deletions src/main/java/me/barion/capstoneprojectbarion/Entity/Order.java
Original file line number Diff line number Diff line change
@@ -1,47 +1,35 @@
package me.barion.capstoneprojectbarion.Entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.*;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Getter
@Setter
@Entity
@Table(name = "orders") // SQL 예약어 충돌로 orders로 변경
@Table(name = "orders")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder
public class Order {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "order_id")
private Integer orderId;

// Store와 N:1 관계
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@JoinColumn(name = "store_id")
@JoinColumn(name = "store_id", nullable = false)
private Store store;


@Column(name = "order_date")
@Column(name = "order_date", nullable = false)
private LocalDateTime orderDate;

@Column(name = "total_amount")
@Column(name = "total_amount", nullable = false)
private Integer totalAmount;

@Column(name = "order_status", length = 100)
@Column(name = "order_status", length = 100, nullable = false)
private String orderStatus;

public Order() {
}

public Order(Store store, LocalDateTime orderDate, Integer totalAmount, String orderStatus) {
this.store = store;
this.orderDate = orderDate;
this.totalAmount = totalAmount;
this.orderStatus = orderStatus;
}
}

@Builder.Default
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private List<OrderItem> items = new ArrayList<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package me.barion.capstoneprojectbarion.Entity;

import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;
import lombok.*;

@Entity
@Table(name = "order_item")
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder
public class OrderItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long orderItemId;

@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "order_id", nullable = false)
private Order order;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "menu_id", nullable = false)
private Menu menu;

@Column(nullable = false)
private Integer quantity;

@Column(nullable = false)
private Integer unitPrice;

@PrePersist
public void applyMenuPrice() {
if (this.unitPrice == null && this.menu != null) {
this.unitPrice = menu.getPrice();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import java.util.List;

@RestController
@RequestMapping("/menus")
@RequestMapping("/api/menus")
public class MenuController {
private final MenuService menuService;
private final MenuOptionService menuOptionService;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,73 +1,52 @@
package me.barion.capstoneprojectbarion.controller;

import io.swagger.v3.oas.annotations.Operation;
import jakarta.persistence.EntityNotFoundException;
import me.barion.capstoneprojectbarion.dto.OrderDto;
import me.barion.capstoneprojectbarion.Entity.Order;
import me.barion.capstoneprojectbarion.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.net.URI;
import java.util.List;
import java.util.NoSuchElementException;

@RestController
@RequestMapping("/orders")
@RequestMapping("/api/orders")
public class OrderController {

private final OrderService orderService;

@Autowired
public OrderController(OrderService orderService) {
this.orderService = orderService;
}

@Operation(summary = "주문 생성", description = "새로운 주문을 생성합니다.")
@PostMapping
public ResponseEntity<Order> createOrder(@RequestBody OrderDto orderDto) {
Order createdOrder = orderService.createOrder(orderDto);
return ResponseEntity.ok(createdOrder);
public ResponseEntity<OrderDto> createOrder(@RequestBody OrderDto dto) {
OrderDto saved = orderService.createOrder(dto);
URI location = URI.create("/orders/" + saved.getOrderId());
return ResponseEntity
.created(location) // 상태코드 201
.body(saved);
}

@Operation(summary = "주문 조회", description = "주문 정보를 단건 조회합니다.")
@GetMapping("/{orderId}")
public ResponseEntity<Order> getOrder(@PathVariable Integer orderId) {
try {
Order order = orderService.getOrder(orderId);
return ResponseEntity.ok(order);
} catch (EntityNotFoundException | NoSuchElementException e) {
return ResponseEntity.notFound().build();
}
public ResponseEntity<OrderDto> getOrder(@PathVariable Integer orderId) {
return ResponseEntity.ok(orderService.getOrder(orderId));
}

@Operation(summary = "매장의 모든 주문 조회", description = "storeId로 해당 매장의 모든 주문을 조회합니다.")
@GetMapping("/store/{storeId}")
public ResponseEntity<List<Order>> getOrdersByStoreId(@PathVariable Integer storeId) {
List<Order> orders = orderService.getOrdersByStoreId(storeId);
return ResponseEntity.ok(orders);
public ResponseEntity<List<OrderDto>> getByStore(@PathVariable Integer storeId) {
return ResponseEntity.ok(orderService.getOrdersByStoreId(storeId));
}

@Operation(summary = "주문 수정", description = "주문 정보를 수정합니다.")
@PutMapping("/{orderId}")
public ResponseEntity<Order> updateOrder(@PathVariable Integer orderId,
@RequestBody OrderDto orderDto) {
try {
Order updatedOrder = orderService.updateOrder(orderId, orderDto);
return ResponseEntity.ok(updatedOrder);
} catch (EntityNotFoundException e) {
return ResponseEntity.notFound().build();
}
public ResponseEntity<OrderDto> updateOrder(
@PathVariable Integer orderId,
@RequestBody OrderDto dto) {
return ResponseEntity.ok(orderService.updateOrder(orderId, dto));
}

@Operation(summary = "주문 삭제", description = "주문 정보를 삭제합니다.")
@DeleteMapping("/{orderId}")
public ResponseEntity<Void> deleteOrder(@PathVariable Integer orderId) {
try {
orderService.deleteOrder(orderId);
return ResponseEntity.noContent().build();
} catch (EntityNotFoundException e) {
return ResponseEntity.notFound().build();
}
orderService.deleteOrder(orderId);
return ResponseEntity.noContent().build();
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
@NoArgsConstructor
public class MenuRequestDto {
private int category;
private int orderId;
// private int orderId;
private String menuName;
private int price;
private int cost;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
public class MenuResponseDto {
private Long menuId;
private int category;
private int orderId;
// private int orderId;
private String menuName;
private int price;
private int cost;
Expand All @@ -32,7 +32,7 @@ public static MenuResponseDto fromEntity(Menu menu) {
return MenuResponseDto.builder()
.menuId(menu.getMenuId())
.category(menu.getCategory())
.orderId(menu.getOrderId())
// .orderId(menu.getOrderId())
.menuName(menu.getMenuName())
.price(menu.getPrice())
.cost(menu.getCost())
Expand Down
11 changes: 6 additions & 5 deletions src/main/java/me/barion/capstoneprojectbarion/dto/OrderDto.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package me.barion.capstoneprojectbarion.dto;

import lombok.Getter;
import lombok.Setter;

import lombok.*;
import java.time.LocalDateTime;
import java.util.List;

@Getter
@Setter
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder
public class OrderDto {
private Integer orderId;
private Integer storeId;
private LocalDateTime orderDate;
private Integer totalAmount;
private String orderStatus;
private List<OrderItemDto> items;
private Integer totalAmount;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package me.barion.capstoneprojectbarion.dto;


import lombok.*;

@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OrderItemDto {
private Long menuId;
private String menuName; // 응답 시 포함
private Integer quantity;
private Integer unitPrice;
private Integer totalPrice; // ★ 추가
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package me.barion.capstoneprojectbarion.repository;

import me.barion.capstoneprojectbarion.Entity.OrderItem;
import org.springframework.data.jpa.repository.JpaRepository;

public interface OrderItemRepository extends JpaRepository<OrderItem, Long> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@


public interface OrderRepository extends JpaRepository<Order, Integer> {
// 기존 메서드들
List<Order> findByStoreStoreId(Integer storeId);

@Query("SELECT COALESCE(SUM(o.totalAmount), 0) FROM Order o")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public MenuResponseDto createMenu(MenuRequestDto dto) throws IOException {
Menu menu = new Menu();
menu.setMenuName(dto.getMenuName());
menu.setCategory(dto.getCategory());
menu.setOrderId(dto.getOrderId());
// menu.setOrderId(dto.getOrderId());
menu.setPrice(dto.getPrice());
menu.setCost(dto.getCost());
menu.setMenuPresent(dto.getMenuPresent());
Expand Down Expand Up @@ -69,7 +69,7 @@ public MenuResponseDto updateMenu(Long menuId, MenuRequestDto dto) throws IOExce

menu.setMenuName(dto.getMenuName());
menu.setCategory(dto.getCategory());
menu.setOrderId(dto.getOrderId());
// menu.setOrderId(dto.getOrderId());
menu.setPrice(dto.getPrice());
menu.setCost(dto.getCost());
menu.setMenuPresent(dto.getMenuPresent());
Expand Down
Loading
Loading