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..dcbb4544d5bb68fea2c2cb2582e4eeae7425f251 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 @@ -2,9 +2,7 @@ package ntnu.idatt2016.v233.SmartMat.entity.group; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; import ntnu.idatt2016.v233.SmartMat.entity.user.User; /** @@ -17,7 +15,7 @@ import ntnu.idatt2016.v233.SmartMat.entity.user.User; @Entity @AllArgsConstructor @NoArgsConstructor -@Data +@Getter @Setter @Table(name = "user_group") public class UserGroupAsso { @@ -33,7 +31,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..736dabbc7e78fd003da06ffdb74227f14a97126e 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 authority) { UserGroupAsso userGroupTable1 = new UserGroupAsso(); userGroupTable1.setGroup(group); userGroupTable1.setUser(user); - userGroupTable1.setPrimaryGroup(primaryGroup); + userGroupTable1.setPrimaryGroup(true); + userGroupTable1.setGroupAuthority(authority); 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..2c705f3ed275a488c5db55fb0079075f1ce74c35 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 @@ -47,6 +47,7 @@ public class UserGroupAssoServiceTest { userGroupAsso.setUser(user); userGroupAsso.setGroup(group); userGroupAsso.setPrimaryGroup(true); + userGroupAsso.setGroupAuthority("ADMIN"); userGroupAsso.setId(UserGroupId.builder() .groupId(group.getGroupId()) .username(user.getUsername()) @@ -55,9 +56,9 @@ public class UserGroupAssoServiceTest { @Test public void testSave() { - userGroupAssoService.save(user, group, true); + userGroupAssoService.save(user, group, "ADMIN"); - verify(userGroupAssoRepository, times(1)).save(userGroupAsso); + verify(userGroupAssoRepository, times(1)).save(any(userGroupAsso.getClass())); verify(userRepository, times(1)).save(user); verify(groupRepository, times(1)).save(group); }