private async Task <List <ProjectMember> > DetermineMembers(ProjectMemberList projectMembers, bool addMembers = true) { // Basic check if (projectMembers == null || projectMembers.list.Count == 0) { return(null); } // Illegal operation to remove members between different projects in a single call var projectIds = projectMembers.list.Select(pm => pm.ProjectId).Distinct().ToList(); if (projectIds.Count > 1) { return(null); } // Check to only add members who aren't a part of the project already var existingMembers = await(from pm in _context.ProjectMembers where pm.ProjectId == projectIds[0] select pm).ToListAsync(); var pmc = new ProjectMemberComparer(); var changedMembers = projectMembers.list; if (addMembers) { return(changedMembers.Except(existingMembers, pmc).Distinct(pmc).ToList()); } else { return(changedMembers.Intersect(existingMembers, pmc).Distinct(pmc).ToList()); } }
public async Task <ActionResult> PostProjectMember(ProjectMemberList projectMembers) { var addedMembers = await DetermineMembers(projectMembers); if (addedMembers == null) { return(BadRequest()); } /* * // This code should be shared with the MM Controller * var addedMemberIds = (from am in addedMembers select am.UserId).ToList(); * var project = await _context.Projects.FindAsync(addedMembers[0].ProjectId); * * if (project.ManagerId != 0) * { * var managedMemberIds = from u in _context.Users * join mm in _context.ManagedMembers * on u.Id equals mm.UserId * where mm.ManagerId == project.ManagerId * select u.Id; * var unmanagedMemberIds = addedMemberIds.Except(managedMemberIds).Distinct().ToList(); * } */ _context.ProjectMembers.AddRange(addedMembers); await _context.SaveChangesAsync(); return(StatusCode(201)); }
public async Task <ActionResult> DeleteProjectMember(ProjectMemberList projectMembers) { var addedMembers = await DetermineMembers(projectMembers, false); if (addedMembers == null) { return(BadRequest()); } _context.ProjectMembers.RemoveRange(addedMembers); await _context.SaveChangesAsync(); return(Ok()); }