admin roadmap filter & search, user management, reopen rejected, system health
This commit is contained in:
@@ -25,9 +25,27 @@ export const organizerRepo = {
|
||||
});
|
||||
},
|
||||
|
||||
async listByStatus(status?: "PENDING" | "APPROVED" | "REJECTED") {
|
||||
async listByStatus(
|
||||
status?: "PENDING" | "APPROVED" | "REJECTED",
|
||||
filters?: {
|
||||
dateFrom?: Date;
|
||||
dateTo?: Date;
|
||||
reviewerEmail?: string;
|
||||
}
|
||||
) {
|
||||
const where: Prisma.OrganizerVerificationWhereInput = {};
|
||||
if (status) where.status = status;
|
||||
if (filters?.dateFrom || filters?.dateTo) {
|
||||
where.createdAt = {
|
||||
...(filters.dateFrom && { gte: filters.dateFrom }),
|
||||
...(filters.dateTo && { lte: filters.dateTo }),
|
||||
};
|
||||
}
|
||||
if (filters?.reviewerEmail) {
|
||||
where.reviewedBy = { email: filters.reviewerEmail };
|
||||
}
|
||||
return prisma.organizerVerification.findMany({
|
||||
where: status ? { status } : undefined,
|
||||
where,
|
||||
orderBy: { createdAt: "desc" },
|
||||
include: {
|
||||
user: { select: { id: true, name: true, email: true } },
|
||||
@@ -55,6 +73,24 @@ export const organizerRepo = {
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Reopen pengajuan REJECTED ke PENDING. Simpan rejection reason lama
|
||||
* sebagai catatan history (di-overwrite kalau di-reject lagi nanti).
|
||||
*/
|
||||
async reopen(id: string, reopenNote: string) {
|
||||
return prisma.organizerVerification.update({
|
||||
where: { id },
|
||||
data: {
|
||||
status: "PENDING",
|
||||
reviewedById: null,
|
||||
reviewedAt: null,
|
||||
verifiedAt: null,
|
||||
// Pertahankan rejectionReason lama di field, append note reopen.
|
||||
rejectionReason: `[Dibuka kembali admin: ${reopenNote}]`,
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
async updateReview(
|
||||
id: string,
|
||||
data: {
|
||||
|
||||
Reference in New Issue
Block a user