From 9d735c582cd4308d40e8100f66729fc23f8ce464 Mon Sep 17 00:00:00 2001 From: Ivan Li Date: Sun, 27 Jun 2021 10:32:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(pipelines):=20=E6=9B=B4=E6=96=B0=E6=97=B6?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=88=A4=E6=96=AD=E6=97=B6=E8=AF=AF=E5=88=A4?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commons/services/base-db.service.ts | 14 +++++++++++++ .../models/work-unit-metadata.model.ts | 3 ++- src/pipelines/dtos/update-pipeline.input.ts | 6 ++++-- src/pipelines/pipelines.resolver.ts | 4 ++-- src/pipelines/pipelines.service.ts | 20 ++++++++++--------- 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/commons/services/base-db.service.ts b/src/commons/services/base-db.service.ts index ab52e02..9235755 100644 --- a/src/commons/services/base-db.service.ts +++ b/src/commons/services/base-db.service.ts @@ -53,8 +53,22 @@ export class BaseDbService extends TypeormHelper { async isDuplicateEntityForUpdate( id: string, dto: Partial, + extendsFields?: Array, + ): Promise; + async isDuplicateEntityForUpdate( + old: Entity, + dto: Partial, + extendsFields?: Array, + ): Promise; + async isDuplicateEntityForUpdate( + id: string | Entity, + dto: Partial, extendsFields: Array = [], ): Promise { + if (typeof id !== 'string') { + dto = Object.assign({}, id, dto); + id = id.id; + } const qb = this.repository.createQueryBuilder('entity'); const compareFields = this.getCompareFields(dto, [ ...this.uniqueFields, diff --git a/src/pipeline-tasks/models/work-unit-metadata.model.ts b/src/pipeline-tasks/models/work-unit-metadata.model.ts index 1659e11..c95afaf 100644 --- a/src/pipeline-tasks/models/work-unit-metadata.model.ts +++ b/src/pipeline-tasks/models/work-unit-metadata.model.ts @@ -1,9 +1,10 @@ -import { InputType, ObjectType } from '@nestjs/graphql'; +import { Field, InputType, Int, ObjectType } from '@nestjs/graphql'; import { WorkUnit } from './work-unit.model'; @InputType('WorkUnitMetadataInput') @ObjectType() export class WorkUnitMetadata { + @Field(() => Int) version = 1; units: WorkUnit[]; } diff --git a/src/pipelines/dtos/update-pipeline.input.ts b/src/pipelines/dtos/update-pipeline.input.ts index 6e9772f..d6359f3 100644 --- a/src/pipelines/dtos/update-pipeline.input.ts +++ b/src/pipelines/dtos/update-pipeline.input.ts @@ -1,7 +1,9 @@ -import { InputType } from '@nestjs/graphql'; +import { InputType, OmitType } from '@nestjs/graphql'; import { CreatePipelineInput } from './create-pipeline.input'; @InputType() -export class UpdatePipelineInput extends CreatePipelineInput { +export class UpdatePipelineInput extends OmitType(CreatePipelineInput, [ + 'projectId', +]) { id: string; } diff --git a/src/pipelines/pipelines.resolver.ts b/src/pipelines/pipelines.resolver.ts index 4298fc2..43ef7ad 100644 --- a/src/pipelines/pipelines.resolver.ts +++ b/src/pipelines/pipelines.resolver.ts @@ -21,14 +21,14 @@ export class PipelinesResolver { @Mutation(() => Pipeline) async createPipeline( @Args('pipeline', { type: () => CreatePipelineInput }) - dto: UpdatePipelineInput, + dto: CreatePipelineInput, ) { return await this.service.create(dto); } @Mutation(() => Pipeline) async updatePipeline( - @Args('Pipeline', { type: () => UpdatePipelineInput }) + @Args('pipeline', { type: () => UpdatePipelineInput }) dto: UpdatePipelineInput, ) { const tmp = await this.service.update(dto); diff --git a/src/pipelines/pipelines.service.ts b/src/pipelines/pipelines.service.ts index 406e790..14dcaef 100644 --- a/src/pipelines/pipelines.service.ts +++ b/src/pipelines/pipelines.service.ts @@ -14,6 +14,8 @@ import { import { AmqpConnection } from '@golevelup/nestjs-rabbitmq'; import { Commit } from '../repos/dtos/log-list.model'; import { getAppInstanceRouteKey } from '../commons/utils/rabbit-mq'; +import { ApplicationException } from '../commons/exceptions/application.exception'; +import { plainToClass } from 'class-transformer'; @Injectable() export class PipelinesService extends BaseDbService { @@ -42,8 +44,8 @@ export class PipelinesService extends BaseDbService { } async update(dto: UpdatePipelineInput) { - await this.isDuplicateEntityForUpdate(dto.id, dto); const old = await this.findOne(dto.id); + await this.isDuplicateEntityForUpdate(old, dto); return await this.repository.save(this.repository.merge(old, dto)); } @@ -60,17 +62,17 @@ export class PipelinesService extends BaseDbService { } async listCommits(pipeline: Pipeline) { return await this.amqpConnection - .request({ + .request<[Error, Commit[]]>({ exchange: EXCHANGE_REPO, routingKey: ROUTE_LIST_COMMITS, payload: pipeline, - timeout: 10_000, + timeout: 30_000, }) - .then((list) => - list.map((item) => { - item.date = new Date(item.date); - return item; - }), - ); + .then(([error, list]) => { + if (error) { + throw new ApplicationException(error); + } + return plainToClass(Commit, list); + }); } }