diff --git a/package.json b/package.json index bd158ae1e..6f4078a63 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@angular/router": "^14.3.0", "@ng-apimock/core": "^3.11.0", "@ngxs/store": "^3.8.1", - "@sovity.de/edc-client": "0.20240805.72446-main-4f0ae71b", + "@sovity.de/edc-client": "0.20240912.74124-main-0ae66c2d", "clean-deep": "^3.4.0", "date-fns": "^2.30.0", "date-fns-tz": "^2.0.1", diff --git a/src/app/core/services/api/edc-api.service.ts b/src/app/core/services/api/edc-api.service.ts index 122f9ff88..2575fb157 100644 --- a/src/app/core/services/api/edc-api.service.ts +++ b/src/app/core/services/api/edc-api.service.ts @@ -8,6 +8,7 @@ import { ContractDefinitionPage, ContractDefinitionRequest, ContractNegotiationRequest, + CreateDataOfferRequest, DashboardPage, EdcClient, GetContractAgreementPageRequest, @@ -129,6 +130,14 @@ export class EdcApiService { ); } + createDataOffer( + dataOfferCreationRequest: CreateDataOfferRequest, + ): Observable { + return toObservable(() => + this.edcClient.uiApi.createDataOffer(dataOfferCreationRequest), + ); + } + getCatalogPageDataOffers( connectorEndpoint: string, ): Observable { diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/data-offer-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/data-offer-fake-service.ts new file mode 100644 index 000000000..806efac85 --- /dev/null +++ b/src/app/core/services/api/fake-backend/connector-fake-impl/data-offer-fake-service.ts @@ -0,0 +1,16 @@ +import {DataOfferCreationRequest, IdResponseDto} from '@sovity.de/edc-client'; +import {createAsset} from './asset-fake-service'; +import {createPolicyDefinitionV2} from './policy-definition-fake-service'; + +export const createDataOffer = ( + request: DataOfferCreationRequest, +): IdResponseDto => { + createAsset(request.uiAssetCreateRequest); + createPolicyDefinitionV2({ + policyDefinitionId: request.policy, + expression: request.uiPolicyExpression!, + }); + // createContractDefinition(); + + return {id: 'test-id', lastUpdatedDate: new Date()}; +}; diff --git a/src/app/core/services/api/fake-backend/edc-fake-backend.ts b/src/app/core/services/api/fake-backend/edc-fake-backend.ts index 305ab99fe..57a129c7c 100644 --- a/src/app/core/services/api/fake-backend/edc-fake-backend.ts +++ b/src/app/core/services/api/fake-backend/edc-fake-backend.ts @@ -8,6 +8,7 @@ import { ContractNegotiationRequestFromJSON, ContractTerminationRequestFromJSON, DashboardPageToJSON, + DataOfferCreationRequestFromJSON, FetchAPI, IdAvailabilityResponseToJSON, IdResponseDtoToJSON, @@ -46,6 +47,7 @@ import { } from './connector-fake-impl/contract-negotiation-fake-service'; import {initiateContractTermination} from './connector-fake-impl/contract-termination-fake-service'; import {dashboardPage} from './connector-fake-impl/dashboard-fake-service'; +import {createDataOffer} from './connector-fake-impl/data-offer-fake-service'; import {connectorLimits} from './connector-fake-impl/ee-fake-service'; import { createPolicyDefinition, @@ -194,8 +196,10 @@ export const EDC_FAKE_BACKEND: FetchAPI = async ( .url('ui/pages/contract-agreement-page/*') .on('GET', (contractAgreementId: String) => { return ok( - contractAgreementPage().contractAgreements - .find( (contractAgreement) => contractAgreement.contractAgreementId === contractAgreementId) + contractAgreementPage().contractAgreements.find( + (contractAgreement) => + contractAgreement.contractAgreementId === contractAgreementId, + ), ); }) @@ -234,6 +238,12 @@ export const EDC_FAKE_BACKEND: FetchAPI = async ( return ok(ConnectorLimitsToJSON(limits)); }) + .url('ui/pages/create-data-offer') + .on('POST', () => { + const response = createDataOffer(DataOfferCreationRequestFromJSON(body)); + return ok(IdResponseDtoToJSON(response)); + }) + .url('ui/pages/data-offer-page/validate-asset-id/*') .on('GET', (assetId) => { const response = assetIdAvailable(assetId); diff --git a/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.ts b/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.ts index f5896dff2..bd4b5c2a0 100644 --- a/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.ts +++ b/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.ts @@ -1,24 +1,22 @@ import {Component, OnInit} from '@angular/core'; import {ActivatedRoute, Router} from '@angular/router'; -import {EMPTY, Observable, catchError, concat, finalize, tap} from 'rxjs'; +import {EMPTY, Observable, catchError, finalize, tap} from 'rxjs'; import { + DataOfferCreationRequestPolicyEnum, IdResponseDto, UiAssetEditRequest, - UiCriterionLiteralType, } from '@sovity.de/edc-client'; import {AssetAdvancedFormBuilder} from 'src/app/component-library/edit-asset-form/edit-asset-form/form/asset-advanced-form-builder'; import {AssetDatasourceFormBuilder} from 'src/app/component-library/edit-asset-form/edit-asset-form/form/asset-datasource-form-builder'; import {AssetGeneralFormBuilder} from 'src/app/component-library/edit-asset-form/edit-asset-form/form/asset-general-form-builder'; import {EditAssetForm} from 'src/app/component-library/edit-asset-form/edit-asset-form/form/edit-asset-form'; import {EditAssetFormInitializer} from 'src/app/component-library/edit-asset-form/edit-asset-form/form/edit-asset-form-initializer'; -import {ALWAYS_TRUE_POLICY_ID} from 'src/app/component-library/edit-asset-form/edit-asset-form/form/model/always-true-policy-id'; import {EditAssetFormValue} from 'src/app/component-library/edit-asset-form/edit-asset-form/form/model/edit-asset-form-model'; import {ExpressionFormControls} from 'src/app/component-library/policy-editor/editor/expression-form-controls'; import {ExpressionFormHandler} from 'src/app/component-library/policy-editor/editor/expression-form-handler'; import {EdcApiService} from 'src/app/core/services/api/edc-api.service'; import {AssetRequestBuilder} from 'src/app/core/services/asset-request-builder'; import {AssetService} from 'src/app/core/services/asset.service'; -import {AssetProperty} from 'src/app/core/services/models/asset-properties'; import {Fetched} from 'src/app/core/services/models/fetched'; import {UiAssetMapped} from 'src/app/core/services/models/ui-asset-mapped'; import {NotificationService} from 'src/app/core/services/notification.service'; @@ -130,21 +128,30 @@ export class AssetEditPageComponent implements OnInit { this.assetRequestBuilder.buildAssetCreateRequest(formValue); if (publishMode === 'PUBLISH_UNRESTRICTED') { - return concat( - this.edcApiService.createAsset(assetCreateRequest), - this.createContractDefinition(assetId, ALWAYS_TRUE_POLICY_ID), - ); + return this.edcApiService.createDataOffer({ + dataOfferCreationRequest: { + uiAssetCreateRequest: assetCreateRequest, + policy: DataOfferCreationRequestPolicyEnum.PublishUnrestricted, + uiPolicyExpression: + this.expressionFormHandler.toUiPolicyExpression(), + }, + }); } else if (publishMode === 'PUBLISH_RESTRICTED') { - return concat( - this.edcApiService.createAsset(assetCreateRequest), - this.edcApiService.createPolicyDefinitionV2({ - policyDefinitionId: assetId, - expression: this.expressionFormHandler.toUiPolicyExpression(), - }), - this.createContractDefinition(assetId, assetId), - ); + return this.edcApiService.createDataOffer({ + dataOfferCreationRequest: { + uiAssetCreateRequest: assetCreateRequest, + policy: DataOfferCreationRequestPolicyEnum.PublishRestricted, + uiPolicyExpression: + this.expressionFormHandler.toUiPolicyExpression(), + }, + }); } else { - return this.edcApiService.createAsset(assetCreateRequest); + return this.edcApiService.createDataOffer({ + dataOfferCreationRequest: { + uiAssetCreateRequest: assetCreateRequest, + policy: DataOfferCreationRequestPolicyEnum.DontPublish, + }, + }); } } @@ -164,25 +171,4 @@ export class AssetEditPageComponent implements OnInit { throw new Error(`Unsupported mode: ${mode}`); } - - private createContractDefinition( - assetId: string, - policyId: string, - ): Observable { - return this.edcApiService.createContractDefinition({ - accessPolicyId: policyId, - contractPolicyId: policyId, - contractDefinitionId: assetId, - assetSelector: [ - { - operandLeft: AssetProperty.id, - operator: 'IN', - operandRight: { - type: UiCriterionLiteralType.ValueList, - valueList: [assetId], - }, - }, - ], - }); - } }