Fix Ordering Items
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user