chore: refacto NestJS in modules (#308)
* chore: wip refacto in modules * fix: rollback port * fix: jwt guard in wrong folder * chore: rename folder exception-filter in filters * fix: tests are running * fix: excessive stack depth comparing types * fix: auth issue * chore: move createUser in UserService * fix: test * fix: guards * fix: jwt guard don't handle falsy user
This commit is contained in:
@ -0,0 +1,32 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { PipelineProgressRelationsResolver } from './pipeline-progress-relations.resolver';
|
||||
import { PipelineStageService } from '../services/pipeline-stage.service';
|
||||
import { PipelineService } from '../services/pipeline.service';
|
||||
|
||||
describe('PipelineProgressRelationsResolver', () => {
|
||||
let resolver: PipelineProgressRelationsResolver;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
PipelineProgressRelationsResolver,
|
||||
{
|
||||
provide: PipelineStageService,
|
||||
useValue: {},
|
||||
},
|
||||
{
|
||||
provide: PipelineService,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
resolver = module.get<PipelineProgressRelationsResolver>(
|
||||
PipelineProgressRelationsResolver,
|
||||
);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(resolver).toBeDefined();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,40 @@
|
||||
import * as TypeGraphQL from '@nestjs/graphql';
|
||||
import { PipelineProgress } from 'src/core/@generated/pipeline-progress/pipeline-progress.model';
|
||||
import { PipelineStage } from 'src/core/@generated/pipeline-stage/pipeline-stage.model';
|
||||
import { Pipeline } from 'src/core/@generated/pipeline/pipeline.model';
|
||||
import { PipelineStageService } from '../services/pipeline-stage.service';
|
||||
import { PipelineService } from '../services/pipeline.service';
|
||||
|
||||
@TypeGraphQL.Resolver(() => PipelineProgress)
|
||||
export class PipelineProgressRelationsResolver {
|
||||
constructor(
|
||||
private readonly pipelineStageService: PipelineStageService,
|
||||
private readonly pipelineService: PipelineService,
|
||||
) {}
|
||||
|
||||
@TypeGraphQL.ResolveField(() => PipelineStage, {
|
||||
nullable: false,
|
||||
})
|
||||
async pipelineStage(
|
||||
@TypeGraphQL.Root() pipelineStage: PipelineProgress,
|
||||
): Promise<PipelineStage> {
|
||||
return this.pipelineStageService.findUniqueOrThrow({
|
||||
where: {
|
||||
id: pipelineStage.pipelineStageId,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@TypeGraphQL.ResolveField(() => Pipeline, {
|
||||
nullable: false,
|
||||
})
|
||||
async pipeline(
|
||||
@TypeGraphQL.Root() pipelineStage: PipelineProgress,
|
||||
): Promise<Pipeline> {
|
||||
return this.pipelineService.findUniqueOrThrow({
|
||||
where: {
|
||||
id: pipelineStage.pipelineId,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { PipelineProgressResolver } from './pipeline-progress.resolver';
|
||||
import { PipelineProgressService } from '../services/pipeline-progress.service';
|
||||
|
||||
describe('PipelineProgressResolver', () => {
|
||||
let resolver: PipelineProgressResolver;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
PipelineProgressResolver,
|
||||
{
|
||||
provide: PipelineProgressService,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
resolver = module.get<PipelineProgressResolver>(PipelineProgressResolver);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(resolver).toBeDefined();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,71 @@
|
||||
import { Resolver, Args, Query, Mutation } from '@nestjs/graphql';
|
||||
import { UseGuards } from '@nestjs/common';
|
||||
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
|
||||
import { Workspace } from '../../../core/@generated/workspace/workspace.model';
|
||||
import { AuthWorkspace } from '../../../decorators/auth-workspace.decorator';
|
||||
import { FindManyPipelineProgressArgs } from '../../@generated/pipeline-progress/find-many-pipeline-progress.args';
|
||||
import { PipelineProgress } from '../../@generated/pipeline-progress/pipeline-progress.model';
|
||||
import { UpdateOnePipelineProgressArgs } from '../../@generated/pipeline-progress/update-one-pipeline-progress.args';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { AffectedRows } from '../../@generated/prisma/affected-rows.output';
|
||||
import { DeleteManyPipelineProgressArgs } from '../../@generated/pipeline-progress/delete-many-pipeline-progress.args';
|
||||
import { CreateOnePipelineProgressArgs } from '../../@generated/pipeline-progress/create-one-pipeline-progress.args';
|
||||
import { PipelineProgressService } from '../services/pipeline-progress.service';
|
||||
import { prepareFindManyArgs } from 'src/utils/prepare-find-many';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Resolver(() => PipelineProgress)
|
||||
export class PipelineProgressResolver {
|
||||
constructor(
|
||||
private readonly pipelineProgressService: PipelineProgressService,
|
||||
) {}
|
||||
|
||||
@Query(() => [PipelineProgress])
|
||||
async findManyPipelineProgress(
|
||||
@Args() args: FindManyPipelineProgressArgs,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
) {
|
||||
const preparedArgs = prepareFindManyArgs<FindManyPipelineProgressArgs>(
|
||||
args,
|
||||
workspace,
|
||||
);
|
||||
return this.pipelineProgressService.findMany(preparedArgs);
|
||||
}
|
||||
|
||||
@Mutation(() => PipelineProgress, {
|
||||
nullable: true,
|
||||
})
|
||||
async updateOnePipelineProgress(
|
||||
@Args() args: UpdateOnePipelineProgressArgs,
|
||||
): Promise<PipelineProgress | null> {
|
||||
return this.pipelineProgressService.update({
|
||||
...args,
|
||||
} satisfies UpdateOnePipelineProgressArgs as Prisma.PipelineProgressUpdateArgs);
|
||||
}
|
||||
|
||||
@Mutation(() => AffectedRows, {
|
||||
nullable: false,
|
||||
})
|
||||
async deleteManyPipelineProgress(
|
||||
@Args() args: DeleteManyPipelineProgressArgs,
|
||||
): Promise<AffectedRows> {
|
||||
return this.pipelineProgressService.deleteMany({
|
||||
...args,
|
||||
});
|
||||
}
|
||||
|
||||
@Mutation(() => PipelineProgress, {
|
||||
nullable: false,
|
||||
})
|
||||
async createOnePipelineProgress(
|
||||
@Args() args: CreateOnePipelineProgressArgs,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
): Promise<PipelineProgress> {
|
||||
return this.pipelineProgressService.create({
|
||||
data: {
|
||||
...args.data,
|
||||
...{ workspace: { connect: { id: workspace.id } } },
|
||||
},
|
||||
} satisfies CreateOnePipelineProgressArgs as Prisma.PipelineProgressCreateArgs);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { PipelineRelationsResolver } from './pipeline-relations.resolver';
|
||||
import { PipelineStageService } from '../services/pipeline-stage.service';
|
||||
|
||||
describe('PipelineRelationsResolver', () => {
|
||||
let resolver: PipelineRelationsResolver;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
PipelineRelationsResolver,
|
||||
{
|
||||
provide: PipelineStageService,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
resolver = module.get<PipelineRelationsResolver>(PipelineRelationsResolver);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(resolver).toBeDefined();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,24 @@
|
||||
import * as TypeGraphQL from '@nestjs/graphql';
|
||||
import { PipelineStage } from 'src/core/@generated/pipeline-stage/pipeline-stage.model';
|
||||
import { Pipeline } from 'src/core/@generated/pipeline/pipeline.model';
|
||||
import { PipelineStageService } from '../services/pipeline-stage.service';
|
||||
|
||||
@TypeGraphQL.Resolver(() => Pipeline)
|
||||
export class PipelineRelationsResolver {
|
||||
constructor(private readonly pipelineStageService: PipelineStageService) {}
|
||||
|
||||
@TypeGraphQL.ResolveField(() => [PipelineStage], {
|
||||
nullable: false,
|
||||
})
|
||||
async pipelineStages(
|
||||
@TypeGraphQL.Root() pipeline: Pipeline,
|
||||
): Promise<PipelineStage[]> {
|
||||
return this.pipelineStageService.findMany({
|
||||
where: {
|
||||
pipelineId: {
|
||||
equals: pipeline.id,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { PipelineStageRelationsResolver } from './pipeline-stage-relations.resolver';
|
||||
import { PipelineProgressService } from '../services/pipeline-progress.service';
|
||||
|
||||
describe('PipelineStageRelationsResolver', () => {
|
||||
let resolver: PipelineStageRelationsResolver;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
PipelineStageRelationsResolver,
|
||||
{
|
||||
provide: PipelineProgressService,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
resolver = module.get<PipelineStageRelationsResolver>(
|
||||
PipelineStageRelationsResolver,
|
||||
);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(resolver).toBeDefined();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,26 @@
|
||||
import * as TypeGraphQL from '@nestjs/graphql';
|
||||
import { PipelineProgress } from 'src/core/@generated/pipeline-progress/pipeline-progress.model';
|
||||
import { PipelineStage } from 'src/core/@generated/pipeline-stage/pipeline-stage.model';
|
||||
import { PipelineProgressService } from '../services/pipeline-progress.service';
|
||||
|
||||
@TypeGraphQL.Resolver(() => PipelineStage)
|
||||
export class PipelineStageRelationsResolver {
|
||||
constructor(
|
||||
private readonly pipelineProgressService: PipelineProgressService,
|
||||
) {}
|
||||
|
||||
@TypeGraphQL.ResolveField(() => [PipelineProgress], {
|
||||
nullable: false,
|
||||
})
|
||||
async pipelineProgresses(
|
||||
@TypeGraphQL.Root() pipelineStage: PipelineStage,
|
||||
): Promise<PipelineProgress[]> {
|
||||
return this.pipelineProgressService.findMany({
|
||||
where: {
|
||||
pipelineStageId: {
|
||||
equals: pipelineStage.id,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { PipelineStageResolver } from './pipeline-stage.resolver';
|
||||
import { PipelineStageService } from '../services/pipeline-stage.service';
|
||||
|
||||
describe('PipelineStageResolver', () => {
|
||||
let resolver: PipelineStageResolver;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
PipelineStageResolver,
|
||||
{
|
||||
provide: PipelineStageService,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
resolver = module.get<PipelineStageResolver>(PipelineStageResolver);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(resolver).toBeDefined();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,28 @@
|
||||
import { Resolver, Args, Query } from '@nestjs/graphql';
|
||||
import { UseGuards } from '@nestjs/common';
|
||||
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
|
||||
import { Workspace } from '../../../core/@generated/workspace/workspace.model';
|
||||
import { AuthWorkspace } from '../../../decorators/auth-workspace.decorator';
|
||||
import { PipelineStage } from '../../../core/@generated/pipeline-stage/pipeline-stage.model';
|
||||
import { FindManyPipelineStageArgs } from '../../../core/@generated/pipeline-stage/find-many-pipeline-stage.args';
|
||||
import { PipelineStageService } from '../services/pipeline-stage.service';
|
||||
import { prepareFindManyArgs } from 'src/utils/prepare-find-many';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Resolver(() => PipelineStage)
|
||||
export class PipelineStageResolver {
|
||||
constructor(private readonly pipelineStageService: PipelineStageService) {}
|
||||
|
||||
@Query(() => [PipelineStage])
|
||||
async findManyPipelineStage(
|
||||
@Args() args: FindManyPipelineStageArgs,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
) {
|
||||
const preparedArgs = prepareFindManyArgs<FindManyPipelineStageArgs>(
|
||||
args,
|
||||
workspace,
|
||||
);
|
||||
|
||||
return this.pipelineStageService.findMany(preparedArgs);
|
||||
}
|
||||
}
|
||||
25
server/src/core/pipeline/resolvers/pipeline.resolver.spec.ts
Normal file
25
server/src/core/pipeline/resolvers/pipeline.resolver.spec.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { PipelineResolver } from './pipeline.resolver';
|
||||
import { PipelineService } from '../services/pipeline.service';
|
||||
|
||||
describe('PipelineResolver', () => {
|
||||
let resolver: PipelineResolver;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
PipelineResolver,
|
||||
{
|
||||
provide: PipelineService,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
resolver = module.get<PipelineResolver>(PipelineResolver);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(resolver).toBeDefined();
|
||||
});
|
||||
});
|
||||
27
server/src/core/pipeline/resolvers/pipeline.resolver.ts
Normal file
27
server/src/core/pipeline/resolvers/pipeline.resolver.ts
Normal file
@ -0,0 +1,27 @@
|
||||
import { Resolver, Args, Query } from '@nestjs/graphql';
|
||||
import { UseGuards } from '@nestjs/common';
|
||||
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
|
||||
import { Workspace } from '../../@generated/workspace/workspace.model';
|
||||
import { AuthWorkspace } from '../../../decorators/auth-workspace.decorator';
|
||||
import { Pipeline } from '../../@generated/pipeline/pipeline.model';
|
||||
import { FindManyPipelineArgs } from '../../@generated/pipeline/find-many-pipeline.args';
|
||||
import { PipelineService } from '../services/pipeline.service';
|
||||
import { prepareFindManyArgs } from 'src/utils/prepare-find-many';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Resolver(() => Pipeline)
|
||||
export class PipelineResolver {
|
||||
constructor(private readonly pipelineService: PipelineService) {}
|
||||
|
||||
@Query(() => [Pipeline])
|
||||
async findManyPipeline(
|
||||
@Args() args: FindManyPipelineArgs,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
) {
|
||||
const preparedArgs = prepareFindManyArgs<FindManyPipelineArgs>(
|
||||
args,
|
||||
workspace,
|
||||
);
|
||||
return this.pipelineService.findMany(preparedArgs);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user