Files: added file mapping
This commit is contained in:
parent
77144d6f3c
commit
6dc335f10b
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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)
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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>>();
|
||||
}
|
||||
}
|
||||
|
@ -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>();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
83
products/ASC.Files/Core/Mapping/FoldersTypeConverter.cs
Normal file
83
products/ASC.Files/Core/Mapping/FoldersTypeConverter.cs
Normal 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;
|
||||
}
|
||||
}
|
@ -24,7 +24,6 @@ public class Startup : BaseStartup
|
||||
DIHelper.TryAdd<ChunkedUploaderHandlerService>();
|
||||
DIHelper.TryAdd<DocuSignHandlerService>();
|
||||
DIHelper.TryAdd<ThirdPartyAppHandlerService>();
|
||||
DIHelper.TryAdd<FilesTypeConverter>();
|
||||
|
||||
NotifyConfigurationExtension.Register(DIHelper);
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user