feat(pipelines): list logs 时提供关联的 tasks 。

This commit is contained in:
Ivan
2021-03-28 19:37:16 +08:00
parent da6bc9a068
commit 032aa89b05
7 changed files with 68 additions and 21 deletions

View File

@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { CommitLogsResolver } from './commit-logs.resolver';
describe('CommitLogsResolver', () => {
let resolver: CommitLogsResolver;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [CommitLogsResolver],
}).compile();
resolver = module.get<CommitLogsResolver>(CommitLogsResolver);
});
it('should be defined', () => {
expect(resolver).toBeDefined();
});
});

View File

@@ -0,0 +1,39 @@
import {
Args,
Info,
Parent,
ResolveField,
Resolver,
Subscription,
} from '@nestjs/graphql';
import { GraphQLResolveInfo } from 'graphql';
import { PipelineTasksService } from '../pipeline-tasks/pipeline-tasks.service';
import { LogFields, LogList } from '../repos/dtos/log-list.model';
import { PipelinesService } from './pipelines.service';
@Resolver(() => LogFields)
export class CommitLogsResolver {
constructor(
private readonly service: PipelinesService,
private readonly taskServices: PipelineTasksService,
) {}
@Subscription(() => LogList, {
resolve: (value) => {
return value;
},
})
async listLogsForPipeline(
@Args('id', { type: () => String }) id: string,
@Info() info: GraphQLResolveInfo,
) {
info.returnType.toString();
const job = await this.service.listLogsForPipeline(id);
return (async function* () {
yield await job.finished();
})();
}
@ResolveField()
async tasks(@Parent() commit: LogFields) {
return await this.taskServices.listTasksByCommitHash(commit.hash);
}
}

View File

@@ -5,6 +5,8 @@ import { TypeOrmModule } from '@nestjs/typeorm';
import { Pipeline } from './pipeline.entity';
import { BullModule } from '@nestjs/bull';
import { LIST_LOGS_TASK } from '../repos/repos.constants';
import { CommitLogsResolver } from './commit-logs.resolver';
import { PipelineTasksModule } from '../pipeline-tasks/pipeline-tasks.module';
@Module({
imports: [
@@ -12,7 +14,8 @@ import { LIST_LOGS_TASK } from '../repos/repos.constants';
BullModule.registerQueue({
name: LIST_LOGS_TASK,
}),
PipelineTasksModule,
],
providers: [PipelinesResolver, PipelinesService],
providers: [PipelinesResolver, PipelinesService, CommitLogsResolver],
})
export class PipelinesModule {}

View File

@@ -1,10 +1,9 @@
import { Args, Mutation, Query, Resolver, Subscription } from '@nestjs/graphql';
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { CreatePipelineInput } from './dtos/create-pipeline.input';
import { UpdatePipelineInput } from './dtos/update-pipeline.input';
import { Pipeline } from './pipeline.entity';
import { PipelinesService } from './pipelines.service';
import { ListPipelineArgs } from './dtos/list-pipelines.args';
import { LogList } from '../repos/dtos/log-list.model';
@Resolver()
export class PipelinesResolver {
@@ -42,16 +41,4 @@ export class PipelinesResolver {
async deletePipeline(@Args('id', { type: () => String }) id: string) {
return await this.service.remove(id);
}
@Subscription(() => LogList, {
resolve: (value) => {
return value;
},
})
async listLogsForPipeline(@Args('id', { type: () => String }) id: string) {
const job = await this.service.listLogsForPipeline(id);
return (async function* () {
yield await job.finished();
})();
}
}