Fix Ordering Items

This commit is contained in:
Tim
2025-06-15 17:27:10 +02:00
parent f8e2f93bfa
commit 48d2be676b
3 changed files with 24 additions and 18 deletions

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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)