Beispiel #1
0
        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());
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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());
        }