Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,015 changes: 505 additions & 510 deletions API_DOCUMENTATION.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.example.task_manager.DTO;

import com.example.task_manager.enums.RoleType;

public class TeamMemberInTeamDTO {
private int accountId;
private String userName;
private String userEmail;
private RoleType role;
private boolean isTeamLead;

public TeamMemberInTeamDTO(int accountId, String userName, String userEmail, RoleType role, boolean isTeamLead) {
this.accountId = accountId;
this.userName = userName;
this.userEmail = userEmail;
this.role = role;
this.isTeamLead = isTeamLead;
}

//getters and setters
public int getAccountId() {
return accountId;
}

public void setAccountId(int accountId) {
this.accountId = accountId;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getUserEmail() {
return userEmail;
}

public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}

public RoleType getRole() {
return role;
}

public void setRole(RoleType role) {
this.role = role;
}

public boolean isIsTeamLead() {
return isTeamLead;
}

public void setIsTeamLead(boolean isTeamLead) {
this.isTeamLead = isTeamLead;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.example.task_manager.controller;

import com.example.task_manager.DTO.TeamDTO;
import com.example.task_manager.DTO.TeamMemberDTO;
import com.example.task_manager.DTO.TeamRequestDTO;
import com.example.task_manager.service.TeamService;

Expand All @@ -11,6 +10,7 @@
import java.util.List;

import com.example.task_manager.DTO.TaskDTO;
import com.example.task_manager.DTO.TeamMemberInTeamDTO;

@RestController
@RequestMapping("/api/teams")
Expand Down Expand Up @@ -57,7 +57,7 @@ public ResponseEntity<?> changeTeamLead(@PathVariable int teamId, @RequestBody T

// Get Team Members
@GetMapping("/{teamId}/members")
public ResponseEntity<List<TeamMemberDTO>> getTeamMembers(@PathVariable int teamId) {
public ResponseEntity<List<TeamMemberInTeamDTO>> getTeamMembers(@PathVariable int teamId) {
try {
return ResponseEntity.ok(teamService.getTeamMembers(teamId));
} catch (RuntimeException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -316,10 +316,12 @@ public List<TeamDTO> getTeamsForMember(int teamMemberId) {
.orElseThrow(() -> new RuntimeException("Team Member not found with ID: " + teamMemberId));

return teamMember.getTeams().stream()
.map(isMemberOf -> new TeamDTO(
isMemberOf.getTeam().getTeamId(),
isMemberOf.getTeam().getTeamName(),
isMemberOf.getTeam().getTeamLead().getAccountId()))
.map(isMemberOf -> {
Team team = isMemberOf.getTeam();
TeamMember lead = team.getTeamLead();
int leadId = (lead != null) ? lead.getAccountId() : -1; // 👈 sentinel for no lead
return new TeamDTO(team.getTeamId(), team.getTeamName(), leadId);
})
.collect(Collectors.toList());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.example.task_manager.DTO.TaskDTO;
import com.example.task_manager.DTO.TeamDTO;
import com.example.task_manager.DTO.TeamMemberDTO;
import com.example.task_manager.DTO.TeamMemberInTeamDTO;
import com.example.task_manager.entity.IsAssigned;
import com.example.task_manager.entity.IsMemberOf;
import com.example.task_manager.entity.Task;
Expand Down Expand Up @@ -99,20 +100,34 @@ public TeamDTO changeTeamLead(int teamId, String teamName, int teamLeadId) {
return new TeamDTO(team.getTeamId(), team.getTeamName(), team.getTeamLead().getAccountId());
}

/**
* Retrieves all members of a specified team.
*
* @param teamId The ID of the team.
* @return A list of TeamMembers belonging to the team.
*/
public List<TeamMemberDTO> getTeamMembers(int teamId) {
Team team = teamRepository.findById(teamId)
/**
* Retrieves all members of a specified team.
*
* @param teamId The ID of the team.
* @return A list of TeamMembers belonging to the team.
*/
public List<TeamMemberInTeamDTO> getTeamMembers(int teamId) {
Team team = teamRepository.findById(teamId)
.orElseThrow(() -> new RuntimeException("Team not found with ID: " + teamId));
return isMemberOfRepository.findMembersByTeamId(teamId).stream()
.map(IsMemberOf::getTeamMember)
.map(this::convertToDTO)

int teamLeadId = team.getTeamLead().getAccountId();

return isMemberOfRepository.findMembersByTeamId(teamId).stream()
.map(isMember -> {
TeamMember teamMember = isMember.getTeamMember();
boolean isTeamLead;

if (teamMember.getAccountId() == teamLeadId) {
isTeamLead = true;
}
else {
isTeamLead = false;
}

return convertToDTO(teamMember, isTeamLead);
})
.collect(Collectors.toList());
}
}

/*
* Returns all tasks attached to a team
Expand Down Expand Up @@ -163,11 +178,25 @@ private TeamDTO convertToDTO(Team team) {
team.getTeamLead() != null ? team.getTeamLead().getAccountId() : null
);
}

/**
* Converts a TeamMember entity to a TeamMemberDTO.
*/
* Converts a TeamMember entity to a TeamMemberDTO.
*/
private TeamMemberDTO convertToDTO(TeamMember teamMember) {
return new TeamMemberDTO(teamMember.getAccountId(), teamMember.getUserName(), teamMember.getUserEmail(), teamMember.getRole());
return new TeamMemberDTO(
teamMember.getAccountId(),
teamMember.getUserName(),
teamMember.getUserEmail(),
teamMember.getRole());
}

private TeamMemberInTeamDTO convertToDTO(TeamMember teamMember, boolean isTeamLead) {
return new TeamMemberInTeamDTO(
teamMember.getAccountId(),
teamMember.getUserName(),
teamMember.getUserEmail(),
teamMember.getRole(),
isTeamLead
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.example.task_manager.DTO_tests;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;

import com.example.task_manager.DTO.TeamMemberInTeamDTO;
import com.example.task_manager.enums.RoleType;

public class TeamMemberInTeamDTOTest {
@Test
void testDTOConstructorAndGetters() {
TeamMemberInTeamDTO dto = new TeamMemberInTeamDTO(1, "Alice Johnson", "alice@example.com", RoleType.TEAM_MEMBER,
true);

assertEquals(1, dto.getAccountId());
assertEquals("Alice Johnson", dto.getUserName());
assertEquals("alice@example.com", dto.getUserEmail());
assertTrue(dto.isIsTeamLead());
}

@Test
void testDTOSetters() {
TeamMemberInTeamDTO dto = new TeamMemberInTeamDTO(1, "Alice Johnson", "alice@example.com", RoleType.TEAM_MEMBER, false);

dto.setAccountId(2);
dto.setUserName("Updated Name");
dto.setUserEmail("updated@example.com");
dto.setIsTeamLead(true);

assertEquals(2, dto.getAccountId());
assertEquals("Updated Name", dto.getUserName());
assertEquals("updated@example.com", dto.getUserEmail());
assertTrue(dto.isIsTeamLead());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import java.util.Collections;
import java.util.List;

import com.example.task_manager.DTO.TeamMemberInTeamDTO;
import com.example.task_manager.entity.TeamMember;

@WebMvcTest(TeamController.class)
Expand Down Expand Up @@ -116,9 +117,10 @@ void testGetTeamMembers() throws Exception {
String memberName = "John Doe " + teamId;
String memberEmail = "john" + teamId + "@example.com";
RoleType role = RoleType.TEAM_MEMBER;
boolean isTeamLead = false;

TeamMemberDTO mockTeamMember = new TeamMemberDTO(teamMemberId, memberName, memberEmail, role);
List<TeamMemberDTO> teamMembers = Collections.singletonList(mockTeamMember);
TeamMemberInTeamDTO mockTeamMember = new TeamMemberInTeamDTO(teamMemberId, memberName, memberEmail, role, isTeamLead);
List<TeamMemberInTeamDTO> teamMembers = Collections.singletonList(mockTeamMember);

when(teamService.getTeamMembers(teamId)).thenReturn(teamMembers);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@
import org.springframework.boot.test.context.SpringBootTest;

import com.example.task_manager.DTO.TaskDTO;

import org.springframework.test.context.ActiveProfiles;

import jakarta.transaction.Transactional;

import com.example.task_manager.DTO.TeamDTO;
import com.example.task_manager.DTO.TeamMemberDTO;
import com.example.task_manager.DTO.TeamMemberInTeamDTO;
import com.example.task_manager.entity.IsAssigned;
import com.example.task_manager.entity.Task;
import com.example.task_manager.entity.Team;
Expand Down Expand Up @@ -89,7 +91,7 @@ void testCreateTeam() {

TeamDTO newTeam = teamService.createTeam(teamName, teamLead.getAccountId());

List<TeamMemberDTO> members = teamService.getTeamMembers(newTeam.getTeamId());
List<TeamMemberInTeamDTO> members = teamService.getTeamMembers(newTeam.getTeamId());

assertTrue(members.stream().anyMatch(member -> member.getAccountId() == teamLead.getAccountId()),
"Team lead should be included in the team's member list."
Expand Down Expand Up @@ -177,7 +179,7 @@ void testGetTeamMembers() {

isMemberOfService.addMemberToTeam(member.getAccountId(), team.getTeamId());

List<TeamMemberDTO> teamMembers = teamService.getTeamMembers(team.getTeamId());
List<TeamMemberInTeamDTO> teamMembers = teamService.getTeamMembers(team.getTeamId());

assertNotNull(teamMembers);
assertFalse(teamMembers.isEmpty());
Expand Down Expand Up @@ -209,7 +211,7 @@ void testGetMembersOfTeamWithNoMembers() {
TeamMember teamLead = createUniqueTeamMember("Lead");
Team team = createUniqueTeam(teamLead);

List<TeamMemberDTO> members = teamService.getTeamMembers(team.getTeamId());
List<TeamMemberInTeamDTO> members = teamService.getTeamMembers(team.getTeamId());
assertTrue(members.isEmpty());
}

Expand Down