diff --git a/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/OrderItem.java b/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/OrderItem.java index b4e5968..a0de5c1 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/OrderItem.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/OrderItem.java @@ -3,16 +3,14 @@ package de.htwsaar.webshop.repository.entities; import de.htwsaar.webshop.model.OrderItemModel; import jakarta.persistence.*; import jakarta.validation.constraints.Min; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.hibernate.annotations.OnDelete; @Getter @Setter @AllArgsConstructor @NoArgsConstructor +@ToString @Entity @Table(name = "Order_Items") public class OrderItem { @@ -25,14 +23,12 @@ public class OrderItem { @Min(value = 1, message = "Amount must be at least 1") private Integer amount; - @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.ALL, targetEntity = Order.class) - @MapsId("order_id") + @ManyToOne(fetch = FetchType.EAGER, optional = false, cascade = CascadeType.ALL, targetEntity = Order.class) @JoinColumn(name = "order_id", referencedColumnName = "id", nullable = false) @OnDelete(action = org.hibernate.annotations.OnDeleteAction.CASCADE) private Order order; - @ManyToOne(fetch = FetchType.LAZY) - @MapsId("articleId") + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "article_id", referencedColumnName = "id", nullable = false) @OnDelete(action = org.hibernate.annotations.OnDeleteAction.SET_NULL) private Article article; diff --git a/00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.java b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.java index 0a59b51..2b30b5a 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.java @@ -2,6 +2,7 @@ package de.htwsaar.webshop.service.impl; import de.htwsaar.webshop.model.OrderItemModel; import de.htwsaar.webshop.model.OrderModel; +import de.htwsaar.webshop.repository.OrderItemRepository; import de.htwsaar.webshop.repository.OrderRepository; import de.htwsaar.webshop.repository.entities.Order; import de.htwsaar.webshop.repository.entities.OrderItem; @@ -13,9 +14,11 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service @Slf4j @@ -23,12 +26,14 @@ public class OrderServiceImpl implements OrderService { private final OrderRepository orderRepository; private final CustomerService customerService; private final ArticleService articleService; + private final OrderItemRepository orderItemRepository; @Autowired - public OrderServiceImpl(OrderRepository orderRepository, CustomerService customerService, ArticleService articleService) { + public OrderServiceImpl(OrderRepository orderRepository, CustomerService customerService, ArticleService articleService, OrderItemRepository orderItemRepository) { this.orderRepository = orderRepository; this.customerService = customerService; this.articleService = articleService; + this.orderItemRepository = orderItemRepository; } @Override @@ -43,18 +48,24 @@ public class OrderServiceImpl implements OrderService { @Override public Order save(OrderModel model) { - Order order = new Order( + Order order = save(new Order( model.getId(), customerService.findById(model.getCustomerId()), model.getTime(), model.getStatus(), null - ); - order.setOrderItems( - model.getOrderItems().stream().map(oim -> this.from(oim, order)).toList() - ); + )); log.info("Created Order from Model: {}", order); - return save(order); + order.setOrderItems( + model.getOrderItems().stream().map(oim -> this.from(oim, order)).collect( + ArrayList::new, + ArrayList::add, + ArrayList::addAll + ) + ); + orderItemRepository.saveAll(order.getOrderItems()); + log.info("Saved OrderItems"); + return order; } OrderItem from(OrderItemModel model, Order order) { diff --git a/00-backend/src/main/resources/db/initdb.sql b/00-backend/src/main/resources/db/initdb.sql index c18bfc5..ff11b38 100644 --- a/00-backend/src/main/resources/db/initdb.sql +++ b/00-backend/src/main/resources/db/initdb.sql @@ -75,8 +75,8 @@ CREATE TABLE IF NOT EXISTS Orders ( id INTEGER PRIMARY KEY NOT NULL, customer_id INTEGER NOT NULL, - time INTEGER NOT NULL, --unix millis or epoch, TBD - status INTEGER NOT NULL, --enum, see java or JS + time INTEGER NOT NULL, --unix millis + status INTEGER NOT NULL, --enum FOREIGN KEY (customer_id) REFERENCES Customers (id) ON DELETE CASCADE ON UPDATE CASCADE @@ -88,7 +88,6 @@ CREATE TABLE IF NOT EXISTS Order_Items order_id INTEGER NOT NULL, article_id INTEGER NOT NULL, amount INTEGER NOT NULL, - -- art conf not needed CONSTRAINT cAmount CHECK (amount > 0), FOREIGN KEY (order_id) REFERENCES Orders (id)