import validateInactivity from "./validate.js"; export async function onRequestPost(context: RequestContext) { const { departments, end, hiatus, reason, senderTokenId, start } = context.data.body; const validationFailureResponse = validateInactivity( departments, end, hiatus, reason, start, context.data.departments, ); if (validationFailureResponse) return validationFailureResponse; const inactivityId = context.data.current_user.id + (context.request.headers.get("cf-ray") as string).split("-")[0] + Date.now().toString(); await context.data.prisma.inactivityNotice.create({ data: { decisions: {}, departments, end, hiatus, id: inactivityId, reason, start, user: { id: context.data.current_user.id, email: context.data.current_user.email, username: context.data.current_user.username, }, }, }); if (typeof senderTokenId === "string") { await context.data.prisma.pushNotification.create({ data: { event_id: inactivityId, event_type: "inactivity", token: senderTokenId, }, }); } const departmentsToNotify = []; const departmentRoles = []; const { env } = context; for (const department of departments) { departmentsToNotify.push(env[`${department}_INACTIVITY_WEBHOOK`]); departmentRoles.push(env[`${department}_INACTIVITY_ROLE`]); } const webhookPromises = []; for (let i = 0; i < departmentsToNotify.length; i++) webhookPromises.push( fetch(departmentsToNotify[i], { body: JSON.stringify({ content: `<@&${departmentRoles[i]}>`, embeds: [ { title: "Inactivity Notice Submitted", color: 3756250, description: `View this notice at https://carcrushers.cc/mod-queue?id=${inactivityId}&type=inactivity`, }, ], }), headers: { "content-type": "application/json", }, method: "POST", }), ); await Promise.allSettled(webhookPromises); return new Response(null, { status: 204, }); }