Files: FileDao
This commit is contained in:
parent
4cee8feb84
commit
08d51bb1ed
@ -68,8 +68,8 @@ namespace ASC.Web.Files
|
||||
public override List<UsageSpaceStatItem> GetStatData()
|
||||
{
|
||||
var myFiles = FilesDbContext.Files
|
||||
.Join(FilesDbContext.FolderTree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree })
|
||||
.Join(FilesDbContext.FilesBunchObjects, a => a.tree.ParentId.ToString(), b => b.LeftNode, (fileTree, bunch) => new { fileTree.file, fileTree.tree, bunch })
|
||||
.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)
|
||||
.Where(r => r.file.TenantId == TenantManager.GetCurrentTenant().TenantId)
|
||||
.Where(r => r.bunch.RightNode.StartsWith("files/my/") | r.bunch.RightNode.StartsWith("files/trash/"))
|
||||
@ -77,8 +77,8 @@ namespace ASC.Web.Files
|
||||
.Select(r => new { CreateBy = r.Key, Size = r.Sum(a => a.file.ContentLength) });
|
||||
|
||||
var commonFiles = FilesDbContext.Files
|
||||
.Join(FilesDbContext.FolderTree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree })
|
||||
.Join(FilesDbContext.FilesBunchObjects, a => a.tree.ParentId.ToString(), b => b.LeftNode, (fileTree, bunch) => new { fileTree.file, fileTree.tree, bunch })
|
||||
.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)
|
||||
.Where(r => r.file.TenantId == TenantManager.GetCurrentTenant().TenantId)
|
||||
.Where(r => r.bunch.RightNode.StartsWith("files/common/"))
|
||||
@ -117,8 +117,8 @@ namespace ASC.Web.Files
|
||||
public long GetUserSpaceUsage(Guid userId)
|
||||
{
|
||||
return FilesDbContext.Files
|
||||
.Join(FilesDbContext.FolderTree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree })
|
||||
.Join(FilesDbContext.FilesBunchObjects, a => a.tree.ParentId.ToString(), b => b.LeftNode, (fileTree, bunch) => new { fileTree.file, fileTree.tree, bunch })
|
||||
.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)
|
||||
.Where(r => r.file.TenantId == TenantManager.GetCurrentTenant().TenantId)
|
||||
.Where(r => r.file.CreateBy == userId)
|
||||
|
@ -33,7 +33,7 @@ namespace ASC.Files.Core
|
||||
/// <summary>
|
||||
/// Interface encapsulates access toFolderId files
|
||||
/// </summary>
|
||||
public interface IFileDao : IDisposable
|
||||
public interface IFileDao
|
||||
{
|
||||
/// <summary>
|
||||
/// Clear the application cache for the specific file
|
||||
|
@ -49,10 +49,14 @@ namespace ASC.Files.Core.Data
|
||||
|
||||
public FilesDbContext FilesDbContext { get; }
|
||||
|
||||
internal int TenantID { get; }
|
||||
protected internal int TenantID { get; }
|
||||
public TenantUtil TenantUtil { get; }
|
||||
|
||||
protected AbstractDao(DbContextManager<FilesDbContext> dbContextManager, TenantManager tenantManager, TenantUtil tenantUtil, string storageKey)
|
||||
protected AbstractDao(
|
||||
DbContextManager<FilesDbContext> dbContextManager,
|
||||
TenantManager tenantManager,
|
||||
TenantUtil tenantUtil,
|
||||
string storageKey)
|
||||
{
|
||||
cache = AscCache.Memory;
|
||||
FilesDbContext = dbContextManager.Value;
|
||||
@ -104,7 +108,7 @@ namespace ASC.Files.Core.Data
|
||||
protected string GetRootFolderType(DbFile file)
|
||||
{
|
||||
return FilesDbContext.Folders
|
||||
.Join(FilesDbContext.FolderTree, 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(r => r.folder.TenantId == file.TenantId)
|
||||
.Where(r => r.tree.FolderId == file.FolderId)
|
||||
.OrderByDescending(r => r.tree.Level)
|
||||
@ -132,23 +136,23 @@ namespace ASC.Files.Core.Data
|
||||
protected bool GetSharedQuery(FileEntryType type, DbFile dbFile)
|
||||
{
|
||||
return
|
||||
FilesDbContext.FilesSecurity
|
||||
FilesDbContext.Security
|
||||
.Where(r => r.EntryType == type)
|
||||
.Where(r => r.EntryId == dbFile.Id.ToString())
|
||||
.Any();
|
||||
}
|
||||
|
||||
protected void GetRecalculateFilesCountUpdate(int folderId)
|
||||
protected void GetRecalculateFilesCountUpdate(object folderId)
|
||||
{
|
||||
var folders = FilesDbContext.Folders
|
||||
.Where(r => r.TenantId == TenantID)
|
||||
.Where(r => FilesDbContext.FolderTree.Where(r => r.FolderId == folderId).Select(r => r.ParentId).Any(a => a == r.Id));
|
||||
.Where(r => FilesDbContext.Tree.Where(r => (object)r.FolderId == folderId).Select(r => r.ParentId).Any(a => a == r.Id));
|
||||
|
||||
foreach (var f in folders)
|
||||
{
|
||||
var filesCount =
|
||||
FilesDbContext.Files
|
||||
.Join(FilesDbContext.FolderTree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree })
|
||||
.Join(FilesDbContext.Tree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree })
|
||||
.Where(r => r.file.TenantId == f.TenantId)
|
||||
.Where(r => r.tree.ParentId == f.Id)
|
||||
.Count();
|
||||
@ -180,7 +184,7 @@ namespace ASC.Files.Core.Data
|
||||
}
|
||||
else
|
||||
{
|
||||
result = Query(r => r.FilesThirdpartyIdMapping)
|
||||
result = Query(r => r.ThirdpartyIdMapping)
|
||||
.Where(r => r.HashId == id.ToString())
|
||||
.Select(r => r.Id)
|
||||
.FirstOrDefault();
|
||||
@ -194,7 +198,7 @@ namespace ASC.Files.Core.Data
|
||||
HashId = result.ToString()
|
||||
};
|
||||
|
||||
FilesDbContext.AddOrUpdate(r => r.FilesThirdpartyIdMapping, newItem);
|
||||
FilesDbContext.AddOrUpdate(r => r.ThirdpartyIdMapping, newItem);
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -205,9 +209,24 @@ namespace ASC.Files.Core.Data
|
||||
return MappingID(id, false);
|
||||
}
|
||||
|
||||
//public static Exp BuildSearch(string column, string text, SqlLike like = SqlLike.AnyWhere)
|
||||
//{
|
||||
// return Exp.Like(string.Format("lower({0})", column), text.ToLower().Trim().Replace("%", "\\%").Replace("_", "\\_"), like);
|
||||
//}
|
||||
internal static bool BuildSearch(IDbSearch dbSearch, string text, SearhTypeEnum searhTypeEnum)
|
||||
{
|
||||
var lowerTitle = dbSearch.Title.ToLower();
|
||||
var lowerText = text.ToLower().Trim().Replace("%", "\\%").Replace("_", "\\_");
|
||||
return searhTypeEnum switch
|
||||
{
|
||||
SearhTypeEnum.Start => lowerTitle.StartsWith(lowerText),
|
||||
SearhTypeEnum.End => lowerTitle.EndsWith(lowerText),
|
||||
SearhTypeEnum.Any => lowerTitle.Contains(lowerText),
|
||||
_ => lowerTitle.EndsWith(lowerText),
|
||||
};
|
||||
}
|
||||
|
||||
internal enum SearhTypeEnum
|
||||
{
|
||||
Start,
|
||||
End,
|
||||
Any
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore;
|
||||
namespace ASC.Files.Core.EF
|
||||
{
|
||||
[Table("files_file")]
|
||||
public class DbFile : BaseEntity, IDbFile
|
||||
public class DbFile : BaseEntity, IDbFile, IDbSearch
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int Version { get; set; }
|
||||
@ -17,7 +17,7 @@ namespace ASC.Files.Core.EF
|
||||
public int VersionGroup { get; set; }
|
||||
|
||||
[Column("current_version")]
|
||||
public int CurrentVersion { get; set; }
|
||||
public bool CurrentVersion { get; set; }
|
||||
|
||||
[Column("folder_id")]
|
||||
public int FolderId { get; set; }
|
||||
|
20
products/ASC.Files/Server/Core/EF/DbFilesTag.cs
Normal file
20
products/ASC.Files/Server/Core/EF/DbFilesTag.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace ASC.Files.Core.EF
|
||||
{
|
||||
[Table("files_tag")]
|
||||
public class DbFilesTag : IDbFile
|
||||
{
|
||||
[Column("tenant_id")]
|
||||
public int TenantId { get; set; }
|
||||
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public Guid Owner { get; set; }
|
||||
|
||||
public int Flag { get; set; }
|
||||
}
|
||||
}
|
50
products/ASC.Files/Server/Core/EF/DbFilesTagLink.cs
Normal file
50
products/ASC.Files/Server/Core/EF/DbFilesTagLink.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
using ASC.Core.Common.EF;
|
||||
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace ASC.Files.Core.EF
|
||||
{
|
||||
[Table("files_tag_link")]
|
||||
public class DbFilesTagLink : BaseEntity, IDbFile
|
||||
{
|
||||
[Column("tenant_id")]
|
||||
public int TenantId { get; set; }
|
||||
|
||||
[Column("tag_id")]
|
||||
public int TagId { get; set; }
|
||||
|
||||
[Column("entry_type")]
|
||||
public int EntryType { get; set; }
|
||||
|
||||
[Column("entry_id")]
|
||||
public string EntryId { get; set; }
|
||||
|
||||
[Column("create_by")]
|
||||
public Guid CreateBy { get; set; }
|
||||
|
||||
[Column("create_on")]
|
||||
public DateTime CreateOn { get; set; }
|
||||
|
||||
[Column("tag_count")]
|
||||
public DateTime TagCount { get; set; }
|
||||
|
||||
public override object[] GetKeys()
|
||||
{
|
||||
return new object[] { TenantId, TagId, EntryId, EntryType };
|
||||
}
|
||||
}
|
||||
|
||||
public static class DbFilesTagLinkExtension
|
||||
{
|
||||
public static ModelBuilder AddDbFilesTagLink(this ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<DbFilesTagLink>()
|
||||
.HasKey(c => new { c.TenantId, c.TagId, c.EntryId, c.EntryType });
|
||||
|
||||
return modelBuilder;
|
||||
}
|
||||
}
|
||||
}
|
@ -9,10 +9,12 @@ namespace ASC.Files.Core.EF
|
||||
{
|
||||
public DbSet<DbFile> Files { get; set; }
|
||||
public DbSet<DbFolder> Folders { get; set; }
|
||||
public DbSet<DbFolderTree> FolderTree { get; set; }
|
||||
public DbSet<DbFilesBunchObjects> FilesBunchObjects { get; set; }
|
||||
public DbSet<DbFilesSecurity> FilesSecurity { get; set; }
|
||||
public DbSet<DbFilesThirdpartyIdMapping> FilesThirdpartyIdMapping { get; set; }
|
||||
public DbSet<DbFolderTree> Tree { get; set; }
|
||||
public DbSet<DbFilesBunchObjects> BunchObjects { get; set; }
|
||||
public DbSet<DbFilesSecurity> Security { get; set; }
|
||||
public DbSet<DbFilesThirdpartyIdMapping> ThirdpartyIdMapping { get; set; }
|
||||
public DbSet<DbFilesTagLink> TagLink { get; set; }
|
||||
public DbSet<DbFilesTag> Tag { get; set; }
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
@ -21,7 +23,8 @@ namespace ASC.Files.Core.EF
|
||||
.AddDbFolderTree()
|
||||
.AddDbFilesBunchObjects()
|
||||
.AddDbFilesSecurity()
|
||||
.AddDbFilesThirdpartyIdMapping();
|
||||
.AddDbFilesThirdpartyIdMapping()
|
||||
.AddDbFilesTagLink();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,4 +4,9 @@
|
||||
{
|
||||
public int TenantId { get; set; }
|
||||
}
|
||||
|
||||
public interface IDbSearch
|
||||
{
|
||||
public string Title { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,11 @@ using System.ComponentModel;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
using ASC.Common.Web;
|
||||
using ASC.Web.Studio.UserControls.Statistics;
|
||||
using ASC.Web.Studio.Utility;
|
||||
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
@ -190,6 +194,17 @@ namespace ASC.Web.Studio.Core
|
||||
return hideSettings == null || !hideSettings.Contains(settings, StringComparer.CurrentCultureIgnoreCase);
|
||||
}
|
||||
|
||||
public long MaxChunkedUploadSize(TenantExtra tenantExtra, TenantStatisticsProvider tenantStatisticsProvider)
|
||||
{
|
||||
var diskQuota = tenantExtra.GetTenantQuota();
|
||||
if (diskQuota != null)
|
||||
{
|
||||
var usedSize = tenantStatisticsProvider.GetUsedSize();
|
||||
var freeSize = Math.Max(diskQuota.MaxTotalSize - usedSize, 0);
|
||||
return Math.Min(freeSize, diskQuota.MaxFileSize);
|
||||
}
|
||||
return ChunkUploadSize;
|
||||
}
|
||||
|
||||
private string GetAppSettings(string key, string defaultValue)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user