diff --git a/products/ASC.Files/Core/Configuration/FilesSpaceUsageStatManager.cs b/products/ASC.Files/Core/Configuration/FilesSpaceUsageStatManager.cs index e41a43f5a0..8a357e95d5 100644 --- a/products/ASC.Files/Core/Configuration/FilesSpaceUsageStatManager.cs +++ b/products/ASC.Files/Core/Configuration/FilesSpaceUsageStatManager.cs @@ -38,6 +38,7 @@ using ASC.Files.Core.Resources; using ASC.Web.Core; using ASC.Web.Core.Users; using ASC.Web.Files.Classes; +using ASC.Web.Files.Utils; using ASC.Web.Studio.Utility; namespace ASC.Web.Files @@ -130,27 +131,34 @@ namespace ASC.Web.Files { private Lazy LazyFilesDbContext { get; } private ASC.Files.Core.EF.FilesDbContext FilesDbContext { get => LazyFilesDbContext.Value; } - private TenantManager TenantManager { get; } - + private TenantManager TenantManager { get; } + private GlobalFolder GlobalFolder { get; } + public FileMarker FileMarker { get; } + public IDaoFactory DaoFactory { get; } + public FilesUserSpaceUsage( DbContextManager dbContextManager, - TenantManager tenantManager) + TenantManager tenantManager, + GlobalFolder globalFolder, + FileMarker fileMarker, + IDaoFactory daoFactory) { LazyFilesDbContext = new Lazy(() => dbContextManager.Get(FileConstant.DatabaseId)); - TenantManager = tenantManager; + TenantManager = tenantManager; + GlobalFolder = globalFolder; + FileMarker = fileMarker; + DaoFactory = daoFactory; } public long GetUserSpaceUsage(Guid userId) { - var tenantId = TenantManager.GetCurrentTenant().TenantId; + var tenantId = TenantManager.GetCurrentTenant().TenantId; + var my = GlobalFolder.GetFolderMy(FileMarker, DaoFactory); + var trash = GlobalFolder.GetFolderTrash(DaoFactory); + return FilesDbContext.Files - .Join(FilesDbContext.Tree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree }) - .Join(FilesDbContext.BunchObjects, a => a.tree.ParentId.ToString(), b => b.LeftNode, (fileTree, bunch) => new { fileTree.file, fileTree.tree, bunch }) - .Where(r => r.file.TenantId == r.bunch.TenantId && - r.file.TenantId == tenantId && - r.file.CreateBy == userId && - (r.bunch.RightNode.StartsWith("files/trash/") | r.bunch.RightNode.StartsWith("files/my/"))) - .Sum(r => r.file.ContentLength); + .Where(r => r.TenantId == tenantId && (r.FolderId == my || r.FolderId == trash)) + .Sum(r => r.ContentLength); } } } \ No newline at end of file