executedelete in DeleteFileAsync

This commit is contained in:
Anton Suhorukov 2023-09-19 18:17:53 +03:00
parent ad35952807
commit 62422999fb

View File

@ -381,25 +381,10 @@ internal abstract class ThirdPartyFileDao<TFile, TFolder, TItem> : IFileDao<stri
await using var filesDbContext = _dbContextFactory.CreateDbContext();
await using (var tx = await filesDbContext.Database.BeginTransactionAsync())
{
var link = await Queries.TagLinksAsync(filesDbContext, _tenantId, id).ToListAsync();
filesDbContext.TagLink.RemoveRange(link);
await filesDbContext.SaveChangesAsync();
var tagsToRemove = await Queries.TagsAsync(filesDbContext).ToListAsync();
filesDbContext.Tag.RemoveRange(tagsToRemove);
var securityToDelete = await Queries.FilesSecuritiesAsync(filesDbContext, _tenantId, id).ToListAsync();
filesDbContext.Security.RemoveRange(securityToDelete);
await filesDbContext.SaveChangesAsync();
var mappingToDelete = await Queries.ThirdpartyIdMappingsAsync(filesDbContext, _tenantId, id).ToListAsync();
filesDbContext.ThirdpartyIdMapping.RemoveRange(mappingToDelete);
await filesDbContext.SaveChangesAsync();
await Queries.DeleteTagLinksAsync(filesDbContext, _tenantId, id);
await Queries.DeleteTagsAsync(filesDbContext);
await Queries.DeleteFilesSecuritiesAsync(filesDbContext, _tenantId, id);
await Queries.DeleteThirdpartyIdMappingsAsync(filesDbContext, _tenantId, id);
await tx.CommitAsync();
}
@ -690,19 +675,20 @@ internal abstract class ThirdPartyFileDao<TFile, TFolder, TItem> : IFileDao<stri
static file class Queries
{
public static readonly Func<FilesDbContext, IAsyncEnumerable<DbFilesTag>> TagsAsync =
public static readonly Func<FilesDbContext, Task<int>> DeleteTagsAsync =
Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
(FilesDbContext ctx) =>
from ft in ctx.Tag
join ftl in ctx.TagLink.DefaultIfEmpty() on new { TenantId = ft.TenantId, Id = ft.Id } equals new
{
TenantId = ftl.TenantId,
Id = ftl.TagId
}
where ftl == null
select ft);
(from ft in ctx.Tag
join ftl in ctx.TagLink.DefaultIfEmpty() on new { TenantId = ft.TenantId, Id = ft.Id } equals new
{
TenantId = ftl.TenantId,
Id = ftl.TagId
}
where ftl == null
select ft)
.ExecuteDelete());
public static readonly Func<FilesDbContext, int, string, IAsyncEnumerable<DbFilesTagLink>> TagLinksAsync =
public static readonly Func<FilesDbContext, int, string, Task<int>> DeleteTagLinksAsync =
Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
(FilesDbContext ctx, int tenantId, string idStart) =>
ctx.TagLink
@ -710,9 +696,10 @@ static file class Queries
.Where(r => ctx.ThirdpartyIdMapping
.Where(t => t.TenantId == tenantId)
.Where(t => t.Id.StartsWith(idStart))
.Select(t => t.HashId).Any(h => h == r.EntryId)));
.Select(t => t.HashId).Any(h => h == r.EntryId))
.ExecuteDelete());
public static readonly Func<FilesDbContext, int, string, IAsyncEnumerable<DbFilesSecurity>> FilesSecuritiesAsync =
public static readonly Func<FilesDbContext, int, string, Task<int>> DeleteFilesSecuritiesAsync =
Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
(FilesDbContext ctx, int tenantId, string idStart) =>
ctx.Security
@ -720,13 +707,15 @@ static file class Queries
.Where(r => ctx.ThirdpartyIdMapping
.Where(t => t.TenantId == tenantId)
.Where(t => t.Id.StartsWith(idStart))
.Select(t => t.HashId).Any(h => h == r.EntryId)));
.Select(t => t.HashId).Any(h => h == r.EntryId))
.ExecuteDelete());
public static readonly Func<FilesDbContext, int, string, IAsyncEnumerable<DbFilesThirdpartyIdMapping>>
ThirdpartyIdMappingsAsync =
public static readonly Func<FilesDbContext, int, string, Task<int>>
DeleteThirdpartyIdMappingsAsync =
Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
(FilesDbContext ctx, int tenantId, string idStart) =>
ctx.ThirdpartyIdMapping
.Where(r => r.TenantId == tenantId)
.Where(t => t.Id.StartsWith(idStart)));
.Where(t => t.Id.StartsWith(idStart))
.ExecuteDelete());
}