Files
car-crushers-portal/functions/api/reports/recall.ts

64 lines
1.7 KiB
TypeScript

import { GetAccessToken } from "../../gcloud.js";
import { jsonError } from "../../common.js";
export async function onRequestPost(context: RequestContext) {
const { id } = context.data.body;
if (!id) return jsonError("No ID provided", 400);
const reportUserId = await context.env.DATA.get(`reportprocessing_${id}`);
if (
!reportUserId ||
(context.data.current_user?.id !== reportUserId &&
context.request.headers.get("CF-Connecting-IP") !== reportUserId)
)
return jsonError("No processing report with that ID found", 404);
const data = await context.data.prisma.report.findUnique({
select: {
attachments: true,
},
where: {
id,
},
});
if (!data) return jsonError("No report with that ID found", 404);
const accessToken = await GetAccessToken(context.env);
const attachmentDeletePromises = [];
const existingAttachments = [...(data.attachments as string[])];
for (let i = 0; i < existingAttachments.length; i++) {
if (!existingAttachments[i].startsWith("t/"))
existingAttachments[i] = existingAttachments[i].replace("t/", "");
}
for (const attachment of existingAttachments)
attachmentDeletePromises.push(
fetch(
`https://storage.googleapis.com/storage/v1/b/portal-carcrushers-cc/o/${encodeURIComponent(
attachment,
)}`,
{
headers: {
authorization: `Bearer ${accessToken}`,
},
method: "DELETE",
},
),
);
await Promise.allSettled(attachmentDeletePromises);
await context.data.prisma.report.delete({
where: {
id,
},
});
return new Response(null, {
status: 204,
});
}