From 46244b9a139c597ed1eebc61126fb6da4bbccf4f Mon Sep 17 00:00:00 2001 From: Tim <47184194+imgde@users.noreply.github.com> Date: Sat, 24 May 2025 14:07:52 +0200 Subject: [PATCH] Add OrderController --- .../webshop/controller/OrderController.java | 97 +++++++++++++++++++ .../webshop/repository/OrderRepository.java | 3 + .../webshop/repository/entities/Order.java | 14 ++- .../htwsaar/webshop/service/OrderService.java | 12 +++ .../service/impl/OrderServiceImpl.java | 41 ++++++++ 5 files changed, 164 insertions(+), 3 deletions(-) create mode 100644 00-backend/src/main/java/de/htwsaar/webshop/controller/OrderController.java create mode 100644 00-backend/src/main/java/de/htwsaar/webshop/service/OrderService.java create mode 100644 00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.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 new file mode 100644 index 0000000..69517a2 --- /dev/null +++ b/00-backend/src/main/java/de/htwsaar/webshop/controller/OrderController.java @@ -0,0 +1,97 @@ +package de.htwsaar.webshop.controller; + +import de.htwsaar.webshop.repository.entities.Order; +import de.htwsaar.webshop.service.OrderService; +import de.htwsaar.webshop.service.ValidatorService; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static de.htwsaar.webshop.config.ControllerPathConfig.ORDER_BASE; +import static de.htwsaar.webshop.config.ControllerPathConfig.ORDER_GET_ALL; +import static de.htwsaar.webshop.config.ParameterConfig.*; +import static de.htwsaar.webshop.util.LoggerUtil.logRequest; + +@RestController +@Slf4j +public class OrderController { + + private final OrderService orderService; + private final ValidatorService validatorService; + + @Autowired + public OrderController(OrderService orderService, ValidatorService validatorService) { + this.orderService = orderService; + this.validatorService = validatorService; + } + + @RequestMapping(path = ORDER_GET_ALL, method = RequestMethod.GET, produces = "application/json") + 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); + } + + @RequestMapping(path = ORDER_BASE, method = RequestMethod.GET, produces = "application/json") + public ResponseEntity get(HttpServletRequest request, + @RequestParam(value = PARAM_ID) Long orderId) { + logRequest(request); + Order image = orderService.getOrderById(orderId); + if(image == null) { + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + return ResponseEntity.ok(image); + } + + @RequestMapping(path = ORDER_BASE, method = RequestMethod.POST, produces = "application/json") + public ResponseEntity add(HttpServletRequest request, + @RequestBody Order order) { + logRequest(request); + + if (validatorService.isInvalid(order)) { + log.warn("[{}] failed Validation, sending bad request", request.getRequestURI()); + return ResponseEntity.badRequest().body(false); + } + + Order saved = orderService.save(order); + return ResponseEntity.ok(saved != null); + } + + //TODO: check whether an order should be updatable + @RequestMapping(path = ORDER_BASE, method = RequestMethod.PUT, produces = "application/json") + public ResponseEntity update(HttpServletRequest request, + @RequestParam(value = PARAM_ID) Long orderId, + @RequestBody Order order) { + logRequest(request); + if (orderId == null || orderService.getOrderById(orderId) == null) { + return ResponseEntity.badRequest().body(false); + } + order.setId(orderService.getOrderById(orderId).getId()); + return ResponseEntity.ok(orderService.save(order) != null); + } + + @RequestMapping(path = ORDER_BASE, method = RequestMethod.DELETE, produces = "application/json") + public ResponseEntity delete(HttpServletRequest request, + @RequestParam(value = PARAM_ID) Long orderId) { + logRequest(request); + if (orderId == null) { + log.warn("[{}] got invalid orderId", request.getRequestURI()); + return ResponseEntity.badRequest().body(false); + } + if (orderService.getOrderById(orderId) != null) { + log.warn("[{}] got invalid orderId", request.getRequestURI()); + return ResponseEntity.badRequest().body(false); + } + orderService.delete(orderId); + return ResponseEntity.ok().build(); + } +} diff --git a/00-backend/src/main/java/de/htwsaar/webshop/repository/OrderRepository.java b/00-backend/src/main/java/de/htwsaar/webshop/repository/OrderRepository.java index a2e1c8a..a37d19a 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/repository/OrderRepository.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/repository/OrderRepository.java @@ -4,6 +4,9 @@ import de.htwsaar.webshop.repository.entities.Order; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface OrderRepository extends JpaRepository { + List getOrdersByCustomer_Id(Long customerId); } 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 41b135c..290bc2a 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,9 +1,17 @@ package de.htwsaar.webshop.repository.entities; import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import java.util.List; +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor @Entity @Table(name = "Orders") public class Order { @@ -11,13 +19,13 @@ public class Order { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = CascadeType.ALL, targetEntity = Customer.class) @JoinColumn(name = "customerId") private Customer customer; - @Column(name = "time") + @Column(name = "time", nullable = false) private Long time; - @OneToMany(mappedBy = "order", fetch = FetchType.LAZY) + @OneToMany(mappedBy = "order", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL, targetEntity = OrderItem.class) private List orderItems; } 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 new file mode 100644 index 0000000..9a6c2b4 --- /dev/null +++ b/00-backend/src/main/java/de/htwsaar/webshop/service/OrderService.java @@ -0,0 +1,12 @@ +package de.htwsaar.webshop.service; + +import de.htwsaar.webshop.repository.entities.Order; + +import java.util.List; + +public interface OrderService { + Order save(Order order); + void delete(Long orderId); + Order getOrderById(Long orderId); + List getAllOrders(Long customerId); +} 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 new file mode 100644 index 0000000..0536b15 --- /dev/null +++ b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/OrderServiceImpl.java @@ -0,0 +1,41 @@ +package de.htwsaar.webshop.service.impl; + +import de.htwsaar.webshop.repository.OrderRepository; +import de.htwsaar.webshop.repository.entities.Order; +import de.htwsaar.webshop.service.OrderService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@Slf4j +public class OrderServiceImpl implements OrderService { + private final OrderRepository orderRepository; + + @Autowired + public OrderServiceImpl(OrderRepository orderRepository) { + this.orderRepository = orderRepository; + } + + @Override + public Order save(Order order) { + return orderRepository.save(order); + } + + @Override + public void delete(Long orderId) { + orderRepository.deleteById(orderId); + } + + @Override + public Order getOrderById(Long orderId) { + return orderRepository.findById(orderId).orElse(null); + } + + @Override + public List getAllOrders(Long customerId) { + return orderRepository.getOrdersByCustomer_Id(customerId); + } +}