Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelbannov committed Dec 8, 2023
1 parent 9f47f8b commit d0c8a81
Showing 1 changed file with 115 additions and 115 deletions.
230 changes: 115 additions & 115 deletions common/Tools/ASC.MigrationPersonalToDocspace/MigrationCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,17 @@ 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<IModuleSpecifics> _modules;
private string _pathToSave;
private string _userName;
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<ModuleName> _namesModules = new List<ModuleName>()
Expand All @@ -58,12 +58,12 @@ public class MigrationCreator
};

private readonly List<ModuleName> _namesModulesForAlreadyExistPortal = new List<ModuleName>()
{
{
ModuleName.Core,
ModuleName.Files,
ModuleName.Files2,
};

};

public string NewAlias { get; private set; }

public MigrationCreator(
Expand All @@ -72,23 +72,23 @@ public MigrationCreator(
DbFactory dbFactory,
StorageFactory storageFactory,
StorageFactoryConfig storageFactoryConfig,
ModuleProvider moduleProvider,
IMapper mapper,
CreatorDbContext сreatorDbContext)
ModuleProvider moduleProvider,
IMapper mapper,
CreatorDbContext сreatorDbContext)
{
_tenantDomainValidator = tenantDomainValidator;
_tempStream = tempStream;
_dbFactory = dbFactory;
_storageFactory = storageFactory;
_storageFactoryConfig = storageFactoryConfig;
_moduleProvider = moduleProvider;
_mapper = mapper;
_creatorDbContext = сreatorDbContext;
_mapper = mapper;
_creatorDbContext = сreatorDbContext;
}

public async Task<string> 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();
Expand All @@ -108,111 +108,111 @@ 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<TenantDbContext>();
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<TenantDbContext>();
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<UserDbContext>();
using var userDbContext = _creatorDbContext.CreateDbContext<UserDbContext>();
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<TenantDbContext>(_toRegion);
using var userDbContextToregion = _creatorDbContext.CreateDbContext<UserDbContext>(_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<TenantDbContext>(_toRegion);
using var userDbContextToregion = _creatorDbContext.CreateDbContext<UserDbContext>(_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)
{
throw new ArgumentException("username was not found");
}
}

private void CheckCountManager()
{
if (!string.IsNullOrEmpty(_toAlias))
{
using var dbContextTenant = _creatorDbContext.CreateDbContext<TenantDbContext>(_toRegion);
var tenant = dbContextTenant.Tenants.SingleOrDefault(t => t.Alias == _toAlias);

using var coreDbContext = _creatorDbContext.CreateDbContext<CoreDbContext>(_toRegion);
var qouta = coreDbContext.Quotas
.Where(r => r.TenantId == tenant.Id)
.ProjectTo<TenantQuota>(_mapper.ConfigurationProvider)
.SingleOrDefault();

using var userDbContextToregion = _creatorDbContext.CreateDbContext<UserDbContext>(_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<TenantDbContext>(_toRegion);
var tenant = dbContextTenant.Tenants.SingleOrDefault(t => t.Alias == _toAlias);

using var coreDbContext = _creatorDbContext.CreateDbContext<CoreDbContext>(_toRegion);
var qouta = coreDbContext.Quotas
.Where(r => r.TenantId == tenant.Id)
.ProjectTo<TenantQuota>(_mapper.ConfigurationProvider)
.SingleOrDefault();

using var userDbContextToregion = _creatorDbContext.CreateDbContext<UserDbContext>(_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();
Expand All @@ -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))
{
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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}");
Expand All @@ -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");
Expand Down Expand Up @@ -417,9 +417,9 @@ private async Task<IEnumerable<BackupFileInfo>> 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<Task>(20);
foreach (var dbFile in dbFiles)
Expand All @@ -441,15 +441,15 @@ private async Task<IEnumerable<BackupFileInfo>> GetFilesToProcess(Guid id)
private async Task FindFiles(List<BackupFileInfo> 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)
{
list.AddRange(files);
}

if (files.Any())
if (files.Any())
{
Console.WriteLine($"file {dbFile.Id} found");
}
Expand Down

0 comments on commit d0c8a81

Please sign in to comment.