private async Task <MemberDto?> TryGetMemberDtoAsync(Character character, RaidTeam team) { var scope = await _context.GetCurrentPriorityScopeAsync(); var members = await HelperQueries.GetMembersAsync( _context, _serverTimeZoneInfo, _context.Characters.AsNoTracking().Where(c => c.Id == character.Id), scope, team.Id, team.Name, isLeader : true); return(members.Count == 1 ? members[0] : null); }
private async Task <ActionResult <TeamDto> > GetTeamAsync(Expression <Func <RaidTeam, bool> > match) { var team = await _context.RaidTeams .AsNoTracking() .Where(match) .Select(team => new TeamDto { Id = team.Id, Name = team.Name, Inactive = team.Inactive, Schedules = team.Schedules.Select(s => new ScheduleDto { Day = s.Day, RealmTimeStart = s.RealmTimeStart, Duration = s.Duration }).ToList() }) .AsSingleQuery() .FirstOrDefaultAsync(); if (team is null) { return(NotFound()); } var leaderResult = await _authorizationService.AuthorizeAsync(User, team, AppPolicies.Leadership); var scope = await _context.GetCurrentPriorityScopeAsync(); var characterQuery = _context.Characters.AsNoTracking().Where(c => c.TeamId == team.Id); foreach (var member in await HelperQueries.GetMembersAsync(_context, _serverTimeZone, characterQuery, scope, team.Id, team.Name, leaderResult.Succeeded)) { team.Roster.Add(member); } return(team); }