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);
    }
Пример #2
0
    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);
    }