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:
Jérémy M
2023-06-16 10:38:11 +02:00
committed by GitHub
parent 5921c7f11d
commit 2cd081234f
1084 changed files with 2251 additions and 758 deletions

View File

@ -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();
});
});

View File

@ -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,
},
});
}
}

View File

@ -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();
});
});

View File

@ -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);
}
}

View File

@ -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();
});
});

View File

@ -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,
},
},
});
}
}

View File

@ -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();
});
});

View File

@ -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,
},
},
});
}
}

View File

@ -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();
});
});

View File

@ -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);
}
}

View 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();
});
});

View 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);
}
}