From d86e7cb667c2922a83b58b540f23fbfd11c0bc0a Mon Sep 17 00:00:00 2001 From: Ly Tuan Kiet Date: Mon, 28 Oct 2024 16:47:30 +0700 Subject: [PATCH] add approve or reject mentor --- src/AdminNote/adminnote.schema.ts | 38 ++++++++++++++++++++++ src/AppConfig/appconfig.module.ts | 11 +++++++ src/AppConfig/appconfig.schema.ts | 10 ++++++ src/CenterMentor/centermentor.module.ts | 2 ++ src/CenterMentor/centermentor.schema.ts | 42 +++++++++++++++++++++++++ 5 files changed, 103 insertions(+) diff --git a/src/AdminNote/adminnote.schema.ts b/src/AdminNote/adminnote.schema.ts index fb10883..4fa4ca6 100644 --- a/src/AdminNote/adminnote.schema.ts +++ b/src/AdminNote/adminnote.schema.ts @@ -97,6 +97,7 @@ export class AdminNoteSchema extends PothosSchema { ...query, where: args.filter ?? undefined, orderBy: args.orderBy ?? undefined, + cursor: args.cursor ?? undefined, skip: args.skip ?? undefined, take: args.take ?? undefined, }); @@ -121,6 +122,43 @@ export class AdminNoteSchema extends PothosSchema { }); }, }), + + updateAdminNote: t.prismaField({ + type: this.adminNote(), + args: { + where: t.arg({ + type: this.builder.generator.getWhereUnique('AdminNote'), + required: true, + }), + data: t.arg({ + type: this.builder.generator.getUpdateInput('AdminNote'), + required: true, + }), + }, + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.adminNote.update({ + ...query, + where: args.where, + data: args.data, + }); + }, + }), + + deleteAdminNote: t.prismaField({ + type: this.adminNote(), + args: { + where: t.arg({ + type: this.builder.generator.getWhereUnique('AdminNote'), + required: true, + }), + }, + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.adminNote.delete({ + ...query, + where: args.where, + }); + }, + }), })); } } diff --git a/src/AppConfig/appconfig.module.ts b/src/AppConfig/appconfig.module.ts index e69de29..b9d76e8 100644 --- a/src/AppConfig/appconfig.module.ts +++ b/src/AppConfig/appconfig.module.ts @@ -0,0 +1,11 @@ +import { Global, Module } from '@nestjs/common'; + +import { AppConfigSchema } from './appconfig.schema'; + +@Global() +@Module({ + imports: [AppConfigSchema], + providers: [AppConfigSchema], + exports: [AppConfigSchema], +}) +export class AppConfigModule {} diff --git a/src/AppConfig/appconfig.schema.ts b/src/AppConfig/appconfig.schema.ts index e69de29..e3c32de 100644 --- a/src/AppConfig/appconfig.schema.ts +++ b/src/AppConfig/appconfig.schema.ts @@ -0,0 +1,10 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { PothosSchema, SchemaBuilderToken } from '@smatch-corp/nestjs-pothos'; +import { Builder } from 'src/Graphql/graphql.builder'; + +@Injectable() +export class AppConfigSchema extends PothosSchema { + constructor(@Inject(SchemaBuilderToken) private readonly builder: Builder) { + super(); + } +} diff --git a/src/CenterMentor/centermentor.module.ts b/src/CenterMentor/centermentor.module.ts index 9a67365..f5f7aef 100644 --- a/src/CenterMentor/centermentor.module.ts +++ b/src/CenterMentor/centermentor.module.ts @@ -1,7 +1,9 @@ import { CenterMentorSchema } from './centermentor.schema'; import { Module } from '@nestjs/common'; +import { UserModule } from 'src/User/user.module'; @Module({ + imports: [UserModule], providers: [CenterMentorSchema], exports: [CenterMentorSchema], }) diff --git a/src/CenterMentor/centermentor.schema.ts b/src/CenterMentor/centermentor.schema.ts index bca7783..70a13fb 100644 --- a/src/CenterMentor/centermentor.schema.ts +++ b/src/CenterMentor/centermentor.schema.ts @@ -9,6 +9,7 @@ import { Builder } from '../Graphql/graphql.builder'; import { PrismaService } from '../Prisma/prisma.service'; import { MailService } from '../Mail/mail.service'; import { JwtUtils } from '../common/utils/jwt.utils'; +import { UserSchema } from 'src/User/user.schema'; @Injectable() export class CenterMentorSchema extends PothosSchema { constructor( @@ -16,6 +17,7 @@ export class CenterMentorSchema extends PothosSchema { private readonly prisma: PrismaService, private readonly mailService: MailService, private readonly jwtUtils: JwtUtils, + private readonly userSchema: UserSchema, ) { super(); } @@ -198,6 +200,46 @@ export class CenterMentorSchema extends PothosSchema { }); }, }), + approveOrRejectCenterMentor: t.prismaField({ + type: this.userSchema.user(), + description: 'Approve or reject a center mentor.', + args: { + where: t.arg({ + type: this.builder.generator.getWhereUnique('User'), + required: true, + }), + approved: t.arg({ type: 'Boolean', required: true }), + adminNote: t.arg({ type: 'String', required: false }), + }, + resolve: async (query, root, args, ctx, info) => { + return this.prisma.$transaction(async (prisma) => { + // if approved, update role to mentor + if (args.approved) { + return await prisma.user.update({ + where: args.where, + data: { + role: 'CENTER_MENTOR', + updatedAt: new Date(), + adminNote: { + create: { + content: args.adminNote ?? '', + }, + }, + }, + }); + } + // if rejected, update adminNote + return await prisma.user.update({ + where: args.where, + data: { + adminNote: { + create: { content: args.adminNote ?? '' }, + }, + }, + }); + }); + }, + }), })); } }