public async Task <int> Execute(IRegisterOdsInstanceModel instance, ApiMode mode, string userId, CloudOdsClaimSet cloudOdsClaimSet = null) { var instanceName = instance.NumericSuffix.Value.ToString(); var newInstance = new OdsInstanceRegistration { Name = instanceName, DatabaseName = _inferInstanceService.DatabaseName(instance.NumericSuffix.Value, mode), Description = instance.Description }; await _odsInstanceFirstTimeSetupService.CompleteSetup(newInstance, cloudOdsClaimSet, mode); await _identity.UserOdsInstanceRegistrations.AddAsync( new UserOdsInstanceRegistration { OdsInstanceRegistrationId = newInstance.Id, UserId = userId }); await _identity.SaveChangesAsync(); if (mode == ApiMode.YearSpecific) { _setCurrentSchoolYear.Execute(instanceName, mode, (short)instance.NumericSuffix.Value); } return(newInstance.Id); }
public async Task <int> Execute(IRegisterOdsInstanceModel instance, ApiMode mode, string userId, CloudOdsClaimSet cloudOdsClaimSet = null) { var instanceName = InferInstanceDatabaseName(instance.NumericSuffix.Value, mode); var newInstance = new OdsInstanceRegistration { Name = instanceName, Description = instance.Description }; await _odsInstanceFirstTimeSetupService.CompleteSetup(newInstance, cloudOdsClaimSet, mode); _identity.UserOdsInstanceRegistrations.Add( new UserOdsInstanceRegistration { OdsInstanceRegistrationId = newInstance.Id, UserId = userId }); _identity.SaveChanges(); return(newInstance.Id); }
public string GetConnectionString(string odsInstanceName, ApiMode apiMode) { var connectionStringBuilder = _connectionStringBuilderAdapterFactory.Get(); connectionStringBuilder.ConnectionString = _connectionStrings.ProductionOds; if (apiMode.SupportsMultipleInstances && !IsTemplate(connectionStringBuilder.DatabaseName)) { throw new InvalidOperationException( "The database name on the connection string must contain a placeholder {0} for the multi-instance modes to work."); } connectionStringBuilder.DatabaseName = GetUpdatedName(connectionStringBuilder.DatabaseName); connectionStringBuilder.ServerName = GetUpdatedName(connectionStringBuilder.ServerName); return(connectionStringBuilder.ConnectionString); string GetUpdatedName(string input) { if (!IsTemplate(input)) { return(input); } var updatedValue = input; if (apiMode.SupportsMultipleInstances) { updatedValue = string.Format(input, $"Ods_{odsInstanceName.ExtractNumericInstanceSuffix()}"); } else if (apiMode == ApiMode.SharedInstance) { updatedValue = string.Format(input, "Ods"); } return(updatedValue); } }
public async Task <IEnumerable <BulkRegisterOdsInstancesResult> > Execute(IEnumerable <IRegisterOdsInstanceModel> odsInstances, ApiMode mode, string userId, CloudOdsClaimSet cloudOdsClaimSet = null) { var results = new List <BulkRegisterOdsInstancesResult>(); foreach (var instance in odsInstances) { try { await _registerOdsInstanceCommand.Execute(instance, mode, userId, cloudOdsClaimSet); results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = instance.NumericSuffix.ToString(), Description = instance.Description, Success = true }); _logger.Info($"Ods instance({instance.NumericSuffix.ToString()}) registered successfully."); } catch (Exception ex) { results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = instance.NumericSuffix.ToString(), Description = instance.Description, Success = false, ErrorMessage = ex.Message }); _logger.Error($"Ods instance({instance.NumericSuffix.ToString()}) registration failed. Error: {ex.Message}"); } } return(results); }
private string InferInstanceDatabaseName(int odsInstanceNumericSuffix, ApiMode mode) { using (var connection = _connectionProvider.CreateNewConnection(odsInstanceNumericSuffix, mode)) return(connection.Database); }
public async Task <IEnumerable <BulkRegisterOdsInstancesResult> > Execute(IEnumerable <IRegisterOdsInstanceModel> odsInstances, IEnumerable <IRegisterOdsInstanceModel> filteredDataRecords, ApiMode mode, string userId, CloudOdsClaimSet cloudOdsClaimSet = null) { var results = new List <BulkRegisterOdsInstancesResult>(); var dataRecords = odsInstances.ToList(); var recordsToProcess = filteredDataRecords.ToList(); if (!recordsToProcess.Any()) { recordsToProcess = _dataFiltrationService.FilteredRecords(dataRecords, mode).ToList(); } var skippedRecords = dataRecords.Except(recordsToProcess); foreach (var skippedInstance in skippedRecords) { results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = skippedInstance.NumericSuffix.ToString(), Description = skippedInstance.Description, IndividualInstanceResult = IndividualInstanceResult.Skipped }); _logger.Info($"Ods instance({skippedInstance.NumericSuffix.ToString()}) was skipped because it was previously registered."); } foreach (var instance in recordsToProcess) { try { var odsInstanceRegisteredId = await _registerOdsInstanceCommand.Execute(instance, mode, userId, cloudOdsClaimSet); results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = instance.NumericSuffix.ToString(), Description = instance.Description, IndividualInstanceResult = IndividualInstanceResult.Succeded, OdsInstanceRegisteredId = odsInstanceRegisteredId }); _logger.Info($"Ods instance({instance.NumericSuffix.ToString()}) registered successfully."); } catch (Exception ex) { results.Add(new BulkRegisterOdsInstancesResult { NumericSuffix = instance.NumericSuffix.ToString(), Description = instance.Description, IndividualInstanceResult = IndividualInstanceResult.Failed, ErrorMessage = ex.Message }); _logger.Error($"Ods instance({instance.NumericSuffix.ToString()}) registration failed. Error: {ex.Message}"); } } return(results); }