import { getBanList, setBanList } from "../../../roblox-open-cloud.js"; import { insertLogs } from "../../../gcloud.js"; import { jsonError } from "../../../common.js"; import sendEmail from "../../../email.js"; import { sendPushNotification } from "../../../gcloud.js"; export async function onRequestPost(context: RequestContext) { const reportId = context.params.id as string; const reportData: (ReportCardProps & { fcm_token?: string }) | null = await context.env.DATA.get(`report_${reportId}`, { type: "json" }); if (!reportData) return jsonError("Report does not exist", 404); const actionMap = context.data.body; const newActions: { [k: string]: { BanType: number } } = {}; const logMap: { [k: string]: number } = {}; const { user } = reportData as ReportCardProps & { user?: { email: string } }; for (const [user, action] of Object.entries(actionMap)) { if ( isNaN(parseInt(user)) || typeof action !== "number" || action < 0 || action > 2 ) return jsonError("Invalid action map", 400); if (action === 0) continue; newActions[user] = { BanType: action }; logMap[user] = action; } if (Object.values(logMap).length) { await insertLogs(logMap, context.params.id as string, context); const banList = (await getBanList(context)) as { [k: string]: { BanType: number }; }; Object.assign(banList, newActions); await setBanList(context, banList); } reportData.open = false; await context.env.DATA.put(`report_${reportId}`, JSON.stringify(reportData)); await context.env.D1.prepare("UPDATE reports SET open = 0 WHERE id = ?;") .bind(reportId) .run(); if (user?.email && !reportData.fcm_token) await sendEmail( user.email, context.env.MAILGUN_API_KEY, "Report Processed", "report_processed", { username: reportData.user?.username as string, }, ); else if (reportData.fcm_token) await sendPushNotification( context.env, "Report Processed", `Your report for ${reportData.target_usernames.toString()} has been reviewed.`, ); return new Response(null, { status: 204, }); }