update approve center

This commit is contained in:
2024-10-27 15:16:47 +07:00
parent 2369275237
commit e39cf51900
5 changed files with 203 additions and 40 deletions

View File

@@ -1,4 +1,4 @@
import { Inject, Injectable } from '@nestjs/common';
import { Inject, Injectable, Logger } from '@nestjs/common';
import {
Pothos,
PothosRef,
@@ -9,13 +9,14 @@ import { Builder } from '../Graphql/graphql.builder';
import { PrismaService } from '../Prisma/prisma.service';
import { MinioService } from '../Minio/minio.service';
import { CenterStatus } from '@prisma/client';
import { MailService } from '../Mail/mail.service';
@Injectable()
export class CenterSchema extends PothosSchema {
constructor(
@Inject(SchemaBuilderToken) private readonly builder: Builder,
private readonly prisma: PrismaService,
private readonly minioService: MinioService,
private readonly mailService: MailService,
) {
super();
}
@@ -189,6 +190,77 @@ export class CenterSchema extends PothosSchema {
});
},
}),
approveOrRejectCenter: t.prismaField({
type: this.center(),
description: 'Approve a center and promote centerstaff to staff',
args: {
centerId: t.arg({
type: 'String',
required: true,
}),
approve: t.arg({
type: 'Boolean',
required: true,
}),
},
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.$transaction(async (prisma) => {
const center = await prisma.center.findUnique({
...query,
where: {
id: args.centerId,
},
});
if (!center) {
throw new Error('Center not found');
}
// check if center is already approved or rejected
if (
center.centerStatus === CenterStatus.APPROVED ||
center.centerStatus === CenterStatus.REJECTED
) {
throw new Error('Center is already approved or rejected');
}
// find center owner and promote to staff
const centerOwnerId = center.centerOwnerId;
if (!centerOwnerId) {
throw new Error('Center owner not found');
}
const centerOwner = await prisma.user.findUnique({
where: {
id: centerOwnerId,
},
});
if (!centerOwner) {
throw new Error('Center owner not found');
}
const updatedCenter = await prisma.center.update({
...query,
where: {
id: args.centerId,
},
data: {
centerStatus: args.approve
? CenterStatus.APPROVED
: CenterStatus.REJECTED,
},
});
// mail to center owner
try {
await this.mailService.sendEmail(
centerOwner.email,
args.approve
? 'Your center has been approved'
: 'Your center has been rejected',
args.approve ? 'center-approved' : 'center-rejected',
);
} catch (error) {
Logger.error(error, 'CenterSchema');
}
return updatedCenter;
});
},
}),
}));
}
}