From 022f08a7734c571427c9aec749c0abe5f64c6584 Mon Sep 17 00:00:00 2001 From: Tim <47184194+imgde@users.noreply.github.com> Date: Thu, 12 Jun 2025 09:00:11 +0200 Subject: [PATCH] Add OrderModel, OrderItemModel --- .../webshop/controller/OrderController.java | 17 +++++----- .../htwsaar/webshop/model/OrderItemModel.java | 24 ++++++++++++++ .../de/htwsaar/webshop/model/OrderModel.java | 32 ++++++++++++++++++ .../webshop/repository/entities/Order.java | 6 ++++ .../repository/entities/OrderItem.java | 5 +++ .../htwsaar/webshop/service/OrderService.java | 3 ++ .../service/impl/OrderServiceImpl.java | 33 ++++++++++++++++++- 7 files changed, 111 insertions(+), 9 deletions(-) create mode 100644 00-backend/src/main/java/de/htwsaar/webshop/model/OrderItemModel.java create mode 100644 00-backend/src/main/java/de/htwsaar/webshop/model/OrderModel.java diff --git a/00-backend/src/main/java/de/htwsaar/webshop/controller/OrderController.java b/00-backend/src/main/java/de/htwsaar/webshop/controller/OrderController.java index c086bff..127dc05 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/controller/OrderController.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/controller/OrderController.java @@ -1,5 +1,6 @@ package de.htwsaar.webshop.controller; +import de.htwsaar.webshop.model.OrderModel; import de.htwsaar.webshop.model.OrderStatus; import de.htwsaar.webshop.repository.entities.Order; import de.htwsaar.webshop.service.OrderService; @@ -32,30 +33,30 @@ public class OrderController { } @RequestMapping(path = ORDER_GET_ALL, method = RequestMethod.GET, produces = "application/json") - public ResponseEntity> getAll(HttpServletRequest request, - @RequestParam(value = PARAM_CUSTOMER_ID) Long customerId) { + public ResponseEntity> getAll(HttpServletRequest request, + @RequestParam(value = PARAM_CUSTOMER_ID) Long customerId) { logRequest(request); List orders = orderService.getAllOrders(customerId); if (orders.isEmpty()) { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - return ResponseEntity.ok(orders); + return ResponseEntity.ok(orders.stream().map(Order::toModel).toList()); } @RequestMapping(path = ORDER_BASE, method = RequestMethod.GET, produces = "application/json") - public ResponseEntity get(HttpServletRequest request, + public ResponseEntity get(HttpServletRequest request, @RequestParam(value = PARAM_ID) Long orderId) { logRequest(request); - Order image = orderService.getOrderById(orderId); - if (image == null) { + Order order = orderService.getOrderById(orderId); + if (order == null) { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - return ResponseEntity.ok(image); + return ResponseEntity.ok(order.toModel()); } @RequestMapping(path = ORDER_BASE, method = RequestMethod.POST, produces = "application/json") public ResponseEntity add(HttpServletRequest request, - @RequestBody Order order) { + @RequestBody OrderModel order) { logRequest(request); if (validatorService.isInvalid(order)) { diff --git a/00-backend/src/main/java/de/htwsaar/webshop/model/OrderItemModel.java b/00-backend/src/main/java/de/htwsaar/webshop/model/OrderItemModel.java new file mode 100644 index 0000000..316bd24 --- /dev/null +++ b/00-backend/src/main/java/de/htwsaar/webshop/model/OrderItemModel.java @@ -0,0 +1,24 @@ +package de.htwsaar.webshop.model; + +import jakarta.annotation.Nullable; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.util.UUID; + +@Getter +@Setter +@AllArgsConstructor +public class OrderItemModel { + @Nullable + private Long id; + + @Min(value = 1, message = "Amount must be at least 1") + private Integer amount; + + @NotNull + private UUID article; +} diff --git a/00-backend/src/main/java/de/htwsaar/webshop/model/OrderModel.java b/00-backend/src/main/java/de/htwsaar/webshop/model/OrderModel.java new file mode 100644 index 0000000..148e115 --- /dev/null +++ b/00-backend/src/main/java/de/htwsaar/webshop/model/OrderModel.java @@ -0,0 +1,32 @@ +package de.htwsaar.webshop.model; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +import static de.htwsaar.webshop.util.TimeUtil.VALID_MIN_MILLIS_TIMESTAMP; + + +@Getter +@Setter +@AllArgsConstructor +public class OrderModel { + @NotNull + private Long id; + + @NotNull + private Long customerId; + + @Min(VALID_MIN_MILLIS_TIMESTAMP) + private Long time; + + @NotNull + private OrderStatus status; + + @NotNull + private List orderItems; +} diff --git a/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/Order.java b/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/Order.java index 00d4fe3..10bbc72 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/Order.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/repository/entities/Order.java @@ -1,5 +1,6 @@ package de.htwsaar.webshop.repository.entities; +import de.htwsaar.webshop.model.OrderModel; import de.htwsaar.webshop.model.OrderStatus; import jakarta.persistence.*; import lombok.AllArgsConstructor; @@ -32,4 +33,9 @@ public class Order { @OneToMany(mappedBy = "order", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL, targetEntity = OrderItem.class) private List orderItems; + + + public OrderModel toModel() { + return new OrderModel(id, customer.getId(), time, status, orderItems.stream().map(OrderItem::toModel).toList()); + } } 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 a1f2df8..5f4fd88 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 @@ -1,5 +1,6 @@ package de.htwsaar.webshop.repository.entities; +import de.htwsaar.webshop.model.OrderItemModel; import jakarta.persistence.*; import jakarta.validation.constraints.Min; import lombok.AllArgsConstructor; @@ -35,4 +36,8 @@ public class OrderItem { @JoinColumn(name = "article_id", referencedColumnName = "id", nullable = false) @OnDelete(action = org.hibernate.annotations.OnDeleteAction.SET_NULL) private Article article; + + public OrderItemModel toModel() { + return new OrderItemModel(id, amount, article.getUuid()); + } } diff --git a/00-backend/src/main/java/de/htwsaar/webshop/service/OrderService.java b/00-backend/src/main/java/de/htwsaar/webshop/service/OrderService.java index b3d13ba..802dc7e 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/service/OrderService.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/service/OrderService.java @@ -1,5 +1,6 @@ package de.htwsaar.webshop.service; +import de.htwsaar.webshop.model.OrderModel; import de.htwsaar.webshop.repository.entities.Order; import java.util.List; @@ -7,6 +8,8 @@ import java.util.List; public interface OrderService { Order save(Order order); + Order save(OrderModel model); + void delete(Long orderId); Order getOrderById(Long orderId); 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 0536b15..d1d081c 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 @@ -1,7 +1,12 @@ package de.htwsaar.webshop.service.impl; +import de.htwsaar.webshop.model.OrderItemModel; +import de.htwsaar.webshop.model.OrderModel; import de.htwsaar.webshop.repository.OrderRepository; import de.htwsaar.webshop.repository.entities.Order; +import de.htwsaar.webshop.repository.entities.OrderItem; +import de.htwsaar.webshop.service.ArticleService; +import de.htwsaar.webshop.service.CustomerService; import de.htwsaar.webshop.service.OrderService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -13,10 +18,14 @@ import java.util.List; @Slf4j public class OrderServiceImpl implements OrderService { private final OrderRepository orderRepository; + private final CustomerService customerService; + private final ArticleService articleService; @Autowired - public OrderServiceImpl(OrderRepository orderRepository) { + public OrderServiceImpl(OrderRepository orderRepository, CustomerService customerService, ArticleService articleService) { this.orderRepository = orderRepository; + this.customerService = customerService; + this.articleService = articleService; } @Override @@ -24,6 +33,28 @@ public class OrderServiceImpl implements OrderService { return orderRepository.save(order); } + @Override + public Order save(OrderModel model) { + Order order = 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); + } + + OrderItem from(OrderItemModel model, Order order) { + OrderItem orderItem = new OrderItem(model.getId(), model.getAmount(), order, articleService.findByUUID(model.getArticle())); + log.info("Created OrderItem from Model: {}", orderItem); + return orderItem; + } + @Override public void delete(Long orderId) { orderRepository.deleteById(orderId);