From 84d7a41aa3332edb8597d95a1e20a4029386eb6d Mon Sep 17 00:00:00 2001
From: birkon <birkon@stud.ntnu.no>
Date: Tue, 2 May 2023 13:03:58 +0200
Subject: [PATCH] added get group endpoint

---
 .../SmartMat/controller/group/GroupController.java    | 11 +++++++++++
 .../entity/fridgeProduct/FridgeProductAsso.java       |  4 ++--
 .../v233/SmartMat/entity/group/UserGroupAsso.java     |  5 +++--
 .../repository/group/UserGroupAssoRepository.java     |  8 ++++++++
 .../v233/SmartMat/service/group/GroupService.java     | 10 ++++++++++
 5 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java
index a33ab537..e485351b 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/GroupController.java
@@ -19,6 +19,7 @@ import org.springframework.security.core.Authentication;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Controller for groups API, providing endpoints for group management
@@ -324,4 +325,14 @@ public class GroupController {
         }
     }
 
+    /**
+     * Handles the HTTP DELETE request to remove a user from a group.
+     * @param auth the authentication object containing the username of the user
+     * @return a ResponseEntity object containing the list of groups the user is associated with and an HTTP status code of 200,
+     */
+    @GetMapping("/")
+    public ResponseEntity<List<UserGroupAsso>> getAllGroupsByUser(Authentication auth) {
+        return ResponseEntity.ok(groupService.getUserGroupAssoByUserName(auth.getName()));
+    }
+
 }
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java
index 8e823589..c1d1160c 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java
@@ -23,12 +23,12 @@ public class FridgeProductAsso {
 
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
     @JoinColumn(name = "fridge_id")
-    @JsonIgnoreProperties({"products"})
+    @JsonIgnore
     private Fridge fridgeId;
 
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
     @JoinColumn(name = "ean")
-    @JsonIgnoreProperties({"fridges"})
+    @JsonIgnore
     private Product ean;
 
     @Column(name = "purchase_date")
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/UserGroupAsso.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/UserGroupAsso.java
index 5c90e08c..cf3b0fca 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/UserGroupAsso.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/UserGroupAsso.java
@@ -1,5 +1,6 @@
 package ntnu.idatt2016.v233.SmartMat.entity.group;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import jakarta.persistence.*;
 import lombok.*;
@@ -26,13 +27,13 @@ public class UserGroupAsso {
     @ManyToOne
     @MapsId("username")
     @JoinColumn(name = "username")
-    @JsonIgnoreProperties("group")
+    @JsonIgnore
     private User user;
 
     @ManyToOne
     @MapsId("group_id")
     @JoinColumn(name = "group_id")
-    @JsonIgnoreProperties({"group", "user"})
+    @JsonIgnoreProperties({"user", "fridge", "shoppingList"})
     private Group group;
 
     @Column(name = "primary_group")
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/UserGroupAssoRepository.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/UserGroupAssoRepository.java
index 77f294fc..07d37395 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/UserGroupAssoRepository.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/UserGroupAssoRepository.java
@@ -73,4 +73,12 @@ public interface UserGroupAssoRepository extends JpaRepository<UserGroupAsso, Us
      * @return
      */
     String findAuthorityByUser_UsernameAndGroup_GroupId(String username, long groupId);
+
+
+    /**
+     * Finds all groups a user is a member of
+     * @param username the username of the user
+     * @return a list of all groups the user is a member of
+     */
+    List<UserGroupAsso> findAllByUserUsername(String username);
 }
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/GroupService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/GroupService.java
index 484f3ff9..e29d843e 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/GroupService.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/GroupService.java
@@ -219,4 +219,14 @@ public class GroupService {
         Optional<UserGroupAsso> userGroupAsso = getUserGroupAsso(username, groupId);
         return userGroupAsso.map(UserGroupAsso::getGroupAuthority).orElseThrow(() -> new IllegalArgumentException("User is not associated with group"));
     }
+
+
+    /**
+     * Gets all user group associations for a user
+     * @param username the username of the user
+     * @return a list of all user group associations for the user
+     */
+    public List<UserGroupAsso> getUserGroupAssoByUserName(String username) {
+        return userGroupAssoRepository.findAllByUserUsername(username);
+    }
 }
-- 
GitLab