public IQueryable <UserEntity> GetUsersQuery(UserListFilter filter, UsersIncludes includes) { var query = GetBaseQuery(includes) .Where(o => o.GuildID == filter.Guild.Id.ToString()); if (filter.Users != null) { var ids = filter.Users.ConvertAll(o => o.Id.ToString()); query = query.Where(o => ids.Contains(o.UserID)); } if (!string.IsNullOrEmpty(filter.InviteCode)) { query = query.Where(o => o.UsedInviteCode.Contains(filter.InviteCode)); } if (filter.OnlyWebAdmin) { query = query.Where(o => o.WebAdminPassword != null); } if (filter.OnlyApiAccess) { query = query.Where(o => o.ApiToken != null); } if (filter.OnlyBotAdmin) { query = query.Where(o => (o.Flags & (int)UserFlags.BotAdmin) != 0); } return(OrderUsers(query, filter.Desc, filter.Order)); }
/// <summary> /// Gets complete information about user. /// </summary> public async Task <DiscordUser> GetUserAsync(long userId) { const UsersIncludes includes = UsersIncludes.Unverify | UsersIncludes.UsedInvite; var entity = await GrillBotRepository.UsersRepository.GetUserAsync(userId, includes); if (entity == null) { return(null); } entity.Channels = (await GrillBotRepository.ChannelStatsRepository.GetChannelsOfUser(entity.ID).ToListAsync()).ToHashSet(); var incomingUnverifiesQuery = GrillBotRepository.UnverifyRepository.GetIncomingUnverifies(entity.ID) .Where(o => o.Operation == UnverifyLogOperation.Selfunverify || o.Operation == UnverifyLogOperation.Unverify) .OrderByDescending(o => o.ID); entity.IncomingUnverifyOperations = (await incomingUnverifiesQuery.ToListAsync()).ToHashSet(); var outgoingUnverifiesQuery = GrillBotRepository.UnverifyRepository.GetOutgoingUnverifies(entity.ID) .Where(o => o.Operation == UnverifyLogOperation.Unverify); entity.OutgoingUnverifyOperations = (await outgoingUnverifiesQuery.ToListAsync()).ToHashSet(); var createdInvitesQuery = GrillBotRepository.InviteRepository.GetInvitesOfUser(entity.ID) .OrderByDescending(o => o.UsedUsers.Count).ThenByDescending(o => o.Code); entity.CreatedInvites = (await createdInvitesQuery.ToListAsync()).ToHashSet(); var remindersQuery = GrillBotRepository.ReminderRepository.GetRemindersOfUser(entity.ID) .OrderByDescending(o => o.At).ThenByDescending(o => o.RemindID); entity.Reminders = (await remindersQuery.ToListAsync()).ToHashSet(); return(await UserHelper.MapUserAsync(DiscordClient, BotState, entity)); }
private IQueryable <UserEntity> GetBaseQuery(UsersIncludes includes, bool noTracking) { var query = Context.Users.AsQueryable(); if (includes == UsersIncludes.None) { return(query); } if ((includes & UsersIncludes.Channels) != 0) { query = query.Include(o => o.Channels); } if ((includes & UsersIncludes.Reminders) != 0) { query = query.Include(o => o.Reminders); } if ((includes & UsersIncludes.CreatedInvites) != 0) { query = query .Include(o => o.CreatedInvites); } if ((includes & UsersIncludes.UsedInvite) != 0) { query = query .Include(o => o.UsedInvite) .ThenInclude(o => o.Creator); } if ((includes & UsersIncludes.Emotes) != 0) { query = query.Include(o => o.UsedEmotes); } if ((includes & UsersIncludes.Unverify) != 0) { query = query .Include(o => o.Unverify) .ThenInclude(o => o.SetLogOperation) .ThenInclude(o => o.FromUser); } if ((includes & UsersIncludes.UnverifyLogIncoming) != 0) { query = query .Include(o => o.IncomingUnverifyOperations) .ThenInclude(o => o.FromUser); } if ((includes & UsersIncludes.UnverifyLogOutgoing) != 0) { query = query .Include(o => o.OutgoingUnverifyOperations) .ThenInclude(o => o.ToUser); } return(noTracking ? query.AsNoTracking() : query); }