ASC.Files: ReassignStorageAsync refactoring (deletion of personal data, optimization of data reassignment)
This commit is contained in:
parent
d6e3d3c3ba
commit
c21ea30882
@ -245,9 +245,9 @@ public interface IFileDao<T>
|
||||
/// <summary>
|
||||
/// Set created by
|
||||
/// </summary>
|
||||
/// <param name="fileIds"></param>
|
||||
/// <param name="oldOwnerId"></param>
|
||||
/// <param name="newOwnerId"></param>
|
||||
Task ReassignFilesAsync(T[] fileIds, Guid newOwnerId);
|
||||
Task ReassignFilesAsync(Guid oldOwnerId, Guid newOwnerId);
|
||||
|
||||
/// <summary>
|
||||
/// Search files in SharedWithMe & Projects
|
||||
|
@ -221,9 +221,9 @@ public interface IFolderDao<T>
|
||||
/// <summary>
|
||||
/// Set created by
|
||||
/// </summary>
|
||||
/// <param name="folderIds"></param>
|
||||
/// <param name="oldOwnerId"></param>
|
||||
/// <param name="newOwnerId"></param>
|
||||
Task ReassignFoldersAsync(T[] folderIds, Guid newOwnerId);
|
||||
Task ReassignFoldersAsync(Guid oldOwnerId, Guid newOwnerId);
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
@ -1169,15 +1169,14 @@ internal class FileDao : AbstractDao, IFileDao<int>
|
||||
|
||||
#region Only in TMFileDao
|
||||
|
||||
public async Task ReassignFilesAsync(int[] fileIds, Guid newOwnerId)
|
||||
public async Task ReassignFilesAsync(Guid oldOwnerId, Guid newOwnerId)
|
||||
{
|
||||
using var filesDbContext = _dbContextFactory.CreateDbContext();
|
||||
|
||||
await Query(filesDbContext.Files)
|
||||
.Where(r => r.CurrentVersion)
|
||||
.Where(r => fileIds.Contains(r.Id))
|
||||
.Where(r => r.CreateBy == oldOwnerId)
|
||||
.ExecuteUpdateAsync(p => p.SetProperty(f => f.CreateBy, newOwnerId));
|
||||
}
|
||||
}
|
||||
|
||||
public IAsyncEnumerable<File<int>> GetFilesAsync(IEnumerable<int> parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent)
|
||||
{
|
||||
|
@ -974,12 +974,12 @@ internal class FolderDao : AbstractDao, IFolderDao<int>
|
||||
|
||||
#region Only for TMFolderDao
|
||||
|
||||
public async Task ReassignFoldersAsync(int[] folderIds, Guid newOwnerId)
|
||||
public async Task ReassignFoldersAsync(Guid oldOwnerId, Guid newOwnerId)
|
||||
{
|
||||
using var filesDbContext = _dbContextFactory.CreateDbContext();
|
||||
|
||||
await Query(filesDbContext.Folders)
|
||||
.Where(r => folderIds.Contains(r.Id))
|
||||
.Where(r => r.CreateBy == oldOwnerId)
|
||||
.ExecuteUpdateAsync(f => f.SetProperty(p => p.CreateBy, newOwnerId));
|
||||
}
|
||||
|
||||
|
@ -2236,8 +2236,8 @@ public class FileStorageService //: IFileStorageService
|
||||
var providerDao = GetProviderDao<T>();
|
||||
if (providerDao != null)
|
||||
{
|
||||
//move common thirdparty storage userFrom
|
||||
await foreach (var commonProviderInfo in providerDao.GetProvidersInfoAsync(userFrom.Id).Where(provider => provider.RootFolderType == FolderType.COMMON))
|
||||
//move thirdparty storage userFrom
|
||||
await foreach (var commonProviderInfo in providerDao.GetProvidersInfoAsync(userFrom.Id))
|
||||
{
|
||||
_logger.InformationReassignProvider(commonProviderInfo.ProviderId, userFrom.Id, userTo.Id);
|
||||
await providerDao.UpdateProviderInfoAsync(commonProviderInfo.ProviderId, null, null, FolderType.DEFAULT, userTo.Id);
|
||||
@ -2249,27 +2249,23 @@ public class FileStorageService //: IFileStorageService
|
||||
|
||||
if (!await _userManager.IsUserAsync(userFrom))
|
||||
{
|
||||
var folderIdFromMy = await folderDao.GetFolderIDUserAsync(false, userFrom.Id);
|
||||
_logger.InformationDeletePersonalData(userFrom.Id);
|
||||
|
||||
var folderIdFromMy = await folderDao.GetFolderIDUserAsync(false, userFrom.Id);
|
||||
if (!Equals(folderIdFromMy, 0))
|
||||
{
|
||||
//create folder with name userFrom in folder userTo
|
||||
var folderIdToMy = await folderDao.GetFolderIDUserAsync(true, userTo.Id);
|
||||
var newFolder = _serviceProvider.GetService<Folder<T>>();
|
||||
newFolder.Title = string.Format(_customNamingPeople.Substitute<FilesCommonResource>("TitleDeletedUserFolder"), userFrom.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
newFolder.ParentId = folderIdToMy;
|
||||
await folderDao.DeleteFolderAsync(folderIdFromMy);
|
||||
}
|
||||
|
||||
var newFolderTo = await folderDao.SaveFolderAsync(newFolder);
|
||||
await _socketManager.CreateFolderAsync(newFolder);
|
||||
|
||||
//move items from userFrom to userTo
|
||||
await _entryManager.MoveSharedItemsAsync(folderIdFromMy, newFolderTo, folderDao, fileDao);
|
||||
|
||||
await EntryManager.ReassignItemsAsync(newFolderTo, userFrom.Id, userTo.Id, folderDao, fileDao);
|
||||
var folderIdFromTrash = await folderDao.GetFolderIDTrashAsync(false, userFrom.Id);
|
||||
if (!Equals(folderIdFromTrash, 0))
|
||||
{
|
||||
await folderDao.DeleteFolderAsync(folderIdFromTrash);
|
||||
}
|
||||
}
|
||||
|
||||
await EntryManager.ReassignItemsAsync(await _globalFolderHelper.GetFolderCommonAsync<T>(), userFrom.Id, userTo.Id, folderDao, fileDao);
|
||||
_logger.InformationReassignData(userFrom.Id, userTo.Id);
|
||||
await EntryManager.ReassignItemsAsync(userFrom.Id, userTo.Id, folderDao, fileDao);
|
||||
}
|
||||
|
||||
#region Favorites Manager
|
||||
|
@ -600,7 +600,7 @@ internal abstract class ThirdPartyFileDao<TFile, TFolder, TItem>: IFileDao<strin
|
||||
|
||||
public abstract Task AbortUploadSessionAsync(ChunkedUploadSession<string> uploadSession);
|
||||
|
||||
public Task ReassignFilesAsync(string[] fileIds, Guid newOwnerId)
|
||||
public Task ReassignFilesAsync(Guid oldOwner, Guid newOwnerId)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
@ -521,7 +521,7 @@ internal class ThirdPartyFolderDao<TFile, TFolder, TItem> : BaseFolderDao, IFold
|
||||
return Task.FromResult<IDataWriteOperator>(new ChunkZipWriteOperator(_tempStream, chunkedUploadSession, sessionHolder));
|
||||
}
|
||||
|
||||
public Task ReassignFoldersAsync(string[] folderIds, Guid newOwnerId)
|
||||
public Task ReassignFoldersAsync(Guid oldOwnerId, Guid newOwnerId)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ internal abstract class ThirdPartyProviderDao
|
||||
{
|
||||
#region FileDao
|
||||
|
||||
public Task ReassignFilesAsync(string[] fileIds, Guid newOwnerId)
|
||||
public Task ReassignFilesAsync(Guid oldOwner, Guid newOwnerId)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
@ -125,7 +125,7 @@ internal abstract class ThirdPartyProviderDao
|
||||
#endregion
|
||||
#region FolderDao
|
||||
|
||||
public Task ReassignFoldersAsync(string[] folderIds, Guid newOwnerId)
|
||||
public Task ReassignFoldersAsync(Guid oldOwnerId, Guid newOwnerId)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
@ -28,17 +28,23 @@ namespace ASC.Files.Core.Log;
|
||||
internal static partial class FileStorageServiceLogger
|
||||
{
|
||||
[LoggerMessage(Level = LogLevel.Error, Message = "DocEditor")]
|
||||
public static partial void ErrorDocEditor(this ILogger logger, Exception exception);
|
||||
|
||||
public static partial void ErrorDocEditor(this ILogger logger, Exception exception);
|
||||
|
||||
[LoggerMessage(Level = LogLevel.Error, Message = "CreateThumbnails")]
|
||||
public static partial void ErrorCreateThumbnails(this ILogger logger, Exception exception);
|
||||
|
||||
public static partial void ErrorCreateThumbnails(this ILogger logger, Exception exception);
|
||||
|
||||
[LoggerMessage(Level = LogLevel.Error, Message = "FileStorageService")]
|
||||
public static partial void ErrorFileStorageService(this ILogger logger, Exception exception);
|
||||
|
||||
|
||||
[LoggerMessage(Level = LogLevel.Information, Message = "Reassign provider {providerId} from {fromUser} to {toUser}")]
|
||||
public static partial void InformationReassignProvider(this ILogger logger, int providerId, Guid fromUser, Guid toUser);
|
||||
|
||||
public static partial void InformationReassignProvider(this ILogger logger, int providerId, Guid fromUser, Guid toUser);
|
||||
|
||||
[LoggerMessage(Level = LogLevel.Information, Message = "Delete provider {providerId} for {userId}")]
|
||||
public static partial void InformationDeleteProvider(this ILogger logger, int providerId, Guid userId);
|
||||
|
||||
[LoggerMessage(Level = LogLevel.Information, Message = "Reassign data from {fromUser} to {toUser}")]
|
||||
public static partial void InformationReassignData(this ILogger logger, Guid fromUser, Guid toUser);
|
||||
|
||||
[LoggerMessage(Level = LogLevel.Information, Message = "Delete personal data for {userId}")]
|
||||
public static partial void InformationDeletePersonalData(this ILogger logger, Guid userId);
|
||||
}
|
||||
|
@ -1952,18 +1952,10 @@ public class EntryManager
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task ReassignItemsAsync<T>(T parentId, Guid fromUserId, Guid toUserId, IFolderDao<T> folderDao, IFileDao<T> fileDao)
|
||||
public static async Task ReassignItemsAsync<T>(Guid fromUserId, Guid toUserId, IFolderDao<T> folderDao, IFileDao<T> fileDao)
|
||||
{
|
||||
var fileIds = await fileDao.GetFilesAsync(parentId, new OrderBy(SortedByType.AZ, true), FilterType.ByUser, false, fromUserId, null, true, default, true)
|
||||
.Where(file => file.CreateBy == fromUserId).Select(file => file.Id)
|
||||
.ToListAsync();
|
||||
await fileDao.ReassignFilesAsync(fromUserId, toUserId);
|
||||
|
||||
await fileDao.ReassignFilesAsync(fileIds.ToArray(), toUserId);
|
||||
|
||||
var folderIds = await folderDao.GetFoldersAsync(parentId, new OrderBy(SortedByType.AZ, true), FilterType.ByUser, false, fromUserId, null, default, true)
|
||||
.Where(folder => folder.CreateBy == fromUserId).Select(folder => folder.Id)
|
||||
.ToListAsync();
|
||||
|
||||
await folderDao.ReassignFoldersAsync(folderIds.ToArray(), toUserId);
|
||||
await folderDao.ReassignFoldersAsync(fromUserId, toUserId);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user