diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/UserGroupAssoController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/UserGroupAssoController.java index e5af6f113f8f2b96df3e0919a846276e130061d6..4500f8be0bdc62265cb9d6545c158c7fac351370 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/UserGroupAssoController.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/UserGroupAssoController.java @@ -5,10 +5,7 @@ import lombok.AllArgsConstructor; import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupAsso; import ntnu.idatt2016.v233.SmartMat.service.group.UserGroupAssoService; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -35,4 +32,10 @@ public class UserGroupAssoController { return userGroupAssoService.getInformationByGroupId(groupId).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build()); } + @PutMapping("/markNewPrimary/{username}/{oldId}/{newId}") + public ResponseEntity<?> markNewPrimaryGroup(@PathVariable("username") String username, + @PathVariable("newId") long newId, + @PathVariable("oldId") long oldId){ + return userGroupAssoService.changePrimaryGroup(oldId,newId,username).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build()); + } } 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 169031a859ffa1b46b7b252cdbb80933b8e0c747..663fa1f0d60ae5587adcbcf33216ce58561d43af 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 @@ -33,7 +33,7 @@ public class UserGroupAsso { @ManyToOne @MapsId("group_id") @JoinColumn(name = "group_id") - @JsonIgnoreProperties("user") + @JsonIgnoreProperties({"group", "user"}) 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 e05736af7c6670bedbd8c864c79045fceaeccfc8..3d3905d5bd01fdc362a35ed10b0127b590711a62 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 @@ -3,6 +3,7 @@ package ntnu.idatt2016.v233.SmartMat.repository.group; import ntnu.idatt2016.v233.SmartMat.entity.group.Group; import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupId; import ntnu.idatt2016.v233.SmartMat.entity.group.UserGroupAsso; +import ntnu.idatt2016.v233.SmartMat.entity.user.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -30,4 +31,5 @@ public interface UserGroupAssoRepository extends JpaRepository<UserGroupAsso, Us */ List<UserGroupAsso> findAllByGroup(Group group); + Optional<UserGroupAsso> findAllByGroupAndUser(Group group, User user); } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/UserGroupAssoService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/UserGroupAssoService.java index 2704cedcc91bf20582886c7a3beaac41f01e187f..463dd5d6fa53895855b2cb0df30f0c972bc0ec39 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/UserGroupAssoService.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/UserGroupAssoService.java @@ -22,11 +22,12 @@ public class UserGroupAssoService { private GroupRepository groupRepository; private final UserRepository userRepository; - public void save(User user, Group group, boolean primaryGroup) { + public void save(User user, Group group, String userAuthority) { UserGroupAsso userGroupTable1 = new UserGroupAsso(); userGroupTable1.setGroup(group); userGroupTable1.setUser(user); - userGroupTable1.setPrimaryGroup(primaryGroup); + userGroupTable1.setPrimaryGroup(true); + userGroupTable1.setGroupAuthority(userAuthority); userGroupTable1.setId(UserGroupId.builder() .groupId(group.getGroupId()) .username(user.getUsername()) @@ -56,4 +57,29 @@ public class UserGroupAssoService { return Optional.empty(); } + /** + * Changes the primary group of a user by unmarking the current primary group and marking a new primary group. + * + * @param newId The ID of the new primary group. + * @param username The username of the user whose primary group is being changed. + */ + public Optional<Object> changePrimaryGroup(long oldId, long newId, String username){ + Optional<Group> oldGroup = groupRepository.findByGroupId(oldId); + Optional<Group> newGroup = groupRepository.findByGroupId(newId); + Optional<User> user = userRepository.findByUsername(username); + + if (oldGroup.isEmpty()) return Optional.empty(); + if (newGroup.isEmpty()) return Optional.empty(); + if (user.isEmpty()) return Optional.empty(); + + UserGroupAsso userGroupAsso = userGroupAssoRepository.findAllByGroupAndUser(oldGroup.get(),user.get()).get(); + userGroupAsso.setPrimaryGroup(false); + + userGroupAssoRepository.save(userGroupAsso); + userGroupAsso = userGroupAssoRepository.findAllByGroupAndUser(newGroup.get(),user.get()).get(); + userGroupAsso.setPrimaryGroup(true); + userGroupAssoRepository.save(userGroupAsso); + + return Optional.of(userGroupAsso); + } } diff --git a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/UserGroupAssoServiceTest.java b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/UserGroupAssoServiceTest.java index 57d207c850fbdefa78023197afb42e163ef72853..726b64cb8d5f1d4bd2d187ac3449f6f9d8218d24 100644 --- a/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/UserGroupAssoServiceTest.java +++ b/src/test/java/ntnu/idatt2016/v233/SmartMat/service/group/UserGroupAssoServiceTest.java @@ -55,7 +55,7 @@ public class UserGroupAssoServiceTest { @Test public void testSave() { - userGroupAssoService.save(user, group, true); + userGroupAssoService.save(user, group, "ADMIN"); verify(userGroupAssoRepository, times(1)).save(userGroupAsso); verify(userRepository, times(1)).save(user);