diff --git a/products/ASC.Files/Core/Core/Dao/Interfaces/IFileDao.cs b/products/ASC.Files/Core/Core/Dao/Interfaces/IFileDao.cs index bc56f31bb1..7aa1641ffd 100644 --- a/products/ASC.Files/Core/Core/Dao/Interfaces/IFileDao.cs +++ b/products/ASC.Files/Core/Core/Dao/Interfaces/IFileDao.cs @@ -245,9 +245,9 @@ public interface IFileDao /// /// Set created by /// - /// + /// /// - Task ReassignFilesAsync(T[] fileIds, Guid newOwnerId); + Task ReassignFilesAsync(Guid oldOwnerId, Guid newOwnerId); /// /// Search files in SharedWithMe & Projects diff --git a/products/ASC.Files/Core/Core/Dao/Interfaces/IFolderDao.cs b/products/ASC.Files/Core/Core/Dao/Interfaces/IFolderDao.cs index bf6a6c906d..bab168e70d 100644 --- a/products/ASC.Files/Core/Core/Dao/Interfaces/IFolderDao.cs +++ b/products/ASC.Files/Core/Core/Dao/Interfaces/IFolderDao.cs @@ -221,9 +221,9 @@ public interface IFolderDao /// /// Set created by /// - /// + /// /// - Task ReassignFoldersAsync(T[] folderIds, Guid newOwnerId); + Task ReassignFoldersAsync(Guid oldOwnerId, Guid newOwnerId); /// diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs index bf743ce7b4..ccd754805a 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs @@ -1169,15 +1169,14 @@ internal class FileDao : AbstractDao, IFileDao #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> GetFilesAsync(IEnumerable parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs index ce14945b85..c3b8a26685 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs @@ -974,12 +974,12 @@ internal class FolderDao : AbstractDao, IFolderDao #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)); } diff --git a/products/ASC.Files/Core/Core/FileStorageService.cs b/products/ASC.Files/Core/Core/FileStorageService.cs index ce920f0dff..89f83b6b3d 100644 --- a/products/ASC.Files/Core/Core/FileStorageService.cs +++ b/products/ASC.Files/Core/Core/FileStorageService.cs @@ -2236,8 +2236,8 @@ public class FileStorageService //: IFileStorageService var providerDao = GetProviderDao(); 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>(); - newFolder.Title = string.Format(_customNamingPeople.Substitute("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(), userFrom.Id, userTo.Id, folderDao, fileDao); + _logger.InformationReassignData(userFrom.Id, userTo.Id); + await EntryManager.ReassignItemsAsync(userFrom.Id, userTo.Id, folderDao, fileDao); } #region Favorites Manager diff --git a/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyFileDao.cs b/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyFileDao.cs index 22870f6108..267cc15f38 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyFileDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyFileDao.cs @@ -600,7 +600,7 @@ internal abstract class ThirdPartyFileDao: IFileDao uploadSession); - public Task ReassignFilesAsync(string[] fileIds, Guid newOwnerId) + public Task ReassignFilesAsync(Guid oldOwner, Guid newOwnerId) { return Task.CompletedTask; } diff --git a/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyFolderDao.cs index a1265b89be..9aea1ff95a 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyFolderDao.cs @@ -521,7 +521,7 @@ internal class ThirdPartyFolderDao : BaseFolderDao, IFold return Task.FromResult(new ChunkZipWriteOperator(_tempStream, chunkedUploadSession, sessionHolder)); } - public Task ReassignFoldersAsync(string[] folderIds, Guid newOwnerId) + public Task ReassignFoldersAsync(Guid oldOwnerId, Guid newOwnerId) { return Task.CompletedTask; } diff --git a/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyProviderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyProviderDao.cs index d70ed45bc6..ddc97223a1 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyProviderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ThirdPartyProviderDao.cs @@ -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; } diff --git a/products/ASC.Files/Core/Log/FileStorageServiceLogger.cs b/products/ASC.Files/Core/Log/FileStorageServiceLogger.cs index 4c97238a44..e635907909 100644 --- a/products/ASC.Files/Core/Log/FileStorageServiceLogger.cs +++ b/products/ASC.Files/Core/Log/FileStorageServiceLogger.cs @@ -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); } diff --git a/products/ASC.Files/Core/Utils/EntryManager.cs b/products/ASC.Files/Core/Utils/EntryManager.cs index a4891110fb..bd84dac70d 100644 --- a/products/ASC.Files/Core/Utils/EntryManager.cs +++ b/products/ASC.Files/Core/Utils/EntryManager.cs @@ -1952,18 +1952,10 @@ public class EntryManager } } - public static async Task ReassignItemsAsync(T parentId, Guid fromUserId, Guid toUserId, IFolderDao folderDao, IFileDao fileDao) + public static async Task ReassignItemsAsync(Guid fromUserId, Guid toUserId, IFolderDao folderDao, IFileDao 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); } }