From 403138d095190d0904404f566f736db9cea3b5a6 Mon Sep 17 00:00:00 2001 From: timmi Date: Sun, 30 Mar 2025 02:55:01 -0700 Subject: [PATCH] Fix to make member remain as team lead when their role is changed. --- .../task_manager/service/AdminService.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/backend/task-manager/src/main/java/com/example/task_manager/service/AdminService.java b/backend/task-manager/src/main/java/com/example/task_manager/service/AdminService.java index 739792f..f8a4558 100644 --- a/backend/task-manager/src/main/java/com/example/task_manager/service/AdminService.java +++ b/backend/task-manager/src/main/java/com/example/task_manager/service/AdminService.java @@ -1,5 +1,6 @@ package com.example.task_manager.service; +import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -128,7 +129,7 @@ public AdminDTO promoteToAdmin(int teamMemberId) { .orElseThrow(() -> new RuntimeException("Team Member not found with ID: " + teamMemberId)); // Find all teams led by this member - removeIfTeamLead(teamMemberId); + List teamsMemberLeads = removeAndSaveTeamIfTeamLead(teamMemberId); // Extract info String oldName = teamMember.getUserName(); @@ -166,12 +167,17 @@ public AdminDTO promoteToAdmin(int teamMemberId) { isAssigned.setTeamMember(savedAdmin); } + for (Team team : teamsMemberLeads) { + team.setTeamLead(savedAdmin); + } + for (IsMemberOf isMemberOf : newMemberships) { isMemberOf.setTeamMember(savedAdmin); } isAssignedRepository.saveAll(newAssignments); isMemberOfRepository.saveAll(newMemberships); + teamRepository.saveAll(teamsMemberLeads); return convertToDTO(savedAdmin); } @@ -182,7 +188,7 @@ public TeamMemberDTO demoteToTeamMember(int adminId) { .orElseThrow(() -> new RuntimeException("Admin not found with ID: " + adminId)); // Find all teams led by this member - removeIfTeamLead(adminId); + List teamsMemberLeads = removeAndSaveTeamIfTeamLead(adminId); // Extract info String oldName = admin.getUserName(); @@ -221,25 +227,34 @@ public TeamMemberDTO demoteToTeamMember(int adminId) { isAssigned.setTeamMember(savedTeamMember); } + for (Team team : teamsMemberLeads) { + team.setTeamLead(savedTeamMember); + } + for (IsMemberOf isMemberOf : newMemberships) { isMemberOf.setTeamMember(savedTeamMember); } isAssignedRepository.saveAll(newAssignments); isMemberOfRepository.saveAll(newMemberships); - + teamRepository.saveAll(teamsMemberLeads); + return convertToDTO(savedTeamMember); } - private void removeIfTeamLead(int memberId) { + private List removeAndSaveTeamIfTeamLead(int memberId) { + List teamsMemberLeads = new ArrayList<>(); List teamsLed = teamRepository.findByTeamLead_AccountId(memberId); for (Team team : teamsLed) { + teamsMemberLeads.add(team); team.setTeamLead(null); } teamRepository.saveAll(teamsLed); teamRepository.flush(); + + return teamsMemberLeads; } private void clearMemberRelations(TeamMember member) {