From a6fbb2ed06b76dc70a40acca234f0580a03fc676 Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Wed, 1 Jun 2016 08:38:29 +0200
Subject: [PATCH] allow updating apps voted

---
 .../java/org/hbp/mip/controllers/AppsApi.java | 36 ++++++++++++++-----
 1 file changed, 27 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/hbp/mip/controllers/AppsApi.java b/src/main/java/org/hbp/mip/controllers/AppsApi.java
index 7c2794d22..aa0bd2357 100644
--- a/src/main/java/org/hbp/mip/controllers/AppsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/AppsApi.java
@@ -74,16 +74,35 @@ public class AppsApi {
         try {
             session.beginTransaction();
 
+            Vote vote = (Vote) session.createQuery("" +
+                    "SELECT v FROM Vote v, User u, App a " +
+                    "WHERE u=v.user " +
+                    "AND a=v.app " +
+                    "AND u.username= :username " +
+                    "AND a.id= :app_id")
+                    .setString("username", user.getUsername())
+                    .setLong("app_id", id)
+                    .uniqueResult();
             App app = (App) session.createQuery("FROM App where id= :id").setLong("id", id).uniqueResult();
 
-            Vote vote = new Vote();
-            vote.setUser(user);
-            vote.setValue(value);
-            vote.setApp(app);
+            if (vote != null) {
+                vote.setValue(value);
 
-            session.save(vote);
-
-            session.getTransaction().commit();
+                session.update(vote);
+                session.getTransaction().commit();
+                return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+            }
+            else
+            {
+                vote = new Vote();
+                vote.setUser(user);
+                vote.setValue(value);
+                vote.setApp(app);
+
+                session.save(vote);
+                session.getTransaction().commit();
+                return new ResponseEntity<>(HttpStatus.CREATED);
+            }
         }
         catch (ConstraintViolationException cve)
         {
@@ -108,8 +127,7 @@ public class AppsApi {
                 session.getTransaction().rollback();
                 throw e;
             }
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
         }
-
-        return new ResponseEntity<>(HttpStatus.CREATED);
     }
 }
-- 
GitLab