update approve or reject resume
This commit is contained in:
@@ -8,7 +8,7 @@ import {
|
||||
import { Builder } from '../Graphql/graphql.builder'
|
||||
import { PrismaService } from '../Prisma/prisma.service'
|
||||
import { MinioService } from '../Minio/minio.service'
|
||||
import { ResumeStatus } from '@prisma/client'
|
||||
import { ResumeStatus, Role } from '@prisma/client'
|
||||
@Injectable()
|
||||
export class ResumeSchema extends PothosSchema {
|
||||
constructor(
|
||||
@@ -54,6 +54,9 @@ export class ResumeSchema extends PothosSchema {
|
||||
resumeFile: t.relation('resumeFile', {
|
||||
description: 'The resume file for the resume.',
|
||||
}),
|
||||
user: t.relation('user', {
|
||||
description: 'The user for the resume.',
|
||||
}),
|
||||
}),
|
||||
})
|
||||
}
|
||||
@@ -250,9 +253,9 @@ export class ResumeSchema extends PothosSchema {
|
||||
},
|
||||
}),
|
||||
|
||||
updateResumeStatus: t.prismaField({
|
||||
approveOrRejectResume: t.prismaField({
|
||||
type: this.resume(),
|
||||
description: 'Update the status of a resume.',
|
||||
description: 'Approve or reject a resume.',
|
||||
args: {
|
||||
resumeId: t.arg({
|
||||
type: 'String',
|
||||
@@ -262,34 +265,74 @@ export class ResumeSchema extends PothosSchema {
|
||||
type: ResumeStatus,
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
resolve: async (query, root, args) => {
|
||||
const { resumeId, status } = args
|
||||
const resume = await this.prisma.resume.update({
|
||||
...query,
|
||||
where: { id: resumeId },
|
||||
data: { status },
|
||||
})
|
||||
return resume
|
||||
},
|
||||
}),
|
||||
|
||||
deleteResumeFile: t.prismaField({
|
||||
type: this.resumeFile(),
|
||||
description: 'Delete a resume file by its unique identifier.',
|
||||
args: {
|
||||
resumeFileId: t.arg({
|
||||
adminNote: t.arg({
|
||||
type: 'String',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
resolve: async (query, root, args) => {
|
||||
const { resumeFileId } = args
|
||||
const resumeFile = await this.prisma.resumeFile.delete({
|
||||
...query,
|
||||
where: { id: resumeFileId },
|
||||
resolve: async (_query, _root, args, ctx, _info) => {
|
||||
if (ctx.isSubscription) {
|
||||
throw new Error('Not allowed')
|
||||
}
|
||||
if (ctx.http.me.role !== Role.MODERATOR) {
|
||||
throw new Error('Not allowed')
|
||||
}
|
||||
const { resumeId, status, adminNote } = args
|
||||
return this.prisma.$transaction(async (tx) => {
|
||||
const resumeOwner = await tx.user.findUnique({
|
||||
where: { id: resumeId },
|
||||
})
|
||||
if (!resumeOwner) {
|
||||
throw new Error('Resume not found')
|
||||
}
|
||||
const oldResume = await tx.resume.findUnique({
|
||||
where: { id: resumeId },
|
||||
})
|
||||
if (!oldResume) {
|
||||
throw new Error('Resume not found')
|
||||
}
|
||||
// if resumeOwner.status is REQUESTED and status is REVIEWING then we need update status and return resume
|
||||
if (
|
||||
oldResume.status === ResumeStatus.REQUESTED &&
|
||||
status === ResumeStatus.REVIEWING
|
||||
) {
|
||||
const resume = await tx.resume.update({
|
||||
where: { id: resumeId },
|
||||
data: { status },
|
||||
})
|
||||
return resume
|
||||
}
|
||||
|
||||
let _adminNote
|
||||
if (
|
||||
status === ResumeStatus.APPROVED ||
|
||||
status === ResumeStatus.REJECTED
|
||||
) {
|
||||
if (status === ResumeStatus.REJECTED && adminNote === '') {
|
||||
throw new Error('Admin note is required when rejecting')
|
||||
}
|
||||
_adminNote = await tx.adminNote.create({
|
||||
data: {
|
||||
content: adminNote,
|
||||
notedByUserId: ctx.http.me.id,
|
||||
resumeId,
|
||||
},
|
||||
})
|
||||
}
|
||||
if (_adminNote) {
|
||||
_adminNote = {
|
||||
connect: { id: _adminNote.id },
|
||||
}
|
||||
}
|
||||
const resume = await tx.resume.update({
|
||||
where: { id: resumeId },
|
||||
data: {
|
||||
status,
|
||||
adminNote: _adminNote,
|
||||
},
|
||||
})
|
||||
return resume
|
||||
})
|
||||
return resumeFile
|
||||
},
|
||||
}),
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user