Remove the need to call .AsQueryable() on IDatabaseCollection. Remove IAsyncEnumerable support

This commit is contained in:
Jordan Dominion
2025-08-15 22:40:54 -04:00
parent 572bf97b04
commit 64bbbbaff9
28 changed files with 19 additions and 107 deletions
@@ -208,7 +208,7 @@ namespace Tgstation.Server.Host.Authority
using (systemIdentity)
{
// Get the user from the database
IQueryable<User> query = DatabaseContext.Users.AsQueryable();
IQueryable<User> query = DatabaseContext.Users;
if (oAuthLogin)
{
var oAuthProvider = headers.OAuthProvider!.Value;
@@ -118,13 +118,11 @@ namespace Tgstation.Server.Host.Authority
var groupIdQuery = DatabaseContext
.Users
.AsQueryable()
.Where(user => user.Id == userId)
.Select(user => user.GroupId);
var permissionSetId = await DatabaseContext
.PermissionSets
.AsQueryable()
.Where(permissionSet => permissionSet.UserId == userId
|| groupIdQuery.Contains(permissionSet.GroupId))
.Select(permissionSet => permissionSet.Id!.Value)
@@ -107,7 +107,6 @@ namespace Tgstation.Server.Host.Authority
return databaseContext
.Users
.AsQueryable()
.Where(x => ids.Contains(x.Id!.Value))
.ToDictionaryAsync(user => user.Id!.Value, cancellationToken);
}
@@ -130,7 +129,6 @@ namespace Tgstation.Server.Host.Authority
var list = await databaseContext
.OAuthConnections
.AsQueryable()
.Where(x => userIds.Contains(x.User!.Id!.Value))
.ToListAsync(cancellationToken);
@@ -161,7 +159,6 @@ namespace Tgstation.Server.Host.Authority
var list = await databaseContext
.OidcConnections
.AsQueryable()
.Where(x => userIds.Contains(x.User!.Id!.Value))
.ToListAsync(cancellationToken);
@@ -371,7 +368,6 @@ namespace Tgstation.Server.Host.Authority
var totalUsers = await DatabaseContext
.Users
.AsQueryable()
.CountAsync(cancellationToken);
if (totalUsers >= generalConfigurationOptions.Value.UserLimit)
return Conflict<UpdatedUser>(ErrorCode.UserLimitReached);
@@ -473,7 +469,6 @@ namespace Tgstation.Server.Host.Authority
var userQuery = DatabaseContext
.Users
.AsQueryable()
.Where(x => x.Id == model.Id)
.Include(x => x.CreatedBy)
.Include(x => x.OAuthConnections)
@@ -574,7 +569,6 @@ namespace Tgstation.Server.Host.Authority
originalUser.Group = await DatabaseContext
.Groups
.AsQueryable()
.Where(x => x.Id == model.Group.Id)
.Include(x => x.PermissionSet)
.FirstOrDefaultAsync(cancellationToken);
@@ -759,9 +753,8 @@ namespace Tgstation.Server.Host.Authority
IQueryable<User> Queryable(bool includeJoins, bool allowSystemUser)
{
var tgsUserCanonicalName = User.CanonicalizeName(User.TgsSystemUserName);
var queryable = DatabaseContext
.Users
.AsQueryable();
IQueryable<User> queryable = DatabaseContext
.Users;
if (!allowSystemUser)
queryable = queryable
@@ -792,7 +785,6 @@ namespace Tgstation.Server.Host.Authority
if (model.Group != null)
group = await DatabaseContext
.Groups
.AsQueryable()
.Where(x => x.Id == model.Group.Id)
.Include(x => x.PermissionSet)
.FirstOrDefaultAsync(cancellationToken);
@@ -121,7 +121,6 @@ namespace Tgstation.Server.Host.Authority
var userId = claimsPrincipalAccessor.User.GetTgsUserId();
var group = await DatabaseContext
.Users
.AsQueryable()
.Where(user => user.Id == userId)
.Select(user => user.Group)
.FirstOrDefaultAsync(cancellationToken);
@@ -148,7 +147,6 @@ namespace Tgstation.Server.Host.Authority
{
var totalGroups = await DatabaseContext
.Groups
.AsQueryable()
.CountAsync(cancellationToken);
if (totalGroups >= generalConfigurationOptions.Value.UserGroupLimit)
return Conflict<UserGroup>(ErrorCode.UserGroupLimitReached);
@@ -183,7 +181,6 @@ namespace Tgstation.Server.Host.Authority
{
var currentGroup = await DatabaseContext
.Groups
.AsQueryable()
.Where(x => x.Id == id)
.Include(x => x.PermissionSet)
.FirstOrDefaultAsync(cancellationToken);
@@ -212,7 +209,6 @@ namespace Tgstation.Server.Host.Authority
{
var numDeleted = await DatabaseContext
.Groups
.AsQueryable()
.Where(x => x.Id == id && x.Users!.Count == 0)
.ExecuteDeleteAsync(cancellationToken);
@@ -222,7 +218,6 @@ namespace Tgstation.Server.Host.Authority
// find out how we failed
var groupExists = await DatabaseContext
.Groups
.AsQueryable()
.Where(x => x.Id == id)
.AnyAsync(cancellationToken);
@@ -242,9 +237,8 @@ namespace Tgstation.Server.Host.Authority
/// <returns>An <see cref="IQueryable{T}"/> of <see cref="UserGroup"/>s.</returns>
IQueryable<UserGroup> QueryableImpl(bool includeJoins)
{
var queryable = DatabaseContext
.Groups
.AsQueryable();
IQueryable<UserGroup> queryable = DatabaseContext
.Groups;
if (includeJoins)
queryable = queryable
@@ -116,7 +116,6 @@ namespace Tgstation.Server.Host.Components.Chat.Commands
await databaseContextFactory.UseContext(
async db => results = await db
.RevisionInformations
.AsQueryable()
.Where(x => x.Instance!.Id == instance.Id && x.CommitSha == head)
.SelectMany(x => x.ActiveTestMerges!)
.Select(x => x.TestMerge)
@@ -207,7 +207,6 @@ namespace Tgstation.Server.Host.Components.Deployment
async (db) =>
cj = await db
.CompileJobs
.AsQueryable()
.Where(x => x.Job.Instance!.Id == metadata.Id)
.OrderByDescending(x => x.Job.StoppedAt)
.FirstOrDefaultAsync(cancellationToken));
@@ -277,7 +276,6 @@ namespace Tgstation.Server.Host.Components.Deployment
{
jobUidsToNotErase = (await db
.CompileJobs
.AsQueryable()
.Where(
x => x.Job.Instance!.Id == metadata.Id
&& jobIdsToSkip.Contains(x.Id!.Value))
@@ -364,7 +362,6 @@ namespace Tgstation.Server.Host.Components.Deployment
await databaseContextFactory.UseContext(
async db => compileJob = await db
.CompileJobs
.AsQueryable()
.Where(x => x!.Id == compileJobId)
.Include(x => x.Job!)
.ThenInclude(x => x.StartedBy)
@@ -253,7 +253,6 @@ namespace Tgstation.Server.Host.Components.Deployment
ddSettings = await databaseContext
.DreamDaemonSettings
.AsQueryable()
.Where(x => x.InstanceId == metadata.Id)
.Select(x => new Models.DreamDaemonSettings
{
@@ -266,7 +265,6 @@ namespace Tgstation.Server.Host.Components.Deployment
dreamMakerSettings = await databaseContext
.DreamMakerSettings
.AsQueryable()
.Where(x => x.InstanceId == metadata.Id)
.FirstAsync(cancellationToken);
if (dreamMakerSettings == default)
@@ -274,7 +272,6 @@ namespace Tgstation.Server.Host.Components.Deployment
repositorySettings = await databaseContext
.RepositorySettings
.AsQueryable()
.Where(x => x.InstanceId == metadata.Id)
.Select(x => new Models.RepositorySettings
{
@@ -302,7 +299,6 @@ namespace Tgstation.Server.Host.Components.Deployment
repoName = repo.RemoteRepositoryName;
revInfo = await databaseContext
.RevisionInformations
.AsQueryable()
.Where(x => x.CommitSha == repoSha && x.InstanceId == metadata.Id)
.Include(x => x.ActiveTestMerges!)
.ThenInclude(x => x.TestMerge!)
@@ -456,7 +452,6 @@ namespace Tgstation.Server.Host.Components.Deployment
{
var previousCompileJobs = await databaseContext
.CompileJobs
.AsQueryable()
.Where(x => x.Job.Instance!.Id == metadata.Id)
.OrderByDescending(x => x.Job.StoppedAt)
.Take(10)
@@ -70,7 +70,6 @@ namespace Tgstation.Server.Host.Components.Deployment.Remote
async databaseContext =>
repositorySettings = await databaseContext
.RepositorySettings
.AsQueryable()
.Where(x => x.InstanceId == Metadata.Id)
.FirstAsync(cancellationToken));
@@ -376,7 +375,6 @@ namespace Tgstation.Server.Host.Components.Deployment.Remote
async databaseContext =>
gitHubAccessToken = await databaseContext
.RepositorySettings
.AsQueryable()
.Where(x => x.InstanceId == Metadata.Id)
.Select(x => x.AccessToken)
.FirstAsync(cancellationToken));
@@ -389,7 +389,6 @@ namespace Tgstation.Server.Host.Components
// assume 5 steps with synchronize
var repositorySettingsTask = databaseContext
.RepositorySettings
.AsQueryable()
.Where(x => x.InstanceId == metadata.Id)
.FirstAsync(cancellationToken);
@@ -433,7 +432,6 @@ namespace Tgstation.Server.Host.Components
logger.LogTrace("Loading revision info for commit {sha}...", startSha[..7]);
currentRevInfo = await databaseContext
.RevisionInformations
.AsQueryable()
.Where(x => x.CommitSha == startSha && x.InstanceId == metadata.Id)
.Include(x => x.ActiveTestMerges!)
.ThenInclude(x => x.TestMerge)
@@ -550,8 +548,8 @@ namespace Tgstation.Server.Host.Components
var currentHead = repo.Head;
currentRevInfo = await databaseContext.RevisionInformations
.AsQueryable()
currentRevInfo = await databaseContext
.RevisionInformations
.Where(x => x.CommitSha == currentHead && x.InstanceId == metadata.Id)
.FirstOrDefaultAsync(cancellationToken);
@@ -387,7 +387,6 @@ namespace Tgstation.Server.Host.Components
{
var jobs = await db
.Jobs
.AsQueryable()
.Where(x => x.Instance!.Id == metadata.Id && !x.StoppedAt.HasValue)
.Select(x => new Job(x.Id!.Value))
.ToListAsync(cancellationToken);
@@ -638,7 +637,6 @@ namespace Tgstation.Server.Host.Components
async ValueTask EnumerateInstances(IDatabaseContext databaseContext)
=> dbInstances = await databaseContext
.Instances
.AsQueryable()
.Where(x => x.Online!.Value && x.SwarmIdentifer == swarmConfiguration.Identifier)
.Include(x => x.RepositorySettings)
.Include(x => x.ChatSettings)
@@ -90,7 +90,10 @@ namespace Tgstation.Server.Host.Components.Repository
.ThenInclude(x => x.TestMerge)
.ThenInclude(x => x.MergedBy);
var revisionInfo = await ApplyQuery(databaseContext.RevisionInformations).FirstOrDefaultAsync(cancellationToken);
var revisionInfo = await ApplyQuery(
databaseContext
.RevisionInformations)
.FirstOrDefaultAsync(cancellationToken);
// If the DB doesn't have it, check the local set
if (revisionInfo == default)
@@ -400,8 +403,8 @@ namespace Tgstation.Server.Host.Components.Repository
await databaseContextFactory.UseContext(
async databaseContext =>
dbPull = await databaseContext.RevisionInformations
.AsQueryable()
dbPull = await databaseContext
.RevisionInformations
.Where(x => x.InstanceId == instanceId
&& x.OriginCommitSha == lastRevisionInfo.OriginCommitSha
&& x.ActiveTestMerges!.Count <= newTestMergeModels.Count
@@ -158,7 +158,6 @@ namespace Tgstation.Server.Host.Components.Session
{
var dbReattachInfos = await db
.ReattachInformations
.AsQueryable()
.Where(x => x.CompileJob!.Job.Instance!.Id == metadata.Id)
.Include(x => x.CompileJob)
.Include(x => x.InitialCompileJob)
@@ -169,7 +168,6 @@ namespace Tgstation.Server.Host.Components.Session
var timeoutMilliseconds = await db
.Instances
.AsQueryable()
.Where(x => x.Id == metadata.Id)
.Select(x => x.DreamDaemonSettings!.TopicRequestTimeout)
.FirstOrDefaultAsync(cancellationToken);
@@ -217,7 +215,6 @@ namespace Tgstation.Server.Host.Components.Session
logger.LogTrace("Deleting ReattachInformation {id}...", result.Id);
await db
.ReattachInformations
.AsQueryable()
.Where(x => x.Id == result.Id)
.ExecuteDeleteAsync(cancellationToken);
});
@@ -264,7 +261,6 @@ namespace Tgstation.Server.Host.Components.Session
{
var baseQuery = databaseContext
.ReattachInformations
.AsQueryable()
.Where(x => x.CompileJob!.Job.Instance!.Id == metadata.Id);
if (instant)
@@ -160,7 +160,6 @@ namespace Tgstation.Server.Host.Controllers
instance.Chat.DeleteConnection(id, cancellationToken),
DatabaseContext
.ChatBots
.AsQueryable()
.Where(x => x.Id == id)
.ExecuteDeleteAsync(cancellationToken));
return null;
@@ -187,7 +186,6 @@ namespace Tgstation.Server.Host.Controllers
new PaginatableResult<ChatBot>(
DatabaseContext
.ChatBots
.AsQueryable()
.Where(x => x.InstanceId == Instance.Id)
.Include(x => x.Channels)
.OrderBy(x => x.Id))),
@@ -217,8 +215,8 @@ namespace Tgstation.Server.Host.Controllers
[ProducesResponseType(typeof(ErrorMessageResponse), 410)]
public async ValueTask<IActionResult> GetId(long id, CancellationToken cancellationToken)
{
var query = DatabaseContext.ChatBots
.AsQueryable()
var query = DatabaseContext
.ChatBots
.Where(x => x.Id == id && x.InstanceId == Instance.Id)
.Include(x => x.Channels);
@@ -260,7 +258,6 @@ namespace Tgstation.Server.Host.Controllers
var query = DatabaseContext
.ChatBots
.AsQueryable()
.Where(x => x.InstanceId == Instance.Id && x.Id == model.Id)
.Include(x => x.Channels);
@@ -165,7 +165,6 @@ namespace Tgstation.Server.Host.Controllers
// alias for changing DD settings
var current = await DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == Instance.Id)
.Select(x => x.DreamDaemonSettings)
.FirstOrDefaultAsync(cancellationToken);
@@ -330,7 +329,6 @@ namespace Tgstation.Server.Host.Controllers
{
settings = await DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == Instance.Id)
.Select(x => x.DreamDaemonSettings!)
.FirstOrDefaultAsync(cancellationToken);
@@ -81,7 +81,6 @@ namespace Tgstation.Server.Host.Controllers
{
var dreamMakerSettings = await DatabaseContext
.DreamMakerSettings
.AsQueryable()
.Where(x => x.InstanceId == Instance.Id)
.FirstOrDefaultAsync(cancellationToken);
@@ -186,7 +185,6 @@ namespace Tgstation.Server.Host.Controllers
var hostModel = await DatabaseContext
.DreamMakerSettings
.AsQueryable()
.Where(x => x.InstanceId == Instance.Id)
.FirstOrDefaultAsync(cancellationToken);
if (hostModel == null)
@@ -295,7 +293,6 @@ namespace Tgstation.Server.Host.Controllers
/// <returns>An <see cref="IQueryable{T}"/> of <see cref="CompileJob"/> with all the inclusions.</returns>
IQueryable<CompileJob> BaseCompileJobsQuery() => DatabaseContext
.CompileJobs
.AsQueryable()
.Include(x => x.Job!)
.ThenInclude(x => x.StartedBy)
.Include(x => x.Job!)
@@ -161,7 +161,6 @@ namespace Tgstation.Server.Host.Controllers
// Validate it's not a child of any other instance
var instancePaths = await DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.SwarmIdentifer == swarmConfiguration.Identifier)
.Select(x => new Models.Instance
{
@@ -278,7 +277,6 @@ namespace Tgstation.Server.Host.Controllers
{
var originalModel = await DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == id && x.SwarmIdentifer == swarmConfiguration.Identifier)
.FirstOrDefaultAsync(cancellationToken);
if (originalModel == default)
@@ -306,17 +304,14 @@ namespace Tgstation.Server.Host.Controllers
// there's a bug where removing the root instance doesn't work sometimes
await DatabaseContext
.CompileJobs
.AsQueryable()
.Where(x => x.Job!.Instance!.Id == id)
.ExecuteDeleteAsync(cancellationToken);
await DatabaseContext
.RevInfoTestMerges
.AsQueryable()
.Where(x => x.RevisionInformation.InstanceId == id)
.ExecuteDeleteAsync(cancellationToken);
await DatabaseContext
.RevisionInformations
.AsQueryable()
.Where(x => x.InstanceId == id)
.ExecuteDeleteAsync(cancellationToken);
@@ -361,7 +356,6 @@ namespace Tgstation.Server.Host.Controllers
IQueryable<Models.Instance> InstanceQuery() => DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == model.Id && x.SwarmIdentifer == swarmConfiguration.Identifier);
var moveJob = await InstanceQuery()
@@ -460,7 +454,6 @@ namespace Tgstation.Server.Host.Controllers
{
var countOfExistingChatBots = await DatabaseContext
.ChatBots
.AsQueryable()
.Where(x => x.InstanceId == originalModel.Id)
.CountAsync(cancellationToken);
@@ -585,7 +578,6 @@ namespace Tgstation.Server.Host.Controllers
{
var query = DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.SwarmIdentifer == swarmConfiguration.Identifier);
if (!AuthenticationContext.PermissionSet.InstanceManagerRights!.Value.HasFlag(InstanceManagerRights.List))
query = query
@@ -651,7 +643,6 @@ namespace Tgstation.Server.Host.Controllers
{
var query = DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == id && x.SwarmIdentifer == swarmConfiguration.Identifier);
if (cantList)
@@ -706,7 +697,6 @@ namespace Tgstation.Server.Host.Controllers
{
IQueryable<Models.Instance> BaseQuery() => DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == id && x.SwarmIdentifer == swarmConfiguration.Identifier);
// ensure the current user has write privilege on the instance
@@ -871,7 +861,6 @@ namespace Tgstation.Server.Host.Controllers
{
instanceResponse.Accessible = await DatabaseContext
.InstancePermissionSets
.AsQueryable()
.Where(x => x.InstanceId == instanceResponse.Id && x.PermissionSetId == AuthenticationContext.PermissionSet.Id)
.AnyAsync(cancellationToken);
}
@@ -78,7 +78,6 @@ namespace Tgstation.Server.Host.Controllers
var existingPermissionSet = await DatabaseContext
.PermissionSets
.AsQueryable()
.Where(x => x.Id == model.PermissionSetId)
.Select(x => new Models.PermissionSet
{
@@ -94,7 +93,6 @@ namespace Tgstation.Server.Host.Controllers
{
var userCanonicalName = await DatabaseContext
.Users
.AsQueryable()
.Where(x => x.Id == existingPermissionSet.UserId.Value)
.Select(x => x.CanonicalName)
.FirstAsync(cancellationToken);
@@ -146,7 +144,6 @@ namespace Tgstation.Server.Host.Controllers
var originalPermissionSet = await DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == Instance.Id)
.SelectMany(x => x.InstancePermissionSets)
.Where(x => x.PermissionSetId == model.PermissionSetId)
@@ -201,7 +198,6 @@ namespace Tgstation.Server.Host.Controllers
new PaginatableResult<InstancePermissionSet>(
DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == Instance.Id)
.SelectMany(x => x.InstancePermissionSets)
.OrderBy(x => x.PermissionSetId))),
@@ -227,7 +223,6 @@ namespace Tgstation.Server.Host.Controllers
// this functions as userId
var permissionSet = await DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == Instance.Id)
.SelectMany(x => x.InstancePermissionSets)
.Where(x => x.PermissionSetId == id)
@@ -253,7 +248,6 @@ namespace Tgstation.Server.Host.Controllers
{
var numDeleted = await DatabaseContext
.Instances
.AsQueryable()
.Where(x => x.Id == Instance.Id)
.SelectMany(x => x.InstancePermissionSets)
.Where(x => x.PermissionSetId == id)
@@ -75,7 +75,6 @@ namespace Tgstation.Server.Host.Controllers
new PaginatableResult<Job>(
DatabaseContext
.Jobs
.AsQueryable()
.Include(x => x.StartedBy)
.Include(x => x.CancelledBy)
.Include(x => x.Instance)
@@ -103,7 +102,6 @@ namespace Tgstation.Server.Host.Controllers
new PaginatableResult<Job>(
DatabaseContext
.Jobs
.AsQueryable()
.Include(x => x.StartedBy)
.Include(x => x.CancelledBy)
.Include(x => x.Instance)
@@ -132,7 +130,6 @@ namespace Tgstation.Server.Host.Controllers
// don't care if an instance post or not at this point
var job = await DatabaseContext
.Jobs
.AsQueryable()
.Include(x => x.StartedBy)
.Include(x => x.Instance)
.Where(x => x.Id == id && x.Instance!.Id == Instance.Id)
@@ -166,7 +163,6 @@ namespace Tgstation.Server.Host.Controllers
{
var job = await DatabaseContext
.Jobs
.AsQueryable()
.Where(x => x.Id == id && x.Instance!.Id == Instance.Id)
.Include(x => x.StartedBy)
.Include(x => x.CancelledBy)
@@ -122,7 +122,6 @@ namespace Tgstation.Server.Host.Controllers
var currentModel = await DatabaseContext
.RepositorySettings
.AsQueryable()
.Where(x => x.InstanceId == Instance.Id)
.FirstOrDefaultAsync(cancellationToken);
@@ -225,7 +224,6 @@ namespace Tgstation.Server.Host.Controllers
{
var currentModel = await DatabaseContext
.RepositorySettings
.AsQueryable()
.Where(x => x.InstanceId == Instance.Id)
.FirstOrDefaultAsync(cancellationToken);
@@ -264,7 +262,6 @@ namespace Tgstation.Server.Host.Controllers
{
var currentModel = await DatabaseContext
.RepositorySettings
.AsQueryable()
.Where(x => x.InstanceId == Instance.Id)
.FirstOrDefaultAsync(cancellationToken);
@@ -302,7 +299,6 @@ namespace Tgstation.Server.Host.Controllers
{
var currentModel = await DatabaseContext
.RepositorySettings
.AsQueryable()
.Where(x => x.InstanceId == Instance.Id)
.FirstOrDefaultAsync(cancellationToken);
@@ -388,7 +384,6 @@ namespace Tgstation.Server.Host.Controllers
var currentModel = await DatabaseContext
.RepositorySettings
.AsQueryable()
.Where(x => x.InstanceId == Instance.Id)
.FirstOrDefaultAsync(cancellationToken);
@@ -3,7 +3,6 @@ using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using Microsoft.EntityFrameworkCore;
@@ -48,9 +47,6 @@ namespace Tgstation.Server.Host.Database
/// <inheritdoc />
public void Attach(TModel model) => dbSet.Attach(model);
/// <inheritdoc />
public IAsyncEnumerator<TModel> GetAsyncEnumerator(CancellationToken cancellationToken = default) => dbSet.AsAsyncEnumerable().GetAsyncEnumerator(cancellationToken);
/// <inheritdoc />
public IEnumerator<TModel> GetEnumerator() => dbSet.AsQueryable().GetEnumerator();
@@ -216,7 +216,6 @@ namespace Tgstation.Server.Host.Database
{
var tgsUser = await databaseContext
.Users
.AsQueryable()
.Where(x => x.CanonicalName == User.CanonicalizeName(User.TgsSystemUserName))
.FirstOrDefaultAsync(cancellationToken);
@@ -232,7 +231,6 @@ namespace Tgstation.Server.Host.Database
// normalize backslashes to forward slashes
var allInstances = await databaseContext
.Instances
.AsQueryable()
.Where(instance => instance.SwarmIdentifer == swarmConfiguration.Identifier)
.ToListAsync(cancellationToken);
foreach (var instance in allInstances)
@@ -242,7 +240,6 @@ namespace Tgstation.Server.Host.Database
{
var ids = await databaseContext
.DreamDaemonSettings
.AsQueryable()
.Where(x => x.TopicRequestTimeout == 0)
.Select(x => x.Id)
.ToListAsync(cancellationToken);
@@ -311,7 +308,6 @@ namespace Tgstation.Server.Host.Database
{
var admin = await databaseContext
.Users
.AsQueryable()
.Where(x => x.CanonicalName == User.CanonicalizeName(DefaultCredentials.AdminUserName))
.Include(x => x.CreatedBy)
.Include(x => x.PermissionSet)
@@ -7,7 +7,7 @@ namespace Tgstation.Server.Host.Database
/// Represents a database table.
/// </summary>
/// <typeparam name="TModel">The type of model.</typeparam>
public interface IDatabaseCollection<TModel> : IQueryable<TModel>, IAsyncEnumerable<TModel>
public interface IDatabaseCollection<TModel> : IQueryable<TModel>
{
/// <summary>
/// An <see cref="IEnumerable{T}"/> of <typeparamref name="TModel"/>s prioritizing in the working set.
@@ -33,7 +33,6 @@ namespace Tgstation.Server.Host.Extensions
ArgumentNullException.ThrowIfNull(selector);
return databaseCollection
.AsQueryable()
.Where(x => x.CanonicalName == User.CanonicalizeName(User.TgsSystemUserName))
.Select(selector)
.FirstAsync(cancellationToken);
@@ -213,7 +213,6 @@ namespace Tgstation.Server.Host.Jobs
// mark all jobs as cancelled
var badJobIds = await databaseContext
.Jobs
.AsQueryable()
.Where(y => !y.StoppedAt.HasValue)
.Select(y => y.Id!.Value)
.ToListAsync(cancellationToken);
@@ -535,7 +534,6 @@ namespace Tgstation.Server.Host.Jobs
// DCT: Cancellation token is for job, operation should always run
var finalJob = await databaseContext
.Jobs
.AsQueryable()
.Include(x => x.Instance)
.Include(x => x.StartedBy)
.Include(x => x.CancelledBy)
@@ -128,7 +128,6 @@ namespace Tgstation.Server.Host.Jobs
async databaseContext =>
permedInstanceIds = await databaseContext
.InstancePermissionSets
.AsQueryable()
.Where(ips => ips.PermissionSetId == pid)
.Select(ips => ips.InstanceId)
.ToListAsync(cancellationToken));
@@ -162,7 +161,6 @@ namespace Tgstation.Server.Host.Jobs
.ToListAsync(cancellationToken);
var permissionSetAccessibleInstanceIds = await databaseContext
.InstancePermissionSets
.AsQueryable()
.Where(ips => ips.PermissionSetId == permissionSetId)
.Select(ips => ips.InstanceId)
.ToListAsync(cancellationToken);
@@ -129,7 +129,6 @@ namespace Tgstation.Server.Host.Security
var user = await databaseContext
.Users
.AsQueryable()
.Where(x => x.Id == userId)
.Include(x => x.CreatedBy)
.Include(x => x.PermissionSet)
@@ -164,8 +163,8 @@ namespace Tgstation.Server.Host.Security
var instanceId = apiHeaders?.InstanceId;
if (instanceId.HasValue)
{
instancePermissionSet = await databaseContext.InstancePermissionSets
.AsQueryable()
instancePermissionSet = await databaseContext
.InstancePermissionSets
.Where(x => x.PermissionSetId == userPermissionSet!.Id && x.InstanceId == instanceId && x.Instance!.SwarmIdentifer == swarmConfiguration.Identifier)
.Include(x => x.Instance)
.FirstOrDefaultAsync(cancellationToken);
@@ -208,7 +207,6 @@ namespace Tgstation.Server.Host.Security
var deprefixedScheme = scheme.Substring(OpenIDConnectAuthenticationSchemePrefix.Length);
var connection = await databaseContext
.OidcConnections
.AsQueryable()
.Where(oidcConnection => oidcConnection.ExternalUserId == userId && oidcConnection.SchemeKey == deprefixedScheme)
.Include(oidcConnection => oidcConnection.User)
.ThenInclude(user => user!.Group)
@@ -243,7 +241,6 @@ namespace Tgstation.Server.Host.Security
UserGroup? group = groupId.HasValue
? await databaseContext
.Groups
.AsQueryable()
.Where(group => group.Id == groupId.Value)
.Include(group => group.PermissionSet)
.FirstOrDefaultAsync(cancellationToken)
@@ -106,7 +106,6 @@ namespace Tgstation.Server.Host.Security
{
var sessionData = await databaseContext
.Users
.AsQueryable()
.Where(user => user.Id == userId)
.Select(user => new
{
@@ -151,8 +150,7 @@ namespace Tgstation.Server.Host.Security
return databaseContextFactory.UseContext(async databaseContext =>
{
var queryableUsers = databaseContext
.Users
.AsQueryable();
.Users;
var matchingUniquePermissionSetIds = queryableUsers
.Where(user => user.Id == userId && user.PermissionSet != null)
@@ -170,7 +168,6 @@ namespace Tgstation.Server.Host.Security
permissionSet = await databaseContext
.InstancePermissionSets
.AsQueryable()
.Where(ips => ips.InstanceId == instanceId
&& (matchingUniquePermissionSetIds.Contains(ips.PermissionSetId) || matchingGroupPermissionSetIds.Contains(ips.PermissionSetId)))
.TagWith("rights_authorization_handler_instance_permission_set")
@@ -179,7 +176,6 @@ namespace Tgstation.Server.Host.Security
else
permissionSet = await databaseContext
.PermissionSets
.AsQueryable()
.Where(permissionSet => matchingUniquePermissionSetIds.Contains(permissionSet.Id) || matchingGroupPermissionSetIds.Contains(permissionSet.Id))
.TagWith("rights_authorization_handler_permission_set")
.FirstOrDefaultAsync(cancellationToken);
@@ -99,7 +99,6 @@ namespace Tgstation.Server.Host.Utils
logger.LogTrace("Port allocation >= {basePort} requested...", basePort);
var ddPorts = await databaseContext
.DreamDaemonSettings
.AsQueryable()
.Where(x => x.Instance!.SwarmIdentifer == swarmConfiguration.Identifier)
.Select(x => new
{
@@ -110,7 +109,6 @@ namespace Tgstation.Server.Host.Utils
var dmPorts = await databaseContext
.DreamMakerSettings
.AsQueryable()
.Where(x => x.Instance!.SwarmIdentifer == swarmConfiguration.Identifier)
.Select(x => new
{