public async Task <bool> AddToTeamAsync(Guid teamId, Guid userId, CancellationToken ct) { var teamQuery = _context.Teams.Where(t => t.Id == teamId).Future(); var userExists = _context.Users.Where(u => u.Id == userId).DeferredAny().FutureValue(); var exerciseIdQuery = _context.Teams.Where(t => t.Id == teamId).Select(t => t.ExerciseId); var exerciseMembershipQuery = _context.ExerciseMemberships .Where(x => x.UserId == userId && exerciseIdQuery.Contains(x.ExerciseId)) .Future(); var team = (await teamQuery.ToListAsync()).SingleOrDefault(); if (team == null) { throw new EntityNotFoundException <Team>(); } if (!(await userExists.ValueAsync())) { throw new EntityNotFoundException <User>(); } if (!(await _authorizationService.AuthorizeAsync(_user, null, new ExerciseAdminRequirement(team.ExerciseId))).Succeeded) { throw new ForbiddenException(); } var exerciseMembership = (await exerciseMembershipQuery.ToListAsync()).FirstOrDefault(); bool setPrimary = false; if (exerciseMembership == null) { exerciseMembership = new ExerciseMembershipEntity { ExerciseId = team.ExerciseId, UserId = userId }; _context.ExerciseMemberships.Add(exerciseMembership); await _context.SaveChangesAsync(ct); setPrimary = true; } var teamMembership = new TeamMembershipEntity { ExerciseMembershipId = exerciseMembership.Id, UserId = userId, TeamId = teamId }; if (setPrimary) { exerciseMembership.PrimaryTeamMembership = teamMembership; } _context.TeamMemberships.Add(teamMembership); await _context.SaveChangesAsync(ct); await _userClaimsService.RefreshClaims(userId); return(true); }
public async Task <Team> SetPrimaryAsync(Guid teamId, Guid userId, CancellationToken ct) { if (!(await _authorizationService.AuthorizeAsync(_user, null, new SameUserRequirement(userId))).Succeeded) { throw new ForbiddenException("You can only change your own Primary Team."); } if (!(await _authorizationService.AuthorizeAsync(_user, null, new TeamMemberRequirement(teamId))).Succeeded) { throw new ForbiddenException("You can only change your Primary Team to a Team that you are a member of"); } var teamEntity = await _context.Teams.SingleOrDefaultAsync(t => t.Id == teamId, ct); var viewMembership = await _context.ViewMemberships .Include(m => m.TeamMemberships) .SingleOrDefaultAsync(m => m.ViewId == teamEntity.ViewId && m.UserId == userId); var teamMembership = viewMembership.TeamMemberships.Where(m => m.TeamId == teamId).FirstOrDefault(); viewMembership.PrimaryTeamMembershipId = teamMembership.Id; _context.ViewMemberships.Update(viewMembership); await _context.SaveChangesAsync(ct); await _claimsService.RefreshClaims(userId); var team = await GetAsync(teamId, ct); return(_mapper.Map <Team>(team)); }
public async Task <bool> AddToTeamAsync(Guid teamId, Guid userId, CancellationToken ct) { var team = await _context.Teams .Where(t => t.Id == teamId) .FirstOrDefaultAsync(); if (team == null) { throw new EntityNotFoundException <Team>(); } var userExists = await _context.Users .Where(u => u.Id == userId) .AnyAsync(ct); if (!userExists) { throw new EntityNotFoundException <User>(); } var viewIdQuery = _context.Teams.Where(t => t.Id == teamId).Select(t => t.ViewId); var viewMembership = await _context.ViewMemberships .Where(x => x.UserId == userId && viewIdQuery.Contains(x.ViewId)) .SingleOrDefaultAsync(ct); if (!(await _authorizationService.AuthorizeAsync(_user, null, new ViewAdminRequirement(team.ViewId))).Succeeded) { throw new ForbiddenException(); } bool setPrimary = false; if (viewMembership == null) { viewMembership = new ViewMembershipEntity { ViewId = team.ViewId, UserId = userId }; _context.ViewMemberships.Add(viewMembership); await _context.SaveChangesAsync(ct); setPrimary = true; } var teamMembership = new TeamMembershipEntity { ViewMembershipId = viewMembership.Id, UserId = userId, TeamId = teamId }; if (setPrimary) { viewMembership.PrimaryTeamMembership = teamMembership; } _context.TeamMemberships.Add(teamMembership); await _context.SaveChangesAsync(ct); await _userClaimsService.RefreshClaims(userId); return(true); }