From 9c4f882925cfe83c7aab1624d592ae295cd4d915 Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Wed, 25 May 2016 10:44:49 +0200
Subject: [PATCH] return 400 when trying to vote out of range 0 to 5 and return
 409 when trying to vote multiple times on the same app

---
 .../java/org/hbp/mip/controllers/AppsApi.java | 21 ++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/hbp/mip/controllers/AppsApi.java b/src/main/java/org/hbp/mip/controllers/AppsApi.java
index f65802db1..7c2794d22 100644
--- a/src/main/java/org/hbp/mip/controllers/AppsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/AppsApi.java
@@ -10,6 +10,7 @@ import org.hbp.mip.model.App;
 import org.hbp.mip.model.User;
 import org.hbp.mip.model.Vote;
 import org.hbp.mip.utils.HibernateUtil;
+import org.hibernate.NonUniqueObjectException;
 import org.hibernate.Query;
 import org.hibernate.Session;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.ConstraintViolationException;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -82,7 +84,24 @@ public class AppsApi {
             session.save(vote);
 
             session.getTransaction().commit();
-        } catch (Exception e)
+        }
+        catch (ConstraintViolationException cve)
+        {
+            if(session.getTransaction() != null)
+            {
+                session.getTransaction().rollback();
+            }
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+        }
+        catch (NonUniqueObjectException nuoe)
+        {
+            if(session.getTransaction() != null)
+            {
+                session.getTransaction().rollback();
+            }
+            return new ResponseEntity<>(HttpStatus.CONFLICT);
+        }
+        catch (Exception e)
         {
             if(session.getTransaction() != null)
             {
-- 
GitLab