public async Task <IActionResult> UpdateMemberRole([FromBody] OrgMemberDto membershipDto) { var membership = await _dbContext.OrgMembers.Include(om => om.User).SingleOrDefaultAsync( m => m.Org.Slug == OrgSlug && m.User.UserName == membershipDto.UserName); if (membership == null) { return(NotFound()); } if (membershipDto.Role == OrgMemberRole.Owner) { var owner = await _dbContext.OrgMembers .Include(o => o.User) .Include(o => o.Org) .SingleOrDefaultAsync( m => m.Org.Slug == OrgSlug && m.Role == OrgMemberRole.Owner); if (owner != null && owner.Org.Slug == owner.User.UserName) { return(new CantChangeOrgOwnerError(owner.User, membership.User)); } } membership.Role = membershipDto.Role; await _dbContext.SaveChangesAsync(); return(NoContent()); }
public async Task <IActionResult> AddOrgMember([FromBody] OrgMemberDto membershipDto) { var user = await _dbContext.Users.SingleOrDefaultAsync(u => u.UserName == membershipDto.UserName); if (user == null) { return(new NoSuchUserError($"No user exists with username {membershipDto.UserName}")); } var org = await _dbContext.Orgs.SingleAsync(o => o.Slug == OrgSlug); if (membershipDto.Role == OrgMemberRole.Owner) { return(new DuplicateOrgOwnerError(user, org)); } var existingMembership = await _dbContext.OrgMembers.SingleOrDefaultAsync( m => m.User == user && m.Org == org); if (existingMembership != null) { return(new DuplicateOrgMemberError(user, org)); } var membership = new OrgMember() { User = user, Org = org, Role = membershipDto.Role }; _dbContext.Add(membership); await _dbContext.SaveChangesAsync(); return(NoContent()); }