update approve or reject resume
This commit is contained in:
@@ -8,7 +8,7 @@ import {
|
|||||||
import { Builder } from '../Graphql/graphql.builder'
|
import { Builder } from '../Graphql/graphql.builder'
|
||||||
import { PrismaService } from '../Prisma/prisma.service'
|
import { PrismaService } from '../Prisma/prisma.service'
|
||||||
import { MinioService } from '../Minio/minio.service'
|
import { MinioService } from '../Minio/minio.service'
|
||||||
import { ResumeStatus } from '@prisma/client'
|
import { ResumeStatus, Role } from '@prisma/client'
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ResumeSchema extends PothosSchema {
|
export class ResumeSchema extends PothosSchema {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -54,6 +54,9 @@ export class ResumeSchema extends PothosSchema {
|
|||||||
resumeFile: t.relation('resumeFile', {
|
resumeFile: t.relation('resumeFile', {
|
||||||
description: 'The resume file for the resume.',
|
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(),
|
type: this.resume(),
|
||||||
description: 'Update the status of a resume.',
|
description: 'Approve or reject a resume.',
|
||||||
args: {
|
args: {
|
||||||
resumeId: t.arg({
|
resumeId: t.arg({
|
||||||
type: 'String',
|
type: 'String',
|
||||||
@@ -262,34 +265,74 @@ export class ResumeSchema extends PothosSchema {
|
|||||||
type: ResumeStatus,
|
type: ResumeStatus,
|
||||||
required: true,
|
required: true,
|
||||||
}),
|
}),
|
||||||
},
|
adminNote: t.arg({
|
||||||
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({
|
|
||||||
type: 'String',
|
type: 'String',
|
||||||
required: true,
|
required: true,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
resolve: async (query, root, args) => {
|
resolve: async (_query, _root, args, ctx, _info) => {
|
||||||
const { resumeFileId } = args
|
if (ctx.isSubscription) {
|
||||||
const resumeFile = await this.prisma.resumeFile.delete({
|
throw new Error('Not allowed')
|
||||||
...query,
|
}
|
||||||
where: { id: resumeFileId },
|
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