From 5f071939d371c0be602a197b8e6b627c5ccd56a4 Mon Sep 17 00:00:00 2001
From: CodeSteak <codesteak@shellf.art>
Date: Tue, 5 May 2020 23:34:17 +0200
Subject: [PATCH] Renice error handling

---
 .../controller/shop/ShopArticleController.java         | 10 ++++++++--
 .../controller/shop/ShopCheckoutController.java        |  9 +++++++++
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopArticleController.java b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopArticleController.java
index 5670f49..3cb860f 100644
--- a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopArticleController.java
+++ b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopArticleController.java
@@ -8,6 +8,8 @@ import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.util.ArrayList;
 import java.util.List;
@@ -59,7 +61,9 @@ public class ShopArticleController {
     }
 
     @PostMapping("/{id}")
-    public String shopArticlesByIdBuy(HttpSession session,
+    public String shopArticlesByIdBuy(HttpServletRequest request,
+                                      HttpServletResponse response,
+                                      HttpSession session,
                                       @RequestAttribute(value = "shoppingCart") ShoppingCart shoppingCart,
                                       @PathVariable("id") Long id,
                                       @RequestParam("quantity") Integer quantity,
@@ -69,7 +73,9 @@ public class ShopArticleController {
 
         Optional<Article> article = articleRepository.findById(id);
         if (!article.isPresent()) {
-            throw new RuntimeException("Article not found!");
+            request.setAttribute("error", "Der Artikel wurde nicht gefunden.");
+            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+            return "error/404";
         }
 
         if (setAmount != null && setAmount) {
diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java
index 66ced97..ffdd9f3 100644
--- a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java
+++ b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java
@@ -20,6 +20,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.util.ArrayList;
 import java.util.TreeMap;
@@ -97,6 +98,8 @@ public class ShopCheckoutController {
 
     @PostMapping("/checkoutFinish")
     public String shopCheckoutFinish(
+            HttpServletRequest request,
+            HttpServletResponse response,
             @RequestAttribute(value = "user") User user,
             @RequestAttribute(value = "shoppingCart") ShoppingCart shoppingCart,
             @RequestParam("address") String address,
@@ -105,6 +108,12 @@ public class ShopCheckoutController {
             @RequestParam("expected_total") Integer expectedPrice
     ) {
 
+        if (shoppingCart.getRevision() != cartRevision) {
+            request.setAttribute("error", "Der Warenkorb wurde zwischenzeitlich bearbeitet. Daher die Kaufvorgang nicht abgeschlossen werden. Bitte versuchen Sie es erneut.");
+            response.setStatus(HttpServletResponse.SC_CONFLICT);
+            return "shop/checkout";
+        }
+
         // Must be refetched for persitence.
         user = userRepository.findById(user.id).get();