KV to D1 migration (this is totally gonna break something)
This commit is contained in:
@ -5,15 +5,18 @@ 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" });
|
||||
const report: {
|
||||
[k: string]: any;
|
||||
} | null = await context.env.D1.prepare("SELECT * FROM reports WHERE id = ?")
|
||||
.bind(reportId)
|
||||
.first();
|
||||
|
||||
if (!reportData) return jsonError("Report does not exist", 404);
|
||||
if (!report) 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 } };
|
||||
const user = JSON.parse(report.user);
|
||||
|
||||
for (const [user, action] of Object.entries(actionMap)) {
|
||||
if (
|
||||
@ -64,35 +67,44 @@ export async function onRequestPost(context: RequestContext) {
|
||||
await setBanList(context, Object.assign(banList, newActions));
|
||||
}
|
||||
|
||||
reportData.open = false;
|
||||
const pushNotificationData: Record<string, string> | null =
|
||||
await context.env.D1.prepare(
|
||||
"SELECT token FROM push_notifications WHERE event_id = ? AND event_type = 'report';",
|
||||
)
|
||||
.bind(reportId)
|
||||
.first();
|
||||
|
||||
if (user?.email && !reportData.fcm_token)
|
||||
if (user?.email)
|
||||
await sendEmail(
|
||||
user.email,
|
||||
user?.email,
|
||||
context.env.MAILGUN_API_KEY,
|
||||
"Report Processed",
|
||||
"report_processed",
|
||||
{
|
||||
username: reportData.user?.username as string,
|
||||
username: report.user?.username as string,
|
||||
},
|
||||
);
|
||||
else if (reportData.fcm_token)
|
||||
else if (pushNotificationData)
|
||||
await sendPushNotification(
|
||||
context.env,
|
||||
"Report Processed",
|
||||
`Your report for ${reportData.target_usernames.toString()} has been reviewed.`,
|
||||
reportData.fcm_token,
|
||||
`Your report for ${JSON.parse(report.target_usernames).toString()} has been reviewed.`,
|
||||
pushNotificationData.token,
|
||||
);
|
||||
|
||||
delete reportData.fcm_token;
|
||||
delete (reportData.user as { email?: string; id: string; username: string })
|
||||
delete (report.user as { email?: string; id: string; username: string })
|
||||
?.email;
|
||||
|
||||
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();
|
||||
|
||||
await context.env.D1.prepare(
|
||||
"DELETE FROM push_notifications WHERE event_id = ? AND event_type = 'report';",
|
||||
)
|
||||
.bind(reportId)
|
||||
.run();
|
||||
|
||||
return new Response(null, {
|
||||
status: 204,
|
||||
});
|
||||
|
@ -17,7 +17,11 @@ export async function onRequestPost(context: RequestContext) {
|
||||
|
||||
await context.env.DATA.delete(`reportprocessing_${id}`);
|
||||
|
||||
const value = await context.env.DATA.get(`report_${id}`);
|
||||
const value = await context.env.D1.prepare(
|
||||
"SELECT id FROM reports WHERE id = ?;",
|
||||
)
|
||||
.bind(id)
|
||||
.first();
|
||||
|
||||
if (!value) return jsonError("Report is missing", 500);
|
||||
|
||||
|
@ -15,12 +15,15 @@ export async function onRequestPost(context: RequestContext) {
|
||||
)
|
||||
return jsonError("No processing report with that ID found", 404);
|
||||
|
||||
const data: { [k: string]: any } | null = await context.env.DATA.get(
|
||||
`report_${id}`,
|
||||
{ type: "json" },
|
||||
);
|
||||
const data: Record<string, any> | null = await context.env.D1.prepare(
|
||||
"SELECT attachments FROM reports WHERE id = ?;",
|
||||
)
|
||||
.bind(id)
|
||||
.first();
|
||||
|
||||
if (!data) return jsonError("Report doesn't exist", 404);
|
||||
if (!data) return jsonError("No report with that ID found", 404);
|
||||
|
||||
data.attachments = JSON.parse(data.attachments);
|
||||
|
||||
const accessToken = await GetAccessToken(context.env);
|
||||
const attachmentDeletePromises = [];
|
||||
@ -47,7 +50,6 @@ export async function onRequestPost(context: RequestContext) {
|
||||
);
|
||||
|
||||
await Promise.allSettled(attachmentDeletePromises);
|
||||
await context.env.DATA.delete(`report_${id}`);
|
||||
await context.env.D1.prepare("DELETE FROM reports WHERE id = ?;")
|
||||
.bind(id)
|
||||
.run();
|
||||
|
@ -195,33 +195,25 @@ export async function onRequestPost(context: RequestContext) {
|
||||
attachments.push(new URL(urlResult.value).pathname.replace(/^\/?t?\//, ""));
|
||||
}
|
||||
|
||||
await context.env.DATA.put(
|
||||
`report_${reportId}`,
|
||||
JSON.stringify({
|
||||
attachments,
|
||||
created_at: Date.now(),
|
||||
fcm_token: typeof senderTokenId === "string" ? senderTokenId : undefined,
|
||||
id: reportId,
|
||||
open: true,
|
||||
user: currentUser
|
||||
? {
|
||||
email: currentUser.email,
|
||||
id: currentUser.id,
|
||||
username: currentUser.username,
|
||||
}
|
||||
: null,
|
||||
target_ids: metaIDs,
|
||||
target_usernames: metaNames,
|
||||
}),
|
||||
);
|
||||
|
||||
try {
|
||||
await context.env.D1.prepare(
|
||||
"INSERT INTO reports (created_at, id, open, user) VALUES (?, ?, ?, ?);",
|
||||
await context.env.D1.prepare(
|
||||
"INSERT INTO reports (attachments, created_at, id, open, target_ids, target_usernames, user) VALUES (?, ?, ?, 1, ?, ?, ?);",
|
||||
)
|
||||
.bind(
|
||||
JSON.stringify(attachments),
|
||||
Date.now(),
|
||||
reportId,
|
||||
JSON.stringify(metaIDs),
|
||||
JSON.stringify(metaNames),
|
||||
currentUser ? JSON.stringify(currentUser) : null,
|
||||
)
|
||||
.bind(Date.now(), reportId, 1, currentUser?.id || null)
|
||||
.run();
|
||||
|
||||
if (typeof senderTokenId === "string")
|
||||
await context.env.D1.prepare(
|
||||
"INSERT INTO push_notifications (created_at, event_id, event_type, token) VALUES (?, ?, ?, ?);",
|
||||
)
|
||||
.bind(Date.now(), reportId, "report", senderTokenId)
|
||||
.run();
|
||||
} catch {}
|
||||
|
||||
return jsonResponse(
|
||||
JSON.stringify({ id: reportId, upload_urls: uploadUrls }),
|
||||
|
Reference in New Issue
Block a user