Files: added file mapping

This commit is contained in:
Maksim Chegulov 2022-03-09 12:18:33 +03:00
parent 77144d6f3c
commit 6dc335f10b
14 changed files with 181 additions and 126 deletions

View File

@ -63,7 +63,7 @@ public class FilesSpaceUsageStatManager : SpaceUsageStatManager
{
var myFiles = FilesDbContext.Files
.AsQueryable()
.Join(FilesDbContext.Tree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree })
.Join(FilesDbContext.Tree, a => a.ParentId, 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().Id)
@ -73,7 +73,7 @@ public class FilesSpaceUsageStatManager : SpaceUsageStatManager
var commonFiles = FilesDbContext.Files
.AsQueryable()
.Join(FilesDbContext.Tree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree })
.Join(FilesDbContext.Tree, a => a.ParentId, 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().Id)
@ -144,7 +144,7 @@ public class FilesUserSpaceUsage : IUserSpaceUsage
return await FilesDbContext.Files
.AsQueryable()
.Where(r => r.TenantId == tenantId && (r.FolderId == my || r.FolderId == trash))
.Where(r => r.TenantId == tenantId && (r.ParentId == my || r.ParentId == trash))
.SumAsync(r => r.ContentLength);
}
}

View File

@ -113,7 +113,7 @@ public class AbstractDao
f.FilesCount = await
FilesDbContext.Files
.AsQueryable()
.Join(FilesDbContext.Tree, a => a.FolderId, b => b.FolderId, (file, tree) => new { file, tree })
.Join(FilesDbContext.Tree, a => a.ParentId, b => b.FolderId, (file, tree) => new { file, tree })
.Where(r => r.file.TenantId == f.TenantId)
.Where(r => r.tree.ParentId == f.Id)
.Select(r => r.file.Id)

View File

@ -41,6 +41,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
private readonly ProviderFolderDao _providerFolderDao;
private readonly CrossDao _crossDao;
private readonly Settings _settings;
private readonly IMapper _mapper;
public FileDao(
FactoryIndexerFile factoryIndexer,
@ -65,7 +66,8 @@ internal class FileDao : AbstractDao, IFileDao<int>
ChunkedUploadSessionHolder chunkedUploadSessionHolder,
ProviderFolderDao providerFolderDao,
CrossDao crossDao,
Settings settings)
Settings settings,
IMapper mapper)
: base(
dbContextManager,
userManager,
@ -91,6 +93,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
_providerFolderDao = providerFolderDao;
_crossDao = crossDao;
_settings = settings;
_mapper = mapper;
}
public Task InvalidateCacheAsync(int fileId)
@ -102,20 +105,20 @@ internal class FileDao : AbstractDao, IFileDao<int>
{
var query = GetFileQuery(r => r.Id == fileId && r.CurrentVersion).AsNoTracking();
return ToFile(await
FromQueryWithShared(query)
.SingleOrDefaultAsync()
.ConfigureAwait(false));
var dbFile = await FromQueryWithShared(query).SingleOrDefaultAsync()
.ConfigureAwait(false);
return _mapper.Map<DbFileQuery, File<int>>(dbFile);
}
public async Task<File<int>> GetFileAsync(int fileId, int fileVersion)
{
var query = GetFileQuery(r => r.Id == fileId && r.Version == fileVersion).AsNoTracking();
return ToFile(await
FromQueryWithShared(query)
.SingleOrDefaultAsync()
.ConfigureAwait(false));
var dbFile = await FromQueryWithShared(query).SingleOrDefaultAsync()
.ConfigureAwait(false);
return _mapper.Map<DbFileQuery, File<int>>(dbFile);
}
public Task<File<int>> GetFileAsync(int parentId, string title)
@ -130,13 +133,14 @@ internal class FileDao : AbstractDao, IFileDao<int>
private async Task<File<int>> InternalGetFileAsync(int parentId, string title)
{
var query = GetFileQuery(r => r.Title == title && r.CurrentVersion && r.FolderId == parentId)
var query = GetFileQuery(r => r.Title == title && r.CurrentVersion && r.ParentId == parentId)
.AsNoTracking()
.OrderBy(r => r.CreateOn);
return ToFile(await FromQueryWithShared(query).FirstOrDefaultAsync().ConfigureAwait(false));
}
var dbFile = await FromQueryWithShared(query).FirstOrDefaultAsync().ConfigureAwait(false);
return _mapper.Map<DbFileQuery, File<int>>(dbFile);
}
public async Task<File<int>> GetFileStableAsync(int fileId, int fileVersion = -1)
{
@ -150,14 +154,17 @@ internal class FileDao : AbstractDao, IFileDao<int>
query = query.OrderByDescending(r => r.Version);
return ToFile(await FromQueryWithShared(query).FirstOrDefaultAsync().ConfigureAwait(false));
var dbFile = await FromQueryWithShared(query).FirstOrDefaultAsync().ConfigureAwait(false);
return _mapper.Map<DbFileQuery, File<int>>(dbFile);
}
public IAsyncEnumerable<File<int>> GetFileHistoryAsync(int fileId)
{
var query = GetFileQuery(r => r.Id == fileId).OrderByDescending(r => r.Version).AsNoTracking();
return FromQueryWithShared(query).AsAsyncEnumerable().Select(ToFile);
return FromQueryWithShared(query).AsAsyncEnumerable()
.Select(_mapper.Map<DbFileQuery, File<int>>);
}
public IAsyncEnumerable<File<int>> GetFilesAsync(IEnumerable<int> fileIds)
@ -170,7 +177,8 @@ internal class FileDao : AbstractDao, IFileDao<int>
var query = GetFileQuery(r => fileIds.Contains(r.Id) && r.CurrentVersion)
.AsNoTracking();
return FromQueryWithShared(query).AsAsyncEnumerable().Select(e => ToFile(e));
return FromQueryWithShared(query).AsAsyncEnumerable()
.Select(e => _mapper.Map<DbFileQuery, File<int>>(e));
}
public IAsyncEnumerable<File<int>> GetFilesFilteredAsync(IEnumerable<int> fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent, bool checkShared = false)
@ -227,14 +235,15 @@ internal class FileDao : AbstractDao, IFileDao<int>
break;
}
return (checkShared ? FromQueryWithShared(query) : FromQuery(query)).AsAsyncEnumerable().Select(e => ToFile(e));
return (checkShared ? FromQueryWithShared(query) : FromQuery(query)).AsAsyncEnumerable()
.Select(e => _mapper.Map<DbFileQuery, File<int>>(e));
}
public Task<List<int>> GetFilesAsync(int parentId)
{
return Query(FilesDbContext.Files)
.AsNoTracking()
.Where(r => r.FolderId == parentId && r.CurrentVersion)
.Where(r => r.ParentId == parentId && r.CurrentVersion)
.Select(r => r.Id)
.ToListAsync()
;
@ -252,14 +261,14 @@ internal class FileDao : AbstractDao, IFileDao<int>
orderBy = new OrderBy(SortedByType.DateAndTime, false);
}
var q = GetFileQuery(r => r.FolderId == parentId && r.CurrentVersion).AsNoTracking();
var q = GetFileQuery(r => r.ParentId == parentId && r.CurrentVersion).AsNoTracking();
if (withSubfolders)
{
q = GetFileQuery(r => r.CurrentVersion)
.AsNoTracking()
.Join(FilesDbContext.Tree, r => r.FolderId, a => a.FolderId, (file, tree) => new { file, tree })
.Join(FilesDbContext.Tree, r => r.ParentId, a => a.FolderId, (file, tree) => new { file, tree })
.Where(r => r.tree.ParentId == parentId)
.Select(r => r.file);
}
@ -320,7 +329,8 @@ internal class FileDao : AbstractDao, IFileDao<int>
break;
}
return FromQueryWithShared(q).AsAsyncEnumerable().Select(ToFile);
return FromQueryWithShared(q).AsAsyncEnumerable()
.Select(_mapper.Map<DbFileQuery, File<int>>);
}
public Task<Stream> GetFileStreamAsync(File<int> file, long offset)
@ -426,7 +436,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
Version = file.Version,
VersionGroup = file.VersionGroup,
CurrentVersion = true,
FolderId = file.ParentId,
ParentId = file.ParentId,
Title = file.Title,
ContentLength = file.ContentLength,
Category = (int)file.FilterType,
@ -438,7 +448,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
Comment = file.Comment,
Encrypted = file.Encrypted,
Forcesave = file.Forcesave,
Thumb = file.ThumbnailStatus,
ThumbnailStatus = file.ThumbnailStatus,
TenantId = TenantID
};
@ -574,7 +584,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
toUpdate.Version = file.Version;
toUpdate.VersionGroup = file.VersionGroup;
toUpdate.FolderId = file.ParentId;
toUpdate.ParentId = file.ParentId;
toUpdate.Title = file.Title;
toUpdate.ContentLength = file.ContentLength;
toUpdate.Category = (int)file.FilterType;
@ -586,7 +596,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
toUpdate.Comment = file.Comment;
toUpdate.Encrypted = file.Encrypted;
toUpdate.Forcesave = file.Forcesave;
toUpdate.Thumb = file.ThumbnailStatus;
toUpdate.ThumbnailStatus = file.ThumbnailStatus;
FilesDbContext.SaveChanges();
@ -707,7 +717,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
var fromFolders = Query(FilesDbContext.Files)
.Where(r => r.Id == fileId)
.Select(a => a.FolderId)
.Select(a => a.ParentId)
.Distinct()
.AsAsyncEnumerable();
@ -768,7 +778,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
return Query(FilesDbContext.Files)
.AsNoTracking()
.AnyAsync(r => r.Title == title &&
r.FolderId == folderId &&
r.ParentId == folderId &&
r.CurrentVersion)
;
}
@ -808,7 +818,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
{
var fromFolders = await Query(FilesDbContext.Files)
.Where(r => r.Id == fileId)
.Select(a => a.FolderId)
.Select(a => a.ParentId)
.Distinct()
.AsAsyncEnumerable()
.ToListAsync()
@ -821,7 +831,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
foreach (var f in toUpdate)
{
f.FolderId = toFolderId;
f.ParentId = toFolderId;
var trashId = await trashIdTask;
if (trashId.Equals(toFolderId))
@ -1158,7 +1168,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
{
var q = GetFileQuery(r => r.CurrentVersion)
.AsNoTracking()
.Join(FilesDbContext.Tree, a => a.FolderId, t => t.FolderId, (file, tree) => new { file, tree })
.Join(FilesDbContext.Tree, a => a.ParentId, t => t.FolderId, (file, tree) => new { file, tree })
.Where(r => parentIds.Contains(r.tree.ParentId))
.Select(r => r.file);
@ -1209,7 +1219,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
var query = await FromQueryWithShared(q).ToListAsync().ConfigureAwait(false);
return query.ConvertAll(e => ToFile(e));
return query.ConvertAll(e => _mapper.Map<DbFileQuery, File<int>>(e));
}
public IAsyncEnumerable<File<int>> SearchAsync(string searchText, bool bunch = false)
@ -1218,7 +1228,8 @@ internal class FileDao : AbstractDao, IFileDao<int>
{
var query = GetFileQuery(r => r.CurrentVersion && ids.Contains(r.Id)).AsNoTracking();
return FromQueryWithShared(query).AsAsyncEnumerable().Select(e => ToFile(e))
return FromQueryWithShared(query).AsAsyncEnumerable()
.Select(e => _mapper.Map<DbFileQuery, File<int>>(e))
.Where(
f =>
bunch
@ -1230,7 +1241,8 @@ internal class FileDao : AbstractDao, IFileDao<int>
{
var query = BuildSearch(GetFileQuery(r => r.CurrentVersion).AsNoTracking(), searchText, SearhTypeEnum.Any);
return FromQueryWithShared(query).AsAsyncEnumerable().Select(e => ToFile(e))
return FromQueryWithShared(query).AsAsyncEnumerable()
.Select(e => _mapper.Map<DbFileQuery, File<int>>(e))
.Where(f =>
bunch
? f.RootFolderType == FolderType.BUNCH
@ -1411,7 +1423,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
if (toUpdate != null)
{
toUpdate.Thumb = thumbnail != null ? Thumbnail.Created : file.ThumbnailStatus;
toUpdate.ThumbnailStatus = thumbnail != null ? Thumbnail.Created : file.ThumbnailStatus;
await FilesDbContext.SaveChangesAsync().ConfigureAwait(false);
}
@ -1523,7 +1535,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
Root = (from f in FilesDbContext.Folders.AsQueryable()
where f.Id ==
(from t in FilesDbContext.Tree.AsQueryable()
where t.FolderId == r.FolderId
where t.FolderId == r.ParentId
orderby t.Level descending
select t.ParentId
).FirstOrDefault()
@ -1552,7 +1564,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
Root = (from f in FilesDbContext.Folders.AsQueryable()
where f.Id ==
(from t in FilesDbContext.Tree.AsQueryable()
where t.FolderId == r.FolderId
where t.FolderId == r.ParentId
orderby t.Level descending
select t.ParentId
).FirstOrDefault()
@ -1578,7 +1590,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
file.Id = r.File.Id;
file.Title = r.File.Title;
file.ParentId = r.File.FolderId;
file.ParentId = r.File.ParentId;
file.CreateOn = TenantUtil.DateTimeFromUtc(r.File.CreateOn);
file.CreateBy = r.File.CreateBy;
file.Version = r.File.Version;
@ -1594,7 +1606,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
file.Comment = r.File.Comment;
file.Encrypted = r.File.Encrypted;
file.Forcesave = r.File.Forcesave;
file.ThumbnailStatus = r.File.Thumb;
file.ThumbnailStatus = r.File.ThumbnailStatus;
file.IsFillFormDraft = r.Linked;
return file;
@ -1602,7 +1614,7 @@ internal class FileDao : AbstractDao, IFileDao<int>
public (File<int>, SmallShareRecord) ToFileWithShare(DbFileQueryWithSecurity r)
{
var file = ToFile(r.DbFileQuery);
var file = _mapper.Map<DbFileQuery, File<int>>(r.DbFileQuery);
var record = r.Security != null
? new SmallShareRecord
{

View File

@ -137,7 +137,7 @@ internal class FolderDao : AbstractDao, IFolderDao<int>
{
var subq = Query(FilesDbContext.Files).AsNoTracking()
.Where(r => r.Id == fileId && r.CurrentVersion)
.Select(r => r.FolderId)
.Select(r => r.ParentId)
.Distinct();
var q = await FilesDbContext.Tree.AsNoTracking()
@ -724,8 +724,8 @@ internal class FolderDao : AbstractDao, IFolderDao<int>
var files = await FilesDbContext.Files
.AsNoTracking()
.Join(FilesDbContext.Files, f1 => f1.Title.ToLower(), f2 => f2.Title.ToLower(), (f1, f2) => new { f1, f2 })
.Where(r => r.f1.TenantId == TenantID && r.f1.CurrentVersion && r.f1.FolderId == folderId)
.Where(r => r.f2.TenantId == TenantID && r.f2.CurrentVersion && r.f2.FolderId == conflict)
.Where(r => r.f1.TenantId == TenantID && r.f1.CurrentVersion && r.f1.ParentId == folderId)
.Where(r => r.f2.TenantId == TenantID && r.f2.CurrentVersion && r.f2.ParentId == conflict)
.Select(r => r.f1)
.ToListAsync()
.ConfigureAwait(false);
@ -788,7 +788,7 @@ internal class FolderDao : AbstractDao, IFolderDao<int>
private async Task<int> GetFilesCountAsync(int folderId)
{
var count = await Query(FilesDbContext.Files)
.Join(FilesDbContext.Tree, r => r.FolderId, r => r.FolderId, (file, tree) => new { tree, file })
.Join(FilesDbContext.Tree, r => r.ParentId, r => r.FolderId, (file, tree) => new { tree, file })
.Where(r => r.tree.ParentId == folderId)
.Select(r => r.file.Id)
.Distinct()

View File

@ -111,7 +111,7 @@ internal class SecurityDao<T> : AbstractDao, ISecurityDao<T>
.ToListAsync();
folders.AddRange(foldersInt.Select(folderInt => folderInt.ToString()));
files.AddRange(await Query(FilesDbContext.Files).Where(r => foldersInt.Contains(r.FolderId)).Select(r => r.Id.ToString()).ToListAsync());
files.AddRange(await Query(FilesDbContext.Files).Where(r => foldersInt.Contains(r.ParentId)).Select(r => r.Id.ToString()).ToListAsync());
}
else
{

View File

@ -517,7 +517,7 @@ internal class TagDao<T> : AbstractDao, ITagDao<T>
.Where(r => r.Link.TenantId == r.Tag.TenantId)
.Join(ctx.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.Contains(r.file.FolderId.ToString()))
.Where(r => where.Contains(r.file.ParentId.ToString()))
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
.Select(r => r.tagLink)
.Distinct()
@ -561,7 +561,7 @@ internal class TagDao<T> : AbstractDao, ITagDao<T>
r.tagLink,
root = ctx.Folders
.Join(ctx.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
.Where(x => x.folder.TenantId == tenantId && x.tree.FolderId == r.file.FolderId)
.Where(x => x.folder.TenantId == tenantId && x.tree.FolderId == r.file.ParentId)
.OrderByDescending(r => r.tree.Level)
.Select(r => r.folder)
.Take(1)

View File

@ -17,7 +17,7 @@ public class DbFile : BaseEntity, IDbFile, IDbSearch, ISearchItemDocument
public int Version { get; set; }
public int VersionGroup { get; set; }
public bool CurrentVersion { get; set; }
public int FolderId { get; set; }
public int ParentId { get; set; }
[Text(Analyzer = "whitespacecustom")]
public string Title { get; set; }
@ -34,7 +34,7 @@ public class DbFile : BaseEntity, IDbFile, IDbSearch, ISearchItemDocument
public string Changes { get; set; }
public bool Encrypted { get; set; }
public ForcesaveType Forcesave { get; set; }
public Thumbnail Thumb { get; set; }
public Thumbnail ThumbnailStatus { get; set; }
[Nested]
@ -84,7 +84,7 @@ public static class DbFileExtension
entity.ToTable("files_file");
entity.HasIndex(e => e.FolderId)
entity.HasIndex(e => e.ParentId)
.HasDatabaseName("folder_id");
entity.HasIndex(e => e.Id)
@ -134,13 +134,13 @@ public static class DbFileExtension
entity.Property(e => e.CurrentVersion).HasColumnName("current_version");
entity.Property(e => e.Thumb).HasColumnName("thumb");
entity.Property(e => e.ThumbnailStatus).HasColumnName("thumb");
entity.Property(e => e.Encrypted).HasColumnName("encrypted");
entity.Property(e => e.FileStatus).HasColumnName("file_status");
entity.Property(e => e.FolderId).HasColumnName("folder_id");
entity.Property(e => e.ParentId).HasColumnName("folder_id");
entity.Property(e => e.Forcesave).HasColumnName("forcesave");
@ -181,7 +181,7 @@ public static class DbFileExtension
entity.ToTable("files_file", "onlyoffice");
entity.HasIndex(e => e.FolderId)
entity.HasIndex(e => e.ParentId)
.HasDatabaseName("folder_id");
entity.HasIndex(e => e.Id)
@ -224,13 +224,13 @@ public static class DbFileExtension
entity.Property(e => e.CurrentVersion).HasColumnName("current_version");
entity.Property(e => e.Thumb).HasColumnName("thumb");
entity.Property(e => e.ThumbnailStatus).HasColumnName("thumb");
entity.Property(e => e.Encrypted).HasColumnName("encrypted");
entity.Property(e => e.FileStatus).HasColumnName("file_status");
entity.Property(e => e.FolderId).HasColumnName("folder_id");
entity.Property(e => e.ParentId).HasColumnName("folder_id");
entity.Property(e => e.Forcesave).HasColumnName("forcesave");

View File

@ -22,7 +22,8 @@
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
*
*/
using Profile = AutoMapper.Profile;
namespace ASC.Files.Core;
@ -43,7 +44,7 @@ public enum FileStatus
[Transient]
[Serializable]
[DebuggerDisplay("{Title} ({ID} v{Version})")]
public class File<T> : FileEntry<T>, IFileEntry<T>
public class File<T> : FileEntry<T>, IFileEntry<T>, IMapFrom<DbFileQuery>
{
private FileStatus _status;
@ -213,4 +214,12 @@ public class File<T> : FileEntry<T>, IFileEntry<T>
}
public object NativeAccessor { get; set; }
public void Mapping(Profile profile)
{
profile.CreateMap<DbFileQuery, File<int>>()
.ConvertUsing<FilesTypeConverter>();
profile.CreateMap<DbFile, File<int>>();
}
}

View File

@ -23,8 +23,6 @@
*
*/
using ASC.Files.Core.Mapping;
using Profile = AutoMapper.Profile;
namespace ASC.Files.Core;
@ -87,6 +85,6 @@ public class Folder<T> : FileEntry<T>, IFolder, IMapFrom<DbFolder>
public void Mapping(Profile profile)
{
profile.CreateMap<DbFolder, Folder<int>>();
profile.CreateMap<DbFolderQuery, Folder<int>>().ConvertUsing<FilesTypeConverter>();
profile.CreateMap<DbFolderQuery, Folder<int>>().ConvertUsing<FoldersTypeConverter>();
}
}

View File

@ -57,6 +57,7 @@ global using ASC.FederatedLogin.Profile;
global using ASC.Files.Core;
global using ASC.Files.Core.Data;
global using ASC.Files.Core.EF;
global using ASC.Files.Core.Mapping;
global using ASC.Files.Core.ApiModels.RequestDto;
global using ASC.Files.Core.ApiModels.ResponseDto;
global using ASC.Files.Core.Resources;

View File

@ -1,7 +1,7 @@
namespace ASC.Files.Core.Mapping;
[Scope]
public class FilesTypeConverter: ITypeConverter<DbFolderQuery, Folder<int>>
public class FilesTypeConverter : ITypeConverter<DbFileQuery, File<int>>
{
private readonly IServiceProvider _serviceProvider;
private readonly TenantUtil _tenantUtil;
@ -12,72 +12,25 @@ public class FilesTypeConverter: ITypeConverter<DbFolderQuery, Folder<int>>
_tenantUtil = tenantUtil;
}
public Folder<int> Convert(DbFolderQuery source, Folder<int> destination, ResolutionContext context)
public File<int> Convert(DbFileQuery source, File<int> destination, ResolutionContext context)
{
var result = _serviceProvider.GetService<Folder<int>>();
_ = context.Mapper.Map(source.Folder, result);
result.CreateOn = _tenantUtil.DateTimeFromUtc(source.Folder.CreateOn);
result.ModifiedOn = _tenantUtil.DateTimeFromUtc(source.Folder.ModifiedOn);
result.RootFolderType = source.Root?.FolderType ?? default;
result.RootFolderCreator = source.Root?.CreateBy ?? default;
result.RootFolderId = source.Root?.Id ?? default;
result.Shared = source.Shared;
switch (result.FolderType)
if (source == null)
{
case FolderType.COMMON:
result.Title = FilesUCResource.CorporateFiles;
break;
case FolderType.USER:
result.Title = FilesUCResource.MyFiles;
break;
case FolderType.SHARE:
result.Title = FilesUCResource.SharedForMe;
break;
case FolderType.Recent:
result.Title = FilesUCResource.Recent;
break;
case FolderType.Favorites:
result.Title = FilesUCResource.Favorites;
break;
case FolderType.TRASH:
result.Title = FilesUCResource.Trash;
break;
case FolderType.Privacy:
result.Title = FilesUCResource.PrivacyRoom;
break;
case FolderType.Projects:
result.Title = FilesUCResource.ProjectFiles;
break;
case FolderType.BUNCH:
try
{
result.Title = string.Empty;
}
catch (Exception)
{
//Global.Logger.Error(e);
}
break;
return null;
}
if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.ParentId))
{
result.RootFolderType = result.FolderType;
}
var file = _serviceProvider.GetService<File<int>>();
if (result.FolderType != FolderType.DEFAULT && result.RootFolderCreator == default)
{
result.RootFolderCreator = result.CreateBy;
}
_ = context.Mapper.Map(source.File, file);
if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.RootFolderId))
{
result.RootFolderId = result.Id;
}
file.CreateOn = _tenantUtil.DateTimeFromUtc(source.File.CreateOn);
file.ModifiedOn = _tenantUtil.DateTimeFromUtc(source.File.ModifiedOn);
file.Shared = source.Shared;
file.IsFillFormDraft = source.Linked;
file.RootFolderType = source.Root?.FolderType ?? default;
file.RootFolderCreator = source.Root?.CreateBy ?? default;
file.RootFolderId = source.Root?.Id ?? default;
return result;
return file;
}
}
}

View File

@ -0,0 +1,83 @@
namespace ASC.Files.Core.Mapping;
[Scope]
public class FoldersTypeConverter: ITypeConverter<DbFolderQuery, Folder<int>>
{
private readonly IServiceProvider _serviceProvider;
private readonly TenantUtil _tenantUtil;
public FoldersTypeConverter(IServiceProvider serviceProvider, TenantUtil tenantUtil)
{
_serviceProvider = serviceProvider;
_tenantUtil = tenantUtil;
}
public Folder<int> Convert(DbFolderQuery source, Folder<int> destination, ResolutionContext context)
{
var result = _serviceProvider.GetService<Folder<int>>();
_ = context.Mapper.Map(source.Folder, result);
result.CreateOn = _tenantUtil.DateTimeFromUtc(source.Folder.CreateOn);
result.ModifiedOn = _tenantUtil.DateTimeFromUtc(source.Folder.ModifiedOn);
result.RootFolderType = source.Root?.FolderType ?? default;
result.RootFolderCreator = source.Root?.CreateBy ?? default;
result.RootFolderId = source.Root?.Id ?? default;
result.Shared = source.Shared;
switch (result.FolderType)
{
case FolderType.COMMON:
result.Title = FilesUCResource.CorporateFiles;
break;
case FolderType.USER:
result.Title = FilesUCResource.MyFiles;
break;
case FolderType.SHARE:
result.Title = FilesUCResource.SharedForMe;
break;
case FolderType.Recent:
result.Title = FilesUCResource.Recent;
break;
case FolderType.Favorites:
result.Title = FilesUCResource.Favorites;
break;
case FolderType.TRASH:
result.Title = FilesUCResource.Trash;
break;
case FolderType.Privacy:
result.Title = FilesUCResource.PrivacyRoom;
break;
case FolderType.Projects:
result.Title = FilesUCResource.ProjectFiles;
break;
case FolderType.BUNCH:
try
{
result.Title = string.Empty;
}
catch (Exception)
{
//Global.Logger.Error(e);
}
break;
}
if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.ParentId))
{
result.RootFolderType = result.FolderType;
}
if (result.FolderType != FolderType.DEFAULT && result.RootFolderCreator == default)
{
result.RootFolderCreator = result.CreateBy;
}
if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.RootFolderId))
{
result.RootFolderId = result.Id;
}
return result;
}
}

View File

@ -24,7 +24,6 @@ public class Startup : BaseStartup
DIHelper.TryAdd<ChunkedUploaderHandlerService>();
DIHelper.TryAdd<DocuSignHandlerService>();
DIHelper.TryAdd<ThirdPartyAppHandlerService>();
DIHelper.TryAdd<FilesTypeConverter>();
NotifyConfigurationExtension.Register(DIHelper);
}

View File

@ -107,7 +107,7 @@ internal class FileDataProvider
{
var search = filesDbContext.Files
.AsQueryable()
.Where(r => r.CurrentVersion && r.Thumb == Thumbnail.Waiting && !r.Encrypted)
.Where(r => r.CurrentVersion && r.ThumbnailStatus == Thumbnail.Waiting && !r.Encrypted)
.OrderByDescending(r => r.ModifiedOn)
.Take(_thumbnailSettings.SqlMaxResults);