Files: bugfix and optimization

This commit is contained in:
pavelbannov 2020-11-25 18:40:23 +03:00
parent 4a1023808c
commit ed22ffb326
5 changed files with 42 additions and 29 deletions

View File

@ -61,7 +61,6 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> -->
<PackageReference Include="MySql.Data" Version="8.0.21" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="NLog" Version="4.7.5" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.3" />
<PackageReference Include="NUnit" Version="3.12.0" />

View File

@ -123,13 +123,18 @@ namespace ASC.Files.Core.Data
public File<int> GetFile(int fileId)
{
var query = GetFileQuery(r => r.Id == fileId && r.CurrentVersion).AsNoTracking();
return ToFile(FromQueryWithShared(query).SingleOrDefault());
return ToFile(
FromQueryWithShared(query)
.Take(1)
.SingleOrDefault());
}
public File<int> GetFile(int fileId, int fileVersion)
{
var query = GetFileQuery(r => r.Id == fileId && r.Version == fileVersion).AsNoTracking();
return ToFile(FromQueryWithShared(query).SingleOrDefault());
return ToFile(FromQueryWithShared(query)
.Take(1)
.SingleOrDefault());
}
public File<int> GetFile(int parentId, string title)
@ -1328,9 +1333,11 @@ namespace ASC.Files.Core.Data
.Where(x => x.tree.FolderId == r.FolderId)
.OrderByDescending(r => r.tree.Level)
.Select(r => r.folder)
.Take(1)
.FirstOrDefault(),
Shared =
FilesDbContext.Security
.Where(x=> x.TenantId == TenantID)
.Where(x => x.EntryType == FileEntryType.File)
.Where(x => x.EntryId == r.Id.ToString())
.Any()
@ -1349,6 +1356,7 @@ namespace ASC.Files.Core.Data
.Where(x => x.tree.FolderId == r.FolderId)
.OrderByDescending(r => r.tree.Level)
.Select(r => r.folder)
.Take(1)
.FirstOrDefault(),
Shared = true
});

View File

@ -353,13 +353,13 @@ namespace ASC.Files.Core.Data
//full path to root
var oldTree = FilesDbContext.Tree
.Where(r => r.FolderId == (int)folder.ParentFolderID);
.Where(r => r.FolderId == folder.ParentFolderID);
foreach (var o in oldTree)
{
var treeToAdd = new DbFolderTree
{
FolderId = (int)folder.ID,
FolderId = folder.ID,
ParentId = o.ParentId,
Level = o.Level + 1
};
@ -1049,7 +1049,8 @@ namespace ASC.Files.Core.Data
.Select(r => r.folder)
.Take(1)
.FirstOrDefault(),
Shared = FilesDbContext.Security
Shared = FilesDbContext.Security
.Where(x => x.TenantId == TenantID)
.Where(r => r.EntryType == FileEntryType.Folder)
.Where(x => x.EntryId == r.Id.ToString())
.Any()

View File

@ -28,7 +28,8 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using ASC.Common;
using ASC.Core;
using ASC.Core.Common.EF;
@ -457,15 +458,15 @@ namespace ASC.Files.Core.Data
var shareQuery =
new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where(
r => FilesDbContext.Security
.Where(a => a.TenantId == r.Link.TenantId)
.Where(a => a.TenantId == TenantID)
.Where(a => a.EntryId == r.Link.EntryId)
.Where(a => a.EntryType == r.Link.EntryType)
.Any()));
var tmpShareFileTags =
shareQuery()
.Join(FilesDbContext.Files, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, file) => new { tagLink, file })
.Where(r => r.file.TenantId == r.tagLink.Link.TenantId)
.Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, file) => new { tagLink, file })
.Where(r => r.file.TenantId == TenantID)
.Where(r => r.file.CreateBy != subject)
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
.Select(r => new
@ -473,10 +474,11 @@ namespace ASC.Files.Core.Data
r.tagLink,
root = FilesDbContext.Folders
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
.Where(x => x.folder.TenantId == r.file.TenantId)
.Where(x => x.folder.TenantId == TenantID)
.Where(x => x.tree.FolderId == r.file.FolderId)
.OrderByDescending(r => r.tree.Level)
.Select(r => r.folder)
.Select(r => r.folder)
.Take(1)
.FirstOrDefault()
})
.Where(r => r.root.FolderType == FolderType.USER)
@ -487,8 +489,8 @@ namespace ASC.Files.Core.Data
var tmpShareFolderTags =
shareQuery()
.Join(FilesDbContext.Folders, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, folder) => new { tagLink, folder })
.Where(r => r.folder.TenantId == r.tagLink.Link.TenantId)
.Join(FilesDbContext.Folders, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, folder) => new { tagLink, folder })
.Where(r => r.folder.TenantId == TenantID)
.Where(r => r.folder.CreateBy != subject)
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
.Select(r => new
@ -496,10 +498,11 @@ namespace ASC.Files.Core.Data
r.tagLink,
root = FilesDbContext.Folders
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
.Where(x => x.folder.TenantId == r.folder.TenantId)
.Where(x => x.folder.TenantId ==TenantID)
.Where(x => x.tree.FolderId == r.folder.ParentId)
.OrderByDescending(r => r.tree.Level)
.Select(r => r.folder)
.Select(r => r.folder)
.Take(1)
.FirstOrDefault()
})
.Where(r => r.root.FolderType == FolderType.USER)
@ -531,15 +534,15 @@ namespace ASC.Files.Core.Data
var shareQuery =
new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where(
r => FilesDbContext.Security
.Where(a => a.TenantId == r.Link.TenantId)
.Where(a => a.TenantId == TenantID)
.Where(a => a.EntryId == r.Link.EntryId)
.Where(a => a.EntryType == r.Link.EntryType)
.Any()));
var tmpShareFileTags =
shareQuery()
.Join(FilesDbContext.Files, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, file) => new { tagLink, file })
.Where(r => r.file.TenantId == r.tagLink.Link.TenantId)
.Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, file) => new { tagLink, file })
.Where(r => r.file.TenantId == TenantID)
.Where(r => r.file.CreateBy != subject)
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
.Select(r => new
@ -547,10 +550,11 @@ namespace ASC.Files.Core.Data
r.tagLink,
root = FilesDbContext.Folders
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
.Where(x => x.folder.TenantId == r.file.TenantId)
.Where(x => x.folder.TenantId == TenantID)
.Where(x => x.tree.FolderId == r.file.FolderId)
.OrderByDescending(r => r.tree.Level)
.Select(r => r.folder)
.Select(r => r.folder)
.Take(1)
.FirstOrDefault()
})
.Where(r => r.root.FolderType == FolderType.Privacy)
@ -561,8 +565,8 @@ namespace ASC.Files.Core.Data
var tmpShareFolderTags =
shareQuery()
.Join(FilesDbContext.Folders, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, folder) => new { tagLink, folder })
.Where(r => r.folder.TenantId == r.tagLink.Link.TenantId)
.Join(FilesDbContext.Folders, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, folder) => new { tagLink, folder })
.Where(r => r.folder.TenantId == TenantID)
.Where(r => r.folder.CreateBy != subject)
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
.Select(r => new
@ -570,10 +574,11 @@ namespace ASC.Files.Core.Data
r.tagLink,
root = FilesDbContext.Folders
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
.Where(x => x.folder.TenantId == r.folder.TenantId)
.Where(x => x.folder.TenantId == TenantID)
.Where(x => x.tree.FolderId == r.folder.ParentId)
.OrderByDescending(r => r.tree.Level)
.Select(r => r.folder)
.Take(1)
.FirstOrDefault()
})
.Where(r => r.root.FolderType == FolderType.Privacy)
@ -626,7 +631,7 @@ namespace ASC.Files.Core.Data
var newTagsForFiles =
getBaseSqlQuery()
.Join(FilesDbContext.Files, r => r.Link.EntryId, r => r.Id.ToString(), (tagLink, file) => new { tagLink, file })
.Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, r => r.Id, (tagLink, file) => new { tagLink, file })
.Where(r => r.file.TenantId == r.tagLink.Link.TenantId)
.Where(r => where.Any(a => r.file.FolderId.ToString() == a))
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
@ -657,7 +662,7 @@ namespace ASC.Files.Core.Data
var newTagsForSBox = getBaseSqlQuery()
.Join(FilesDbContext.ThirdpartyIdMapping, r => r.Link.EntryId, r => r.HashId, (tagLink, mapping) => new { tagLink, mapping })
.Where(r => r.mapping.TenantId == r.tagLink.Link.TenantId)
.Where(r => r.mapping.TenantId == TenantID)
.Where(r => thirdpartyFolderIds.Any(a => r.mapping.Id == a))
.Where(r => r.tagLink.Tag.Owner == subject)
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
@ -672,7 +677,7 @@ namespace ASC.Files.Core.Data
protected List<Tag> FromQuery(IQueryable<TagLinkData> dbFilesTags)
{
return dbFilesTags
//.ToList()
.ToList()
.Select(ToTag)
.ToList();
}

View File

@ -24,10 +24,10 @@ namespace ASC.Files.Core.EF
public string EntryId { get; set; }
[Column("create_by")]
public Guid CreateBy { get; set; }
public Guid? CreateBy { get; set; }
[Column("create_on")]
public DateTime CreateOn { get; set; }
public DateTime? CreateOn { get; set; }
[Column("tag_count")]
public int TagCount { get; set; }