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 a33ab537ddf929fb423fc6ab82aed0e7af3babf0..e485351bd49494179545d7f045246f46d920ec58 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 8e82358929612d141ff28269560da43a835fa5dd..c1d1160cee469b8525a64aec0cd375127f13051f 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 5c90e08c389f8ddf218412386a0bf3ccd156f082..cf3b0fca6be1baeaa5cb6570cd0210d947799a1d 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 77f294fc3cb98207701c5c2bf9eb9c155f2c43eb..07d3739543d9d39527e01eac24b404b0e3621d2e 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 484f3ff93f71a911ef9b0bf1424443c5e7389ccc..e29d843eea7159002b73e946bb6cebcc26eca41f 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); + } }