diff --git a/server/src/api/api.module.ts b/server/src/api/api.module.ts index 6a7894593..c702b93c9 100644 --- a/server/src/api/api.module.ts +++ b/server/src/api/api.module.ts @@ -1,21 +1,27 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; +import { ConfigService } from '@nestjs/config'; import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo'; + +import { AuthModule } from 'src/auth/auth.module'; +import { PrismaModule } from 'src/database/prisma.module'; +import { ArgsService } from './resolvers/services/args.service'; + import { CompanyResolver } from './resolvers/company.resolver'; import { UserResolver } from './resolvers/user.resolver'; import { PersonResolver } from './resolvers/person.resolver'; import { CommentResolver } from './resolvers/comment.resolver'; import { CommentThreadResolver } from './resolvers/comment-thread.resolver'; +import { PipelineResolver } from './resolvers/pipeline.resolver'; +import { PipelineStageResolver } from './resolvers/pipeline-stage.resolver'; import { PersonRelationsResolver } from './resolvers/relations/person-relations.resolver'; import { UserRelationsResolver } from './resolvers/relations/user-relations.resolver'; import { WorkspaceMemberRelationsResolver } from './resolvers/relations/workspace-member-relations.resolver'; -import { ConfigService } from '@nestjs/config'; -import { AuthModule } from 'src/auth/auth.module'; import { CompanyRelationsResolver } from './resolvers/relations/company-relations.resolver'; -import { PrismaModule } from 'src/database/prisma.module'; -import { ArgsService } from './resolvers/services/args.service'; import { CommentThreadRelationsResolver } from './resolvers/relations/comment-thread-relations.resolver'; +import { PipelineRelationsResolver } from './resolvers/relations/pipeline-relations.resolver'; +import { PipelineStageRelationsResolver } from './resolvers/relations/pipeline-stage-relations.resolver'; @Module({ imports: [ @@ -36,12 +42,16 @@ import { CommentThreadRelationsResolver } from './resolvers/relations/comment-th UserResolver, CommentResolver, CommentThreadResolver, + PipelineResolver, + PipelineStageResolver, CompanyRelationsResolver, PersonRelationsResolver, UserRelationsResolver, WorkspaceMemberRelationsResolver, CommentThreadRelationsResolver, + PipelineRelationsResolver, + PipelineStageRelationsResolver, ], }) export class ApiModule {} diff --git a/server/src/api/resolvers/pipeline-stage.resolver.ts b/server/src/api/resolvers/pipeline-stage.resolver.ts new file mode 100644 index 000000000..cac9e99fe --- /dev/null +++ b/server/src/api/resolvers/pipeline-stage.resolver.ts @@ -0,0 +1,31 @@ +import { Resolver, Args, Query } from '@nestjs/graphql'; +import { UseGuards } from '@nestjs/common'; +import { JwtAuthGuard } from 'src/auth/guards/jwt.auth.guard'; +import { PrismaService } from 'src/database/prisma.service'; +import { Workspace } from '../@generated/workspace/workspace.model'; +import { AuthWorkspace } from './decorators/auth-workspace.decorator'; +import { PipelineStage } from '../@generated/pipeline-stage/pipeline-stage.model'; +import { FindManyPipelineStageArgs } from '../@generated/pipeline-stage/find-many-pipeline-stage.args'; +import { ArgsService } from './services/args.service'; + +@UseGuards(JwtAuthGuard) +@Resolver(() => PipelineStage) +export class PipelineStageResolver { + constructor( + private readonly prismaService: PrismaService, + private readonly argsService: ArgsService, + ) {} + + @Query(() => [PipelineStage]) + async findManyPipelineStage( + @Args() args: FindManyPipelineStageArgs, + @AuthWorkspace() workspace: Workspace, + ) { + const preparedArgs = + await this.argsService.prepareFindManyArgs( + args, + workspace, + ); + return this.prismaService.pipelineStage.findMany(preparedArgs); + } +} diff --git a/server/src/api/resolvers/pipeline.resolver.ts b/server/src/api/resolvers/pipeline.resolver.ts new file mode 100644 index 000000000..1380df2d2 --- /dev/null +++ b/server/src/api/resolvers/pipeline.resolver.ts @@ -0,0 +1,31 @@ +import { Resolver, Args, Query } from '@nestjs/graphql'; +import { UseGuards } from '@nestjs/common'; +import { JwtAuthGuard } from 'src/auth/guards/jwt.auth.guard'; +import { PrismaService } from 'src/database/prisma.service'; +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 { ArgsService } from './services/args.service'; + +@UseGuards(JwtAuthGuard) +@Resolver(() => Pipeline) +export class PipelineResolver { + constructor( + private readonly prismaService: PrismaService, + private readonly argsService: ArgsService, + ) {} + + @Query(() => [Pipeline]) + async findManyPipeline( + @Args() args: FindManyPipelineArgs, + @AuthWorkspace() workspace: Workspace, + ) { + const preparedArgs = + await this.argsService.prepareFindManyArgs( + args, + workspace, + ); + return this.prismaService.pipeline.findMany(preparedArgs); + } +} diff --git a/server/src/api/resolvers/relations/pipeline-relations.resolver.ts b/server/src/api/resolvers/relations/pipeline-relations.resolver.ts new file mode 100644 index 000000000..0d55ec4b0 --- /dev/null +++ b/server/src/api/resolvers/relations/pipeline-relations.resolver.ts @@ -0,0 +1,25 @@ +import * as TypeGraphQL from '@nestjs/graphql'; +import { Comment } from 'src/api/@generated/comment/comment.model'; +import { PipelineStage } from 'src/api/@generated/pipeline-stage/pipeline-stage.model'; +import { Pipeline } from 'src/api/@generated/pipeline/pipeline.model'; +import { PrismaService } from 'src/database/prisma.service'; + +@TypeGraphQL.Resolver(() => Pipeline) +export class PipelineRelationsResolver { + constructor(private readonly prismaService: PrismaService) {} + + @TypeGraphQL.ResolveField(() => [Comment], { + nullable: false, + }) + async pipelineStages( + @TypeGraphQL.Root() pipeline: Pipeline, + ): Promise { + return this.prismaService.pipelineStage.findMany({ + where: { + pipelineId: { + equals: pipeline.id, + }, + }, + }); + } +} diff --git a/server/src/api/resolvers/relations/pipeline-stage-relations.resolver.ts b/server/src/api/resolvers/relations/pipeline-stage-relations.resolver.ts new file mode 100644 index 000000000..0977c0fc2 --- /dev/null +++ b/server/src/api/resolvers/relations/pipeline-stage-relations.resolver.ts @@ -0,0 +1,25 @@ +import * as TypeGraphQL from '@nestjs/graphql'; +import { Comment } from 'src/api/@generated/comment/comment.model'; +import { PipelineProgress } from 'src/api/@generated/pipeline-progress/pipeline-progress.model'; +import { PipelineStage } from 'src/api/@generated/pipeline-stage/pipeline-stage.model'; +import { PrismaService } from 'src/database/prisma.service'; + +@TypeGraphQL.Resolver(() => PipelineStage) +export class PipelineStageRelationsResolver { + constructor(private readonly prismaService: PrismaService) {} + + @TypeGraphQL.ResolveField(() => [Comment], { + nullable: false, + }) + async pipelineProgresses( + @TypeGraphQL.Root() pipelineStage: PipelineStage, + ): Promise { + return this.prismaService.pipelineProgress.findMany({ + where: { + pipelineStageId: { + equals: pipelineStage.id, + }, + }, + }); + } +}