diff --git a/common/Tools/ASC.MigrationPersonalToDocspace/MigrationCreator.cs b/common/Tools/ASC.MigrationPersonalToDocspace/MigrationCreator.cs index 73c21574803..27d4b99544d 100644 --- a/common/Tools/ASC.MigrationPersonalToDocspace/MigrationCreator.cs +++ b/common/Tools/ASC.MigrationPersonalToDocspace/MigrationCreator.cs @@ -35,8 +35,8 @@ public class MigrationCreator private readonly StorageFactory _storageFactory; private readonly StorageFactoryConfig _storageFactoryConfig; private readonly ModuleProvider _moduleProvider; - private readonly IMapper _mapper; - private readonly CreatorDbContext _creatorDbContext; + private readonly IMapper _mapper; + private readonly CreatorDbContext _creatorDbContext; private List _modules; private string _pathToSave; @@ -44,8 +44,8 @@ public class MigrationCreator private string _mail; private string _toRegion; private string _toAlias; - private string _fromAlias; - private int _fromTenantId; + private string _fromAlias; + private int _fromTenantId; private readonly object _locker = new object(); private readonly int _limit = 1000; private readonly List _namesModules = new List() @@ -58,12 +58,12 @@ public class MigrationCreator }; private readonly List _namesModulesForAlreadyExistPortal = new List() - { + { ModuleName.Core, ModuleName.Files, ModuleName.Files2, - }; - + }; + public string NewAlias { get; private set; } public MigrationCreator( @@ -72,9 +72,9 @@ public MigrationCreator( DbFactory dbFactory, StorageFactory storageFactory, StorageFactoryConfig storageFactoryConfig, - ModuleProvider moduleProvider, - IMapper mapper, - CreatorDbContext сreatorDbContext) + ModuleProvider moduleProvider, + IMapper mapper, + CreatorDbContext сreatorDbContext) { _tenantDomainValidator = tenantDomainValidator; _tempStream = tempStream; @@ -82,13 +82,13 @@ public MigrationCreator( _storageFactory = storageFactory; _storageFactoryConfig = storageFactoryConfig; _moduleProvider = moduleProvider; - _mapper = mapper; - _creatorDbContext = сreatorDbContext; + _mapper = mapper; + _creatorDbContext = сreatorDbContext; } public async Task Create(string fromAlias, string userName, string mail, string toRegion, string toAlias) { - Init(fromAlias, userName, mail, toRegion, toAlias); + Init(fromAlias, userName, mail, toRegion, toAlias); var id = GetUserId(); CheckCountManager(); @@ -108,67 +108,67 @@ private void Init(string fromAlias, string userName, string mail, string toRegio _toRegion = toRegion; _userName = userName; _mail = mail; - _fromAlias = fromAlias; - _toAlias = toAlias; - - using var dbContextTenant = _creatorDbContext.CreateDbContext(); - var tenant = dbContextTenant.Tenants.SingleOrDefault(q => q.Alias == _fromAlias); - - if (tenant == null) - { - throw new ArgumentException("tenant was not found"); + _fromAlias = fromAlias; + _toAlias = toAlias; + + using var dbContextTenant = _creatorDbContext.CreateDbContext(); + var tenant = dbContextTenant.Tenants.SingleOrDefault(q => q.Alias == _fromAlias); + + if (tenant == null) + { + throw new ArgumentException("tenant was not found"); } - _fromTenantId = tenant.Id; + _fromTenantId = tenant.Id; - _modules = string.IsNullOrEmpty(_toAlias) - ? _moduleProvider.AllModules.Where(m => _namesModules.Contains(m.ModuleName)).ToList() + _modules = string.IsNullOrEmpty(_toAlias) + ? _moduleProvider.AllModules.Where(m => _namesModules.Contains(m.ModuleName)).ToList() : _moduleProvider.AllModules.Where(m => _namesModulesForAlreadyExistPortal.Contains(m.ModuleName)).ToList(); - } + } private Guid GetUserId() { try { - using var userDbContext = _creatorDbContext.CreateDbContext(); + using var userDbContext = _creatorDbContext.CreateDbContext(); User user = null; - if (string.IsNullOrEmpty(_userName) || string.IsNullOrEmpty(_mail)) + if (string.IsNullOrEmpty(_userName) || string.IsNullOrEmpty(_mail)) { if (string.IsNullOrEmpty(_userName)) { - user = userDbContext.Users.FirstOrDefault(q => q.TenantId == _fromTenantId && q.Status == EmployeeStatus.Active && q.Email == _mail); + user = userDbContext.Users.FirstOrDefault(q => q.TenantId == _fromTenantId && q.Status == EmployeeStatus.Active && q.Email == _mail); _userName = user.UserName; } else { - user = userDbContext.Users.FirstOrDefault(q => q.TenantId == _fromTenantId && q.Status == EmployeeStatus.Active && q.UserName == _userName); + user = userDbContext.Users.FirstOrDefault(q => q.TenantId == _fromTenantId && q.Status == EmployeeStatus.Active && q.UserName == _userName); } } else { - user = userDbContext.Users.FirstOrDefault(q => q.TenantId == _fromTenantId && q.Status == EmployeeStatus.Active && q.UserName == _userName && q.Email == _mail); + user = userDbContext.Users.FirstOrDefault(q => q.TenantId == _fromTenantId && q.Status == EmployeeStatus.Active && q.UserName == _userName && q.Email == _mail); + } + if (!string.IsNullOrEmpty(_toAlias)) + { + using var dbContextTenant = _creatorDbContext.CreateDbContext(_toRegion); + using var userDbContextToregion = _creatorDbContext.CreateDbContext(_toRegion); + var tenant = dbContextTenant.Tenants.SingleOrDefault(t => t.Alias == _toAlias); + if (tenant == null) + { + throw new ArgumentException("tenant was not found"); + } + else + { + if (userDbContextToregion.Users.Any(q => q.TenantId == tenant.Id && q.UserName == _userName || q.Email == _mail)) + { + throw new ArgumentException("username already exist in the portal"); + } + } } - if (!string.IsNullOrEmpty(_toAlias)) - { - using var dbContextTenant = _creatorDbContext.CreateDbContext(_toRegion); - using var userDbContextToregion = _creatorDbContext.CreateDbContext(_toRegion); - var tenant = dbContextTenant.Tenants.SingleOrDefault(t => t.Alias == _toAlias); - if (tenant == null) - { - throw new ArgumentException("tenant was not found"); - } - else - { - if (userDbContextToregion.Users.Any(q => q.TenantId == tenant.Id && q.UserName == _userName || q.Email == _mail)) - { - throw new ArgumentException("username already exist in the portal"); - } - } - } return user.Id; } - catch (ArgumentException e) + catch (ArgumentException) { - throw e; + throw; } catch (Exception) { @@ -176,43 +176,43 @@ private Guid GetUserId() } } - private void CheckCountManager() - { - if (!string.IsNullOrEmpty(_toAlias)) - { - using var dbContextTenant = _creatorDbContext.CreateDbContext(_toRegion); - var tenant = dbContextTenant.Tenants.SingleOrDefault(t => t.Alias == _toAlias); - - using var coreDbContext = _creatorDbContext.CreateDbContext(_toRegion); - var qouta = coreDbContext.Quotas - .Where(r => r.TenantId == tenant.Id) - .ProjectTo(_mapper.ConfigurationProvider) - .SingleOrDefault(); - - using var userDbContextToregion = _creatorDbContext.CreateDbContext(_toRegion); - var usersCount = userDbContextToregion.Users - .Join(userDbContextToregion.UserGroups, u => u.Id, ug => ug.Userid, (u, ug) => new { u, ug }) - .Where(q => q.u.TenantId == tenant.Id && q.ug.UserGroupId == Common.Security.Authorizing.Constants.DocSpaceAdmin.ID).Count(); - if (usersCount > qouta.CountRoomAdmin) - { - throw new ArgumentException("user count exceed"); - } - } - } + private void CheckCountManager() + { + if (!string.IsNullOrEmpty(_toAlias)) + { + using var dbContextTenant = _creatorDbContext.CreateDbContext(_toRegion); + var tenant = dbContextTenant.Tenants.SingleOrDefault(t => t.Alias == _toAlias); + + using var coreDbContext = _creatorDbContext.CreateDbContext(_toRegion); + var qouta = coreDbContext.Quotas + .Where(r => r.TenantId == tenant.Id) + .ProjectTo(_mapper.ConfigurationProvider) + .SingleOrDefault(); + + using var userDbContextToregion = _creatorDbContext.CreateDbContext(_toRegion); + var usersCount = userDbContextToregion.Users + .Join(userDbContextToregion.UserGroups, u => u.Id, ug => ug.Userid, (u, ug) => new { u, ug }) + .Where(q => q.u.TenantId == tenant.Id && q.ug.UserGroupId == Common.Security.Authorizing.Constants.DocSpaceAdmin.ID).Count(); + if (usersCount > qouta.CountRoomAdmin) + { + throw new ArgumentException("user count exceed"); + } + } + } private async Task DoMigrationDb(Guid id, IDataWriteOperator writer) { - if (!string.IsNullOrEmpty(_toAlias)) - { - using (var connection = _dbFactory.OpenConnection()) - { - var tenantsModule = _moduleProvider.AllModules.Single(q => q.ModuleName == ModuleName.Tenants); - var coreUserTable = tenantsModule.Tables.Single(q => q.Name == "core_user"); - await ArhiveTable(coreUserTable, writer, tenantsModule, connection, id); - } - } - + if (!string.IsNullOrEmpty(_toAlias)) + { + using (var connection = _dbFactory.OpenConnection()) + { + var tenantsModule = _moduleProvider.AllModules.Single(q => q.ModuleName == ModuleName.Tenants); + var coreUserTable = tenantsModule.Tables.Single(q => q.Name == "core_user"); + await ArhiveTable(coreUserTable, writer, tenantsModule, connection, id); + } + } + foreach (var module in _modules) { var tablesToProcess = module.Tables.Where(t => t.InsertMethod != InsertMethod.None).ToList(); @@ -228,11 +228,11 @@ private async Task DoMigrationDb(Guid id, IDataWriteOperator writer) await ArhiveTable(table, writer, module, connection, id); } } - } - } + } + } - private async Task ArhiveTable(TableInfo table, IDataWriteOperator writer, IModuleSpecifics module, DbConnection connection, Guid id) - { + private async Task ArhiveTable(TableInfo table, IDataWriteOperator writer, IModuleSpecifics module, DbConnection connection, Guid id) + { Console.WriteLine($"backup table {table.Name}"); using (var data = new DataTable(table.Name)) { @@ -245,8 +245,8 @@ private async Task ArhiveTable(TableInfo table, IDataWriteOperator writer, IModu do { var t = (TableInfo)state; - var dataAdapter = _dbFactory.CreateDataAdapter(); - dataAdapter.SelectCommand = module.CreateSelectCommand(connection.Fix(), _fromTenantId, t, _limit, offset, id).WithTimeout(600); + var dataAdapter = _dbFactory.CreateDataAdapter(); + dataAdapter.SelectCommand = module.CreateSelectCommand(connection.Fix(), _fromTenantId, t, _limit, offset, id).WithTimeout(600); counts = ((DbDataAdapter)dataAdapter).Fill(data); offset += _limit; } while (counts == _limit); @@ -269,17 +269,17 @@ private async Task ArhiveTable(TableInfo table, IDataWriteOperator writer, IModu ChangeName(data); } - if (data.TableName == "files_bunch_objects") - { - ClearCommonBunch(data); - } - - await WriteEnrty(data, writer, module); - } - } - - private async Task WriteEnrty(DataTable data, IDataWriteOperator writer, IModuleSpecifics module) - { + if (data.TableName == "files_bunch_objects") + { + ClearCommonBunch(data); + } + + await WriteEnrty(data, writer, module); + } + } + + private async Task WriteEnrty(DataTable data, IDataWriteOperator writer, IModuleSpecifics module) + { using (var file = _tempStream.Create()) { data.WriteXml(file, XmlWriteMode.WriteSchema); @@ -329,8 +329,8 @@ private void ChangeAlias(DataTable data) { NewAlias = NewAlias + 1; } - - Console.WriteLine(ex.Message); + + Console.WriteLine(ex.Message); } } Console.WriteLine($"Alias is - {NewAlias}"); @@ -357,16 +357,16 @@ private void ChangeName(DataTable data) private void ClearCommonBunch(DataTable data) { - for (var i = 0; i < data.Rows.Count; i++) - { - if (data.Rows[i]["right_node"].ToString().EndsWith('/')) - { - data.Rows.RemoveAt(i); - i--; - } + for (var i = 0; i < data.Rows.Count; i++) + { + if (data.Rows[i]["right_node"].ToString().EndsWith('/')) + { + data.Rows.RemoveAt(i); + i--; + } } - } - + } + private async Task DoMigrationStorage(Guid id, IDataWriteOperator writer) { Console.WriteLine($"start backup storage"); @@ -417,9 +417,9 @@ private async Task> GetFilesToProcess(Guid id) var module = _storageFactoryConfig.GetModuleList().Where(m => m == "files").Single(); - var store = await _storageFactory.GetStorageAsync(_fromTenantId, module); + var store = await _storageFactory.GetStorageAsync(_fromTenantId, module); - var dbFiles = filesDbContext.Files.Where(q => q.CreateBy == id && q.TenantId == _fromTenantId).ToList(); + var dbFiles = filesDbContext.Files.Where(q => q.CreateBy == id && q.TenantId == _fromTenantId).ToList(); var tasks = new List(20); foreach (var dbFile in dbFiles) @@ -441,7 +441,7 @@ private async Task> GetFilesToProcess(Guid id) private async Task FindFiles(List list, IDataStore store, DbFile dbFile, string module) { var files = await store.ListFilesRelativeAsync(string.Empty, $"\\{GetUniqFileDirectory(dbFile.Id)}", "*.*", true) - .Select(path => new BackupFileInfo(string.Empty, module, $"{GetUniqFileDirectory(dbFile.Id)}\\{path}", _fromTenantId)) + .Select(path => new BackupFileInfo(string.Empty, module, $"{GetUniqFileDirectory(dbFile.Id)}\\{path}", _fromTenantId)) .ToListAsync(); lock (_locker) @@ -449,7 +449,7 @@ private async Task FindFiles(List list, IDataStore store, DbFile list.AddRange(files); } - if (files.Any()) + if (files.Any()) { Console.WriteLine($"file {dbFile.Id} found"); }