Files: bugfix and optimization
This commit is contained in:
parent
4a1023808c
commit
ed22ffb326
@ -61,7 +61,6 @@
|
|||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference> -->
|
</PackageReference> -->
|
||||||
<PackageReference Include="MySql.Data" Version="8.0.21" />
|
<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" Version="4.7.5" />
|
||||||
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.3" />
|
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.3" />
|
||||||
<PackageReference Include="NUnit" Version="3.12.0" />
|
<PackageReference Include="NUnit" Version="3.12.0" />
|
||||||
|
@ -123,13 +123,18 @@ namespace ASC.Files.Core.Data
|
|||||||
public File<int> GetFile(int fileId)
|
public File<int> GetFile(int fileId)
|
||||||
{
|
{
|
||||||
var query = GetFileQuery(r => r.Id == fileId && r.CurrentVersion).AsNoTracking();
|
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)
|
public File<int> GetFile(int fileId, int fileVersion)
|
||||||
{
|
{
|
||||||
var query = GetFileQuery(r => r.Id == fileId && r.Version == fileVersion).AsNoTracking();
|
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)
|
public File<int> GetFile(int parentId, string title)
|
||||||
@ -1328,9 +1333,11 @@ namespace ASC.Files.Core.Data
|
|||||||
.Where(x => x.tree.FolderId == r.FolderId)
|
.Where(x => x.tree.FolderId == r.FolderId)
|
||||||
.OrderByDescending(r => r.tree.Level)
|
.OrderByDescending(r => r.tree.Level)
|
||||||
.Select(r => r.folder)
|
.Select(r => r.folder)
|
||||||
|
.Take(1)
|
||||||
.FirstOrDefault(),
|
.FirstOrDefault(),
|
||||||
Shared =
|
Shared =
|
||||||
FilesDbContext.Security
|
FilesDbContext.Security
|
||||||
|
.Where(x=> x.TenantId == TenantID)
|
||||||
.Where(x => x.EntryType == FileEntryType.File)
|
.Where(x => x.EntryType == FileEntryType.File)
|
||||||
.Where(x => x.EntryId == r.Id.ToString())
|
.Where(x => x.EntryId == r.Id.ToString())
|
||||||
.Any()
|
.Any()
|
||||||
@ -1349,6 +1356,7 @@ namespace ASC.Files.Core.Data
|
|||||||
.Where(x => x.tree.FolderId == r.FolderId)
|
.Where(x => x.tree.FolderId == r.FolderId)
|
||||||
.OrderByDescending(r => r.tree.Level)
|
.OrderByDescending(r => r.tree.Level)
|
||||||
.Select(r => r.folder)
|
.Select(r => r.folder)
|
||||||
|
.Take(1)
|
||||||
.FirstOrDefault(),
|
.FirstOrDefault(),
|
||||||
Shared = true
|
Shared = true
|
||||||
});
|
});
|
||||||
|
@ -353,13 +353,13 @@ namespace ASC.Files.Core.Data
|
|||||||
|
|
||||||
//full path to root
|
//full path to root
|
||||||
var oldTree = FilesDbContext.Tree
|
var oldTree = FilesDbContext.Tree
|
||||||
.Where(r => r.FolderId == (int)folder.ParentFolderID);
|
.Where(r => r.FolderId == folder.ParentFolderID);
|
||||||
|
|
||||||
foreach (var o in oldTree)
|
foreach (var o in oldTree)
|
||||||
{
|
{
|
||||||
var treeToAdd = new DbFolderTree
|
var treeToAdd = new DbFolderTree
|
||||||
{
|
{
|
||||||
FolderId = (int)folder.ID,
|
FolderId = folder.ID,
|
||||||
ParentId = o.ParentId,
|
ParentId = o.ParentId,
|
||||||
Level = o.Level + 1
|
Level = o.Level + 1
|
||||||
};
|
};
|
||||||
@ -1049,7 +1049,8 @@ namespace ASC.Files.Core.Data
|
|||||||
.Select(r => r.folder)
|
.Select(r => r.folder)
|
||||||
.Take(1)
|
.Take(1)
|
||||||
.FirstOrDefault(),
|
.FirstOrDefault(),
|
||||||
Shared = FilesDbContext.Security
|
Shared = FilesDbContext.Security
|
||||||
|
.Where(x => x.TenantId == TenantID)
|
||||||
.Where(r => r.EntryType == FileEntryType.Folder)
|
.Where(r => r.EntryType == FileEntryType.Folder)
|
||||||
.Where(x => x.EntryId == r.Id.ToString())
|
.Where(x => x.EntryId == r.Id.ToString())
|
||||||
.Any()
|
.Any()
|
||||||
|
@ -28,7 +28,8 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
using ASC.Common;
|
using ASC.Common;
|
||||||
using ASC.Core;
|
using ASC.Core;
|
||||||
using ASC.Core.Common.EF;
|
using ASC.Core.Common.EF;
|
||||||
@ -457,15 +458,15 @@ namespace ASC.Files.Core.Data
|
|||||||
var shareQuery =
|
var shareQuery =
|
||||||
new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where(
|
new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where(
|
||||||
r => FilesDbContext.Security
|
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.EntryId == r.Link.EntryId)
|
||||||
.Where(a => a.EntryType == r.Link.EntryType)
|
.Where(a => a.EntryType == r.Link.EntryType)
|
||||||
.Any()));
|
.Any()));
|
||||||
|
|
||||||
var tmpShareFileTags =
|
var tmpShareFileTags =
|
||||||
shareQuery()
|
shareQuery()
|
||||||
.Join(FilesDbContext.Files, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, file) => new { tagLink, file })
|
.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 == r.tagLink.Link.TenantId)
|
.Where(r => r.file.TenantId == TenantID)
|
||||||
.Where(r => r.file.CreateBy != subject)
|
.Where(r => r.file.CreateBy != subject)
|
||||||
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
|
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
|
||||||
.Select(r => new
|
.Select(r => new
|
||||||
@ -473,10 +474,11 @@ namespace ASC.Files.Core.Data
|
|||||||
r.tagLink,
|
r.tagLink,
|
||||||
root = FilesDbContext.Folders
|
root = FilesDbContext.Folders
|
||||||
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
|
.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)
|
.Where(x => x.tree.FolderId == r.file.FolderId)
|
||||||
.OrderByDescending(r => r.tree.Level)
|
.OrderByDescending(r => r.tree.Level)
|
||||||
.Select(r => r.folder)
|
.Select(r => r.folder)
|
||||||
|
.Take(1)
|
||||||
.FirstOrDefault()
|
.FirstOrDefault()
|
||||||
})
|
})
|
||||||
.Where(r => r.root.FolderType == FolderType.USER)
|
.Where(r => r.root.FolderType == FolderType.USER)
|
||||||
@ -487,8 +489,8 @@ namespace ASC.Files.Core.Data
|
|||||||
|
|
||||||
var tmpShareFolderTags =
|
var tmpShareFolderTags =
|
||||||
shareQuery()
|
shareQuery()
|
||||||
.Join(FilesDbContext.Folders, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, folder) => new { tagLink, folder })
|
.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 == r.tagLink.Link.TenantId)
|
.Where(r => r.folder.TenantId == TenantID)
|
||||||
.Where(r => r.folder.CreateBy != subject)
|
.Where(r => r.folder.CreateBy != subject)
|
||||||
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
|
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
|
||||||
.Select(r => new
|
.Select(r => new
|
||||||
@ -496,10 +498,11 @@ namespace ASC.Files.Core.Data
|
|||||||
r.tagLink,
|
r.tagLink,
|
||||||
root = FilesDbContext.Folders
|
root = FilesDbContext.Folders
|
||||||
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
|
.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)
|
.Where(x => x.tree.FolderId == r.folder.ParentId)
|
||||||
.OrderByDescending(r => r.tree.Level)
|
.OrderByDescending(r => r.tree.Level)
|
||||||
.Select(r => r.folder)
|
.Select(r => r.folder)
|
||||||
|
.Take(1)
|
||||||
.FirstOrDefault()
|
.FirstOrDefault()
|
||||||
})
|
})
|
||||||
.Where(r => r.root.FolderType == FolderType.USER)
|
.Where(r => r.root.FolderType == FolderType.USER)
|
||||||
@ -531,15 +534,15 @@ namespace ASC.Files.Core.Data
|
|||||||
var shareQuery =
|
var shareQuery =
|
||||||
new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where(
|
new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where(
|
||||||
r => FilesDbContext.Security
|
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.EntryId == r.Link.EntryId)
|
||||||
.Where(a => a.EntryType == r.Link.EntryType)
|
.Where(a => a.EntryType == r.Link.EntryType)
|
||||||
.Any()));
|
.Any()));
|
||||||
|
|
||||||
var tmpShareFileTags =
|
var tmpShareFileTags =
|
||||||
shareQuery()
|
shareQuery()
|
||||||
.Join(FilesDbContext.Files, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, file) => new { tagLink, file })
|
.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 == r.tagLink.Link.TenantId)
|
.Where(r => r.file.TenantId == TenantID)
|
||||||
.Where(r => r.file.CreateBy != subject)
|
.Where(r => r.file.CreateBy != subject)
|
||||||
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
|
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
|
||||||
.Select(r => new
|
.Select(r => new
|
||||||
@ -547,10 +550,11 @@ namespace ASC.Files.Core.Data
|
|||||||
r.tagLink,
|
r.tagLink,
|
||||||
root = FilesDbContext.Folders
|
root = FilesDbContext.Folders
|
||||||
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
|
.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)
|
.Where(x => x.tree.FolderId == r.file.FolderId)
|
||||||
.OrderByDescending(r => r.tree.Level)
|
.OrderByDescending(r => r.tree.Level)
|
||||||
.Select(r => r.folder)
|
.Select(r => r.folder)
|
||||||
|
.Take(1)
|
||||||
.FirstOrDefault()
|
.FirstOrDefault()
|
||||||
})
|
})
|
||||||
.Where(r => r.root.FolderType == FolderType.Privacy)
|
.Where(r => r.root.FolderType == FolderType.Privacy)
|
||||||
@ -561,8 +565,8 @@ namespace ASC.Files.Core.Data
|
|||||||
|
|
||||||
var tmpShareFolderTags =
|
var tmpShareFolderTags =
|
||||||
shareQuery()
|
shareQuery()
|
||||||
.Join(FilesDbContext.Folders, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, folder) => new { tagLink, folder })
|
.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 == r.tagLink.Link.TenantId)
|
.Where(r => r.folder.TenantId == TenantID)
|
||||||
.Where(r => r.folder.CreateBy != subject)
|
.Where(r => r.folder.CreateBy != subject)
|
||||||
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
|
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
|
||||||
.Select(r => new
|
.Select(r => new
|
||||||
@ -570,10 +574,11 @@ namespace ASC.Files.Core.Data
|
|||||||
r.tagLink,
|
r.tagLink,
|
||||||
root = FilesDbContext.Folders
|
root = FilesDbContext.Folders
|
||||||
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
|
.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)
|
.Where(x => x.tree.FolderId == r.folder.ParentId)
|
||||||
.OrderByDescending(r => r.tree.Level)
|
.OrderByDescending(r => r.tree.Level)
|
||||||
.Select(r => r.folder)
|
.Select(r => r.folder)
|
||||||
|
.Take(1)
|
||||||
.FirstOrDefault()
|
.FirstOrDefault()
|
||||||
})
|
})
|
||||||
.Where(r => r.root.FolderType == FolderType.Privacy)
|
.Where(r => r.root.FolderType == FolderType.Privacy)
|
||||||
@ -626,7 +631,7 @@ namespace ASC.Files.Core.Data
|
|||||||
|
|
||||||
var newTagsForFiles =
|
var newTagsForFiles =
|
||||||
getBaseSqlQuery()
|
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 => r.file.TenantId == r.tagLink.Link.TenantId)
|
||||||
.Where(r => where.Any(a => r.file.FolderId.ToString() == a))
|
.Where(r => where.Any(a => r.file.FolderId.ToString() == a))
|
||||||
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
|
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
|
||||||
@ -657,7 +662,7 @@ namespace ASC.Files.Core.Data
|
|||||||
|
|
||||||
var newTagsForSBox = getBaseSqlQuery()
|
var newTagsForSBox = getBaseSqlQuery()
|
||||||
.Join(FilesDbContext.ThirdpartyIdMapping, r => r.Link.EntryId, r => r.HashId, (tagLink, mapping) => new { tagLink, mapping })
|
.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 => thirdpartyFolderIds.Any(a => r.mapping.Id == a))
|
||||||
.Where(r => r.tagLink.Tag.Owner == subject)
|
.Where(r => r.tagLink.Tag.Owner == subject)
|
||||||
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
|
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
|
||||||
@ -672,7 +677,7 @@ namespace ASC.Files.Core.Data
|
|||||||
protected List<Tag> FromQuery(IQueryable<TagLinkData> dbFilesTags)
|
protected List<Tag> FromQuery(IQueryable<TagLinkData> dbFilesTags)
|
||||||
{
|
{
|
||||||
return dbFilesTags
|
return dbFilesTags
|
||||||
//.ToList()
|
.ToList()
|
||||||
.Select(ToTag)
|
.Select(ToTag)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
@ -24,10 +24,10 @@ namespace ASC.Files.Core.EF
|
|||||||
public string EntryId { get; set; }
|
public string EntryId { get; set; }
|
||||||
|
|
||||||
[Column("create_by")]
|
[Column("create_by")]
|
||||||
public Guid CreateBy { get; set; }
|
public Guid? CreateBy { get; set; }
|
||||||
|
|
||||||
[Column("create_on")]
|
[Column("create_on")]
|
||||||
public DateTime CreateOn { get; set; }
|
public DateTime? CreateOn { get; set; }
|
||||||
|
|
||||||
[Column("tag_count")]
|
[Column("tag_count")]
|
||||||
public int TagCount { get; set; }
|
public int TagCount { get; set; }
|
||||||
|
Loading…
Reference in New Issue
Block a user