public async Task <(bool Success, IActionResult ActionResult)> UploadProviderVersion(string providerVersionId, ProviderVersionViewModel providerVersionModel)
        {
            Guard.IsNullOrWhiteSpace(providerVersionId, nameof(providerVersionId));
            Guard.ArgumentNotNull(providerVersionModel, nameof(providerVersionModel));

            IActionResult validationResult = await UploadProviderVersionValidate(providerVersionModel, providerVersionId);

            if (validationResult != null)
            {
                return(false, validationResult);
            }

            ProviderVersion providerVersion = _mapper.Map <ProviderVersion>(providerVersionModel);

            providerVersion.Id = $"providerVersion-{providerVersionId}";

            await UploadProviderVersionBlob(providerVersionId, providerVersion);

            providerVersion.Providers = null;

            ProviderVersionMetadata providerVersionMetadata = providerVersion;

            HttpStatusCode result = await _providerVersionMetadataRepositoryPolicy.ExecuteAsync(() => _providerVersionMetadataRepository.CreateProviderVersion(providerVersionMetadata));

            if (result.IsSuccess())
            {
                await _providersSearchPolicy.ExecuteAsync(() => _searchRepository.RunIndexer());
            }

            return(true, null);
        }
Example #2
0
        public async Task ExistsMatchesAnyByFundingStreamVersionTypeAndName(string queriedName,
                                                                            int queriedVersion,
                                                                            string queriedType,
                                                                            string queriedFundingStream,
                                                                            bool expectedExists)
        {
            string type          = nameof(type);
            string name          = nameof(name);
            string fundingStream = nameof(fundingStream);
            int    version       = 99;

            ProviderVersion providerVersionOne = NewProviderVersion();
            ProviderVersion providerVersionTwo = NewProviderVersion(_ => _.WithName(name)
                                                                    .WithFundingStream(fundingStream)
                                                                    .WithVersion(version)
                                                                    .WithType(type));

            GivenTheCosmosContents(providerVersionOne,
                                   providerVersionTwo);

            bool actualExists = await WhenTheProviderVersionExistsIsChecked(queriedName, queriedType, queriedFundingStream, queriedVersion);

            actualExists
            .Should()
            .Be(expectedExists);
        }
        private async Task UploadProviderVersionBlob(string providerVersionId, ProviderVersion providerVersion)
        {
            ICloudBlob blob = _blobClient.GetBlockBlobReference(providerVersionId.ToLowerInvariant() + ".json");

            await using MemoryStream stream = new MemoryStream(providerVersion.AsJsonBytes());

            await _blobRepositoryPolicy.ExecuteAsync(() => blob.UploadFromStreamAsync(stream));
        }
Example #4
0
        /// <summary>
        /// Load the best matching provider for the specified type param
        /// By default, the most recent Tridion version is used
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static IProvider LoadProvider <T>() where T : class
        {
            ProviderVersion version = ConfigurationHelper.ProviderVersion;

            if (version == ProviderVersion.Undefined)
            {
                version = ProviderAssemblyNames.DefaultProviderVersion;
            }
            string classIdentifier = ProviderAssemblyNames.GetProviderClassName(version);

            return((IProvider)ClassLoader.Load <T>(classIdentifier));
        }
        public void AddProviderVersion(ProviderVersion providerVersion)
        {
            Guard.ArgumentNotNull(providerVersion, nameof(providerVersion));
            Guard.IsNullOrWhiteSpace(providerVersion.ProviderVersionId, nameof(providerVersion.ProviderVersionId));

            _providerVersions[providerVersion.ProviderVersionId] = providerVersion;
            if (!_providers.ContainsKey(providerVersion.ProviderVersionId))
            {
                _providers[providerVersion.ProviderVersionId] = new Dictionary <string, Provider>();
            }

            providerVersion.Providers = _providers[providerVersion.ProviderVersionId].Values;
        }
 public static string GetProviderClassName(ProviderVersion version)
 {
     return Dictionary[version];
 }
Example #7
0
 public static string GetProviderClassName(ProviderVersion version)
 {
     return(Dictionary[version]);
 }
        public void GivenTheFollowingProviderVersionExistsInTheProvidersService(Table table)
        {
            ProviderVersion providerVersion = table.CreateInstance <ProviderVersion>();

            _providersStepContext.EmulatedClient.AddProviderVersion(providerVersion);
        }
Example #9
0
        public override async Task Process(Message message)
        {
            Guard.ArgumentNotNull(message, nameof(message));

            string specificationId = message.GetUserProperty <string>(SpecificationId);

            string scopedProviderSummariesCountCacheKey = $"{CacheKeys.ScopedProviderSummariesCount}{specificationId}";
            string cacheKeyScopedListCacheKey           = $"{CacheKeys.ScopedProviderSummariesPrefix}{specificationId}";

            SpecificationSummary specificationSummary = await GetSpecificationSummary(specificationId);

            string providerVersionId = specificationSummary?.ProviderVersionId;

            if (string.IsNullOrWhiteSpace(providerVersionId))
            {
                return;
            }

            ProviderVersion providerVersion = await _providerVersionService.GetProvidersByVersion(providerVersionId);

            if (providerVersion == null)
            {
                return;
            }

            IEnumerable <Provider> sourceProviders = providerVersion.Providers;

            if (specificationSummary.ProviderSource == ProviderSource.CFS)
            {
                HashSet <string> scopedProviderIds = (await GetScopedProviderIdsBySpecification(specificationId)).ToHashSet();

                sourceProviders = sourceProviders.Where(_ => scopedProviderIds.Contains(_.ProviderId));
            }

            IEnumerable <ProviderSummary> providerSummaries = sourceProviders
                                                              .Select(x => new ProviderSummary
            {
                Name = x.Name,
                Id   = x.ProviderId,
                ProviderProfileIdType = x.ProviderProfileIdType,
                UKPRN                         = x.UKPRN,
                URN                           = x.URN,
                Authority                     = x.Authority,
                UPIN                          = x.UPIN,
                ProviderSubType               = x.ProviderSubType,
                EstablishmentNumber           = x.EstablishmentNumber,
                ProviderType                  = x.ProviderType,
                DateOpened                    = x.DateOpened,
                DateClosed                    = x.DateClosed,
                LACode                        = x.LACode,
                CrmAccountId                  = x.CrmAccountId,
                LegalName                     = x.LegalName,
                NavVendorNo                   = x.NavVendorNo,
                DfeEstablishmentNumber        = x.DfeEstablishmentNumber,
                Status                        = x.Status,
                PhaseOfEducation              = x.PhaseOfEducation,
                ReasonEstablishmentClosed     = x.ReasonEstablishmentClosed,
                ReasonEstablishmentOpened     = x.ReasonEstablishmentOpened,
                Successor                     = x.Successor,
                TrustStatus                   = x.TrustStatus,
                TrustName                     = x.TrustName,
                TrustCode                     = x.TrustCode,
                Town                          = x.Town,
                Postcode                      = x.Postcode,
                CompaniesHouseNumber          = x.CompaniesHouseNumber,
                GroupIdNumber                 = x.GroupIdNumber,
                RscRegionName                 = x.RscRegionName,
                RscRegionCode                 = x.RscRegionCode,
                GovernmentOfficeRegionName    = x.GovernmentOfficeRegionName,
                GovernmentOfficeRegionCode    = x.GovernmentOfficeRegionCode,
                DistrictCode                  = x.DistrictCode,
                DistrictName                  = x.DistrictName,
                WardName                      = x.WardName,
                WardCode                      = x.WardCode,
                CensusWardCode                = x.CensusWardCode,
                CensusWardName                = x.CensusWardName,
                MiddleSuperOutputAreaCode     = x.MiddleSuperOutputAreaCode,
                MiddleSuperOutputAreaName     = x.MiddleSuperOutputAreaName,
                LowerSuperOutputAreaCode      = x.LowerSuperOutputAreaCode,
                LowerSuperOutputAreaName      = x.LowerSuperOutputAreaName,
                ParliamentaryConstituencyCode = x.ParliamentaryConstituencyCode,
                ParliamentaryConstituencyName = x.ParliamentaryConstituencyName,
                CountryCode                   = x.CountryCode,
                CountryName                   = x.CountryName,
                LocalGovernmentGroupTypeCode  = x.LocalGovernmentGroupTypeCode,
                LocalGovernmentGroupTypeName  = x.LocalGovernmentGroupTypeName,
                Street                        = x.Street,
                Locality                      = x.Locality,
                Address3                      = x.Address3,
                PaymentOrganisationIdentifier = x.PaymentOrganisationIdentifier,
                PaymentOrganisationName       = x.PaymentOrganisationName
            });

            await _cachePolicy.ExecuteAsync(() => _cacheProvider.KeyDeleteAsync <ProviderSummary>(cacheKeyScopedListCacheKey));

            // Batch to get around redis timeouts
            foreach (IEnumerable <ProviderSummary> batch in providerSummaries.ToBatches(1000))
            {
                // Create list is an upsert into the redis list
                await _cachePolicy.ExecuteAsync(() => _cacheProvider.CreateListAsync(batch, cacheKeyScopedListCacheKey));

                await _cachePolicy.ExecuteAsync(() => _cacheProvider.SetExpiry <ProviderSummary>(cacheKeyScopedListCacheKey, DateTime.UtcNow.AddDays(7)));
            }

            await _cachePolicy.ExecuteAsync(() =>
                                            _cacheProvider.SetAsync(scopedProviderSummariesCountCacheKey,
                                                                    providerSummaries.Count().ToString(), TimeSpan.FromDays(7), true));

            string filesystemCacheKey = $"{CacheKeys.ScopedProviderSummariesFilesystemKeyPrefix}{specificationId}";
            await _cachePolicy.ExecuteAsync(() => _cacheProvider.KeyDeleteAsync <string>(filesystemCacheKey));
        }