diff --git a/functions/api/game-bans/notes/[id].ts b/functions/api/game-bans/notes/[id].ts new file mode 100644 index 0000000..50b92e3 --- /dev/null +++ b/functions/api/game-bans/notes/[id].ts @@ -0,0 +1,39 @@ +import { jsonError, jsonResponse } from "../../../common.js"; + +export async function onRequestDelete(context: RequestContext) { + const noteId = context.params.id as string; + const creatorIdResult: null | Record = + await context.env.D1.prepare( + "SELECT created_by FROM game_mod_logs WHERE id = ?;", + ) + .bind(noteId) + .first(); + + if (creatorIdResult?.created_by !== context.data.current_user.id) + return jsonError("Cannot delete notes that are not your own", 403); + + await context.env.D1.prepare("DELETE FROM game_mod_logs WHERE id = ?;") + .bind(noteId) + .first(); + + return new Response(null, { status: 204 }); +} + +export async function onRequestGet(context: RequestContext) { + const noteId = context.params.id as string; + const result = await context.env.D1.prepare( + "SELECT * FROM game_mod_notes WHERE id = ?;", + ) + .bind(noteId) + .first(); + + if (!result) return jsonError("Note not found", 404); + + const noteData = structuredClone(result); + const gmeEntry: null | { time: number; user: string; name: string } = + await context.env.DATA.get(`gamemod_${result.created_by}`, "json"); + + if (gmeEntry) noteData.creator_name = gmeEntry.name; + + return jsonResponse(JSON.stringify(noteData)); +}