コード例 #1
0
        private async Task <DatasetSpecificationRelationshipViewModel> CreateViewModel(
            DefinitionSpecificationRelationship relationship,
            KeyValuePair <string, int> datasetLatestVersion)
        {
            DatasetSpecificationRelationshipViewModel relationshipViewModel = new DatasetSpecificationRelationshipViewModel
            {
                Id   = relationship.Id,
                Name = relationship.Name,
                RelationshipDescription = relationship.Description,
                IsProviderData          = relationship.IsSetAsProviderData,
                LastUpdatedAuthor       = relationship.Author,
                LastUpdatedDate         = relationship.LastUpdated
            };

            if (relationship.DatasetVersion != null)
            {
                Dataset dataset = await _datasetRepository.GetDatasetByDatasetId(relationship.DatasetVersion.Id);

                if (dataset != null)
                {
                    relationshipViewModel.DatasetId       = relationship.DatasetVersion.Id;
                    relationshipViewModel.DatasetName     = dataset.Name;
                    relationshipViewModel.Version         = relationship.DatasetVersion.Version;
                    relationshipViewModel.IsLatestVersion = relationship.DatasetVersion.Version == datasetLatestVersion.Value;
                }
                else
                {
                    _logger.Warning($"Dataset could not be found for Id {relationship.DatasetVersion.Id}");
                }
            }

            if (relationship.DatasetDefinition != null)
            {
                string definitionId = relationship.DatasetDefinition.Id;

                Models.Datasets.Schema.DatasetDefinition definition = await _datasetRepository.GetDatasetDefinition(definitionId);

                if (definition != null)
                {
                    relationshipViewModel.Definition = new DatasetDefinitionViewModel
                    {
                        Id          = definition.Id,
                        Name        = definition.Name,
                        Description = definition.Description
                    };
                }
            }

            return(relationshipViewModel);
        }
        public async Task Run(
            SpecificationVersion specificationVersion,
            Reference user,
            string correlationId,
            bool triggerProviderSnapshotDataLoadJob,
            bool triggerCalculationEngineRunJob)
        {
            string    errorMessage   = $"Unable to queue ProviderSnapshotDataLoadJob for specification - {specificationVersion.SpecificationId}";
            string    triggerMessage = $"Assigning ProviderVersionId for specification: {specificationVersion.SpecificationId}";
            Reference fundingStream  = specificationVersion.FundingStreams.FirstOrDefault();

            if (fundingStream != null && (specificationVersion.ProviderSource == Models.Providers.ProviderSource.FDZ || triggerProviderSnapshotDataLoadJob))
            {
                Job createProviderSnapshotDataLoadJob = await CreateJob(errorMessage,
                                                                        NewJobCreateModel(specificationVersion.SpecificationId,
                                                                                          triggerMessage,
                                                                                          JobConstants.DefinitionNames.ProviderSnapshotDataLoadJob,
                                                                                          correlationId,
                                                                                          user,
                                                                                          new Dictionary <string, string>
                {
                    { "specification-id", specificationVersion.SpecificationId },
                    { "fundingstream-id", fundingStream.Id },
                    { "providerSanpshot-id", specificationVersion.ProviderSnapshotId?.ToString() },
                    { "disableQueueCalculationJob", (!triggerCalculationEngineRunJob).ToString() }
                }));

                GuardAgainstNullJob(createProviderSnapshotDataLoadJob, errorMessage);
            }

            if (specificationVersion.ProviderSource == Models.Providers.ProviderSource.CFS && !string.IsNullOrWhiteSpace(specificationVersion.ProviderVersionId))
            {
                ApiResponse <IEnumerable <DatasetSpecificationRelationshipViewModel> > response =
                    await _datasetsPolicy.ExecuteAsync(() => _datasets.GetRelationshipsBySpecificationId(specificationVersion.SpecificationId));

                DatasetSpecificationRelationshipViewModel providerRelationship = response?.Content?.Where(_ => _.IsProviderData).FirstOrDefault();

                if (providerRelationship != null)
                {
                    ApiResponse <DatasetViewModel> datasetResponse =
                        await _datasetsPolicy.ExecuteAsync(() => _datasets.GetDatasetByDatasetId(providerRelationship.DatasetId));

                    if (datasetResponse?.StatusCode.IsSuccess() == false || datasetResponse?.Content == null)
                    {
                        errorMessage = $"Unable to retrieve dataset for specification {specificationVersion.SpecificationId}";
                        _logger.Error(errorMessage);
                        throw new Exception(errorMessage);
                    }

                    errorMessage = $"Unable to queue MapScopedDatasetJob for specification - {specificationVersion.SpecificationId}";
                    Job mapScopedDatasetJob = await CreateJob(errorMessage,
                                                              NewJobCreateModel(specificationVersion.SpecificationId,
                                                                                triggerMessage,
                                                                                JobConstants.DefinitionNames.MapScopedDatasetJob,
                                                                                correlationId,
                                                                                user,
                                                                                new Dictionary <string, string>
                    {
                        { "specification-id", specificationVersion.SpecificationId },
                        { "provider-cache-key", $"{CacheKeys.ScopedProviderSummariesPrefix}{specificationVersion.SpecificationId}" },
                        { "specification-summary-cache-key", $"{CacheKeys.SpecificationSummaryById}{specificationVersion.SpecificationId}" },
                        { "disableQueueCalculationJob", (!triggerCalculationEngineRunJob).ToString() },
                    }));

                    GuardAgainstNullJob(mapScopedDatasetJob, errorMessage);

                    errorMessage = $"Unable to queue MapDatasetJob for specification - {specificationVersion.SpecificationId}";
                    Job mapDataset = await CreateJob(errorMessage, NewJobCreateModel(specificationVersion.SpecificationId,
                                                                                     triggerMessage,
                                                                                     JobConstants.DefinitionNames.MapDatasetJob,
                                                                                     correlationId,
                                                                                     user,
                                                                                     new Dictionary <string, string>
                    {
                        { "specification-id", specificationVersion.SpecificationId },
                        { "relationship-id", providerRelationship.Id },
                        { "user-id", user?.Id },
                        { "user-name", user?.Name },
                        { "parentJobId", mapScopedDatasetJob.Id },
                        { "disableQueueCalculationJob", (!triggerCalculationEngineRunJob).ToString() },
                    },
                                                                                     mapScopedDatasetJob.Id,
                                                                                     messageBody : JsonConvert.SerializeObject(datasetResponse.Content)));

                    GuardAgainstNullJob(mapDataset, errorMessage);
                }
            }
        }