Add OrderModel, OrderItemModel

This commit is contained in:
Tim
2025-06-12 09:00:11 +02:00
parent aad3b96889
commit 022f08a773
7 changed files with 111 additions and 9 deletions

View File

@@ -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<List<Order>> getAll(HttpServletRequest request,
public ResponseEntity<List<OrderModel>> getAll(HttpServletRequest request,
@RequestParam(value = PARAM_CUSTOMER_ID) Long customerId) {
logRequest(request);
List<Order> 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<Order> get(HttpServletRequest request,
public ResponseEntity<OrderModel> 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<Boolean> add(HttpServletRequest request,
@RequestBody Order order) {
@RequestBody OrderModel order) {
logRequest(request);
if (validatorService.isInvalid(order)) {

View File

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

View File

@@ -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<OrderItemModel> orderItems;
}

View File

@@ -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<OrderItem> orderItems;
public OrderModel toModel() {
return new OrderModel(id, customer.getId(), time, status, orderItems.stream().map(OrderItem::toModel).toList());
}
}

View File

@@ -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());
}
}

View File

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

View File

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