From 64affb5f5447884ff133701b1f7af45edea7dfb7 Mon Sep 17 00:00:00 2001 From: Dmitriy Borzenko Date: Wed, 2 Aug 2023 16:48:01 +0300 Subject: [PATCH] Integrate new mutation 'updateReadme'. --- src/app/api/dataset.api.spec.ts | 19 +++--- src/app/api/dataset.api.ts | 24 ++++++- .../gql/create-dataset/update-readme.graphql | 15 +++++ src/app/api/kamu.graphql.interface.ts | 57 +++++++++++++++++ .../dataset-create.service.spec.ts | 18 +++--- .../dataset-create/dataset-create.service.ts | 63 +++++++++++++++---- .../engine-select/engine-select.component.ts | 5 +- .../readme-section.component.ts | 9 +-- src/app/search/mock.data.ts | 10 +-- .../services/templates-yaml-events.service.ts | 16 ----- 10 files changed, 174 insertions(+), 62 deletions(-) create mode 100644 src/app/api/gql/create-dataset/update-readme.graphql diff --git a/src/app/api/dataset.api.spec.ts b/src/app/api/dataset.api.spec.ts index 60a926428..734f237bf 100644 --- a/src/app/api/dataset.api.spec.ts +++ b/src/app/api/dataset.api.spec.ts @@ -19,7 +19,7 @@ import { import { DatasetApi } from "./dataset.api"; import { CommitEventToDatasetDocument, - CommitEventToDatasetQuery, + CommitEventToDatasetMutation, DatasetsByAccountNameDocument, DatasetsByAccountNameQuery, GetDatasetDataSqlRunDocument, @@ -190,16 +190,17 @@ describe("DatasetApi", () => { it("should commit event", () => { service .commitEvent({ - accountName: TEST_USER_NAME, - datasetName: TEST_DATASET_NAME, + datasetId: "mockId", event: "mock event", }) - .subscribe((res: CommitEventToDatasetQuery) => { - expect( - res.datasets.byOwnerAndName?.metadata.chain.commitEvent - .__typename, - ).toEqual("CommitResultSuccess"); - }); + .subscribe( + (res: CommitEventToDatasetMutation | null | undefined) => { + expect( + res?.datasets.byId?.metadata.chain.commitEvent + .__typename, + ).toEqual("CommitResultSuccess"); + }, + ); const op = controller.expectOne(CommitEventToDatasetDocument); expect(op.operation.variables.accountName).toEqual(TEST_USER_NAME); diff --git a/src/app/api/dataset.api.ts b/src/app/api/dataset.api.ts index 32d9a8ad1..93228f8e7 100644 --- a/src/app/api/dataset.api.ts +++ b/src/app/api/dataset.api.ts @@ -9,6 +9,8 @@ import { DatasetKind, GetDatasetSchemaGQL, GetDatasetSchemaQuery, + UpdateReadmeGQL, + UpdateReadmeMutation, } from "src/app/api/kamu.graphql.interface"; import AppValues from "src/app/common/app.values"; import { ApolloQueryResult } from "@apollo/client/core"; @@ -46,8 +48,9 @@ export class DatasetApi { private datasetByAccountAndDatasetNameGQL: DatasetByAccountAndDatasetNameGQL, private createEmptyDatasetGQL: CreateEmptyDatasetGQL, private createDatasetFromSnapshotGQL: CreateDatasetFromSnapshotGQL, - private commitEventToDataset: CommitEventToDatasetGQL, + private commitEventToDatasetGQL: CommitEventToDatasetGQL, private datasetSchemaGQL: GetDatasetSchemaGQL, + private updateReadmeGQL: UpdateReadmeGQL, ) {} public getDatasetMainData(params: { @@ -224,7 +227,7 @@ export class DatasetApi { datasetId: string; event: string; }): Observable { - return this.commitEventToDataset + return this.commitEventToDatasetGQL .mutate({ datasetId: params.datasetId, event: params.event, @@ -236,4 +239,21 @@ export class DatasetApi { }), ); } + + public updateReadme( + datasetId: string, + content: string, + ): Observable { + return this.updateReadmeGQL + .mutate({ + datasetId, + content, + }) + .pipe( + first(), + map((result: MutationResult) => { + return result.data; + }), + ); + } } diff --git a/src/app/api/gql/create-dataset/update-readme.graphql b/src/app/api/gql/create-dataset/update-readme.graphql new file mode 100644 index 000000000..4e4d9b685 --- /dev/null +++ b/src/app/api/gql/create-dataset/update-readme.graphql @@ -0,0 +1,15 @@ +mutation updateReadme($datasetId: DatasetID!, $content: String!) { + datasets { + byId(datasetId: $datasetId) { + metadata { + updateReadme(content: $content) { + __typename + message + ... on CommitResultSuccess { + oldHead + } + } + } + } + } +} diff --git a/src/app/api/kamu.graphql.interface.ts b/src/app/api/kamu.graphql.interface.ts index e9dd4baca..45057e2bc 100644 --- a/src/app/api/kamu.graphql.interface.ts +++ b/src/app/api/kamu.graphql.interface.ts @@ -1153,6 +1153,32 @@ export type CreateDatasetFromSnapshotMutation = { }; }; +export type UpdateReadmeMutationVariables = Exact<{ + datasetId: Scalars["DatasetID"]; + content: Scalars["String"]; +}>; + +export type UpdateReadmeMutation = { + __typename?: "Mutation"; + datasets: { + __typename?: "DatasetsMut"; + byId?: { + __typename?: "DatasetMut"; + metadata: { + __typename?: "DatasetMetadataMut"; + updateReadme: + | { __typename: "CommitResultAppendError"; message: string } + | { + __typename: "CommitResultSuccess"; + oldHead?: any | null; + message: string; + } + | { __typename: "NoChanges"; message: string }; + }; + } | null; + }; +}; + export type DatasetByAccountAndDatasetNameQueryVariables = Exact<{ accountName: Scalars["AccountName"]; datasetName: Scalars["DatasetName"]; @@ -2620,6 +2646,37 @@ export class CreateDatasetFromSnapshotGQL extends Apollo.Mutation< super(apollo); } } +export const UpdateReadmeDocument = gql` + mutation updateReadme($datasetId: DatasetID!, $content: String!) { + datasets { + byId(datasetId: $datasetId) { + metadata { + updateReadme(content: $content) { + __typename + message + ... on CommitResultSuccess { + oldHead + } + } + } + } + } + } +`; + +@Injectable({ + providedIn: "root", +}) +export class UpdateReadmeGQL extends Apollo.Mutation< + UpdateReadmeMutation, + UpdateReadmeMutationVariables +> { + document = UpdateReadmeDocument; + + constructor(apollo: Apollo.Apollo) { + super(apollo); + } +} export const DatasetByAccountAndDatasetNameDocument = gql` query datasetByAccountAndDatasetName( $accountName: AccountName! diff --git a/src/app/dataset-create/dataset-create.service.spec.ts b/src/app/dataset-create/dataset-create.service.spec.ts index a0e5a964f..cbc3071c5 100644 --- a/src/app/dataset-create/dataset-create.service.spec.ts +++ b/src/app/dataset-create/dataset-create.service.spec.ts @@ -1,4 +1,7 @@ -import { CreateDatasetFromSnapshotQuery } from "./../api/kamu.graphql.interface"; +import { + CreateDatasetFromSnapshotMutation, + CreateEmptyDatasetMutation, +} from "./../api/kamu.graphql.interface"; import { mockDatasetBasicsFragment, mockDatasetInfo, @@ -7,10 +10,7 @@ import { TestBed } from "@angular/core/testing"; import { Apollo } from "apollo-angular"; import { of } from "rxjs"; import { DatasetApi } from "../api/dataset.api"; -import { - CreateEmptyDatasetQuery, - DatasetKind, -} from "../api/kamu.graphql.interface"; +import { DatasetKind } from "../api/kamu.graphql.interface"; import { DatasetViewTypeEnum } from "../dataset-view/dataset-view.interface"; import { NavigationService } from "../services/navigation.service"; import { AppDatasetCreateService } from "./dataset-create.service"; @@ -34,7 +34,7 @@ describe("AppDatasetCreateService", () => { }); it("should be create empty dataset with success", () => { - const mockResponseSuccess: CreateEmptyDatasetQuery = { + const mockResponseSuccess: CreateEmptyDatasetMutation = { datasets: { createEmpty: { message: "Success", @@ -66,7 +66,7 @@ describe("AppDatasetCreateService", () => { }); it("should be create empty dataset with error", () => { - const mockResponseError: CreateEmptyDatasetQuery = { + const mockResponseError: CreateEmptyDatasetMutation = { datasets: { createEmpty: { message: "Fail", @@ -101,7 +101,7 @@ describe("AppDatasetCreateService", () => { }); it("should be create dataset using shapshot with success", () => { - const mockResponseSuccess: CreateDatasetFromSnapshotQuery = { + const mockResponseSuccess: CreateDatasetFromSnapshotMutation = { datasets: { createFromSnapshot: { message: "Success", @@ -135,7 +135,7 @@ describe("AppDatasetCreateService", () => { }); it("should be create dataset using shapshot with error", () => { - const mockResponseError: CreateDatasetFromSnapshotQuery = { + const mockResponseError: CreateDatasetFromSnapshotMutation = { datasets: { createFromSnapshot: { message: "Fail", diff --git a/src/app/dataset-create/dataset-create.service.ts b/src/app/dataset-create/dataset-create.service.ts index feca38496..bfca94f21 100644 --- a/src/app/dataset-create/dataset-create.service.ts +++ b/src/app/dataset-create/dataset-create.service.ts @@ -3,6 +3,7 @@ import { CreateDatasetFromSnapshotMutation, CreateEmptyDatasetMutation, DatasetByAccountAndDatasetNameQuery, + UpdateReadmeMutation, } from "./../api/kamu.graphql.interface"; import { Observable, Subject } from "rxjs"; import { DatasetApi } from "src/app/api/dataset.api"; @@ -147,19 +148,59 @@ export class AppDatasetCreateService { data.datasets.byId.metadata.chain.commitEvent.message, ); } else { - this.datasetService - .requestDatasetMainData({ - accountName, - datasetName, - }) - .subscribe(); - this.navigationService.navigateToDatasetView({ - accountName, - datasetName, - tab: DatasetViewTypeEnum.Overview, - }); + this.successActions(accountName, datasetName); + } + }), + ); + } + + public updateReadme( + accountName: string, + datasetName: string, + content: string, + ): Observable { + const key = `${accountName}${datasetName}`; + let observable: Observable; + if (this.cache.has(key)) { + observable = this.datasetApi.updateReadme( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.cache.get(key)!, + content, + ); + } else { + observable = this.datasetApi + .getDatasetInfoByAccountAndDatasetName(accountName, datasetName) + .pipe( + switchMap((x: DatasetByAccountAndDatasetNameQuery) => { + const id = x.datasets.byOwnerAndName?.id as string; + this.cache.set(key, id); + return this.datasetApi.updateReadme(id, content); + }), + ); + } + return observable.pipe( + map((data: UpdateReadmeMutation | null | undefined) => { + if ( + data?.datasets.byId?.metadata.updateReadme.__typename === + "CommitResultSuccess" + ) { + this.successActions(accountName, datasetName); } }), ); } + + private successActions(accountName: string, datasetName: string): void { + this.datasetService + .requestDatasetMainData({ + accountName, + datasetName, + }) + .subscribe(); + this.navigationService.navigateToDatasetView({ + accountName, + datasetName, + tab: DatasetViewTypeEnum.Overview, + }); + } } diff --git a/src/app/dataset-view/additional-components/metadata-component/components/set-transform/components/engine-section/components/engine-select/engine-select.component.ts b/src/app/dataset-view/additional-components/metadata-component/components/set-transform/components/engine-section/components/engine-select/engine-select.component.ts index d10aad548..11ab9a94c 100644 --- a/src/app/dataset-view/additional-components/metadata-component/components/set-transform/components/engine-section/components/engine-select/engine-select.component.ts +++ b/src/app/dataset-view/additional-components/metadata-component/components/set-transform/components/engine-section/components/engine-select/engine-select.component.ts @@ -49,7 +49,10 @@ export class EngineSelectComponent implements OnInit { } } public get value(): string { - return DataHelpers.descriptionForEngine(this.engine).label ?? ""; + return ( + DataHelpers.descriptionForEngine(this.engine.toLowerCase()).label ?? + "" + ); } public getLogo(name: string): EventPropertyLogo { diff --git a/src/app/dataset-view/additional-components/overview-component/components/readme-section/readme-section.component.ts b/src/app/dataset-view/additional-components/overview-component/components/readme-section/readme-section.component.ts index b2652b73b..5b7855192 100644 --- a/src/app/dataset-view/additional-components/overview-component/components/readme-section/readme-section.component.ts +++ b/src/app/dataset-view/additional-components/overview-component/components/readme-section/readme-section.component.ts @@ -15,7 +15,6 @@ import { AppDatasetCreateService } from "src/app/dataset-create/dataset-create.s import { OverviewDataUpdate } from "src/app/dataset-view/dataset.subscriptions.interface"; import { AppDatasetSubscriptionsService } from "src/app/dataset-view/dataset.subscriptions.service"; import { DatasetSchema, DataRow } from "src/app/interface/dataset.interface"; -import { TemplatesYamlEventsService } from "src/app/services/templates-yaml-events.service"; @Component({ selector: "app-readme-section", @@ -42,9 +41,7 @@ export class ReadmeSectionComponent extends BaseComponent implements OnInit { constructor( private appDatasetSubsService: AppDatasetSubscriptionsService, - private createDatasetService: AppDatasetCreateService, - private yamlEventService: TemplatesYamlEventsService, ) { super(); } @@ -78,12 +75,10 @@ export class ReadmeSectionComponent extends BaseComponent implements OnInit { if (this.datasetBasics) this.trackSubscription( this.createDatasetService - .commitEventToDataset( + .updateReadme( this.datasetBasics.owner.name, this.datasetBasics.name as string, - this.yamlEventService.buildYamlSetAttachmentsEvent( - this.readmeState, - ), + this.readmeState, ) .subscribe(() => (this.isMarkdownEditView = false)), ); diff --git a/src/app/search/mock.data.ts b/src/app/search/mock.data.ts index 4dc46775e..9f318feba 100644 --- a/src/app/search/mock.data.ts +++ b/src/app/search/mock.data.ts @@ -1,5 +1,5 @@ import { - CommitEventToDatasetQuery, + CommitEventToDatasetMutation, PageBasedInfo, } from "./../api/kamu.graphql.interface"; import { mockSetVocab } from "./../dataset-block/metadata-block/components/event-details/mock.events"; @@ -763,9 +763,9 @@ export const mockDatasetDataSqlRunInternalErrorResponse: GetDatasetDataSqlRunQue }, }; -export const mockCommitEventResponse: CommitEventToDatasetQuery = { +export const mockCommitEventResponse: CommitEventToDatasetMutation = { datasets: { - byOwnerAndName: { + byId: { metadata: { chain: { commitEvent: { @@ -776,13 +776,9 @@ export const mockCommitEventResponse: CommitEventToDatasetQuery = { newHead: "zW1hgfvGgmdsbrDMhVoBE5TRX2RX4DV2mhh4QgEAeA3fx4Q", }, - __typename: "MetadataChain", }, - __typename: "DatasetMetadata", }, - __typename: "Dataset", }, - __typename: "Datasets", }, }; diff --git a/src/app/services/templates-yaml-events.service.ts b/src/app/services/templates-yaml-events.service.ts index 9cbecb6bc..3f19f27e2 100644 --- a/src/app/services/templates-yaml-events.service.ts +++ b/src/app/services/templates-yaml-events.service.ts @@ -54,22 +54,6 @@ export class TemplatesYamlEventsService { return result; } - public buildYamlSetAttachmentsEvent(data: string): string { - this.initialTemplate.content = { - kind: "setAttachments", - attachments: { - kind: "embedded", - items: [ - { - path: "README.md", - content: data, - }, - ], - }, - }; - return stringify(this.initialTemplate); - } - public buildYamlSetPollingSourceEvent( params: Omit, preprocessStepValue: MaybeNull,