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);
 }
示例#6
0
        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);
        }