From cc0bc16967bec455de41bd90e37e6160a6d99c2e Mon Sep 17 00:00:00 2001 From: regalijan Date: Thu, 19 Oct 2023 16:49:17 -0400 Subject: [PATCH] Create queue list endpoint --- functions/api/mod-queue/list.ts | 37 +++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/functions/api/mod-queue/list.ts b/functions/api/mod-queue/list.ts index 46acfa5..02b9a47 100644 --- a/functions/api/mod-queue/list.ts +++ b/functions/api/mod-queue/list.ts @@ -1,20 +1,49 @@ export async function onRequestGet(context: RequestContext) { const { searchParams } = new URL(context.request.url); - const entryType = searchParams.get("type") ?? "all"; + const cursor = searchParams.get("cursor"); + const entryType = searchParams.get("type"); const showClosed = searchParams.get("showClosed") === "true"; - const items: { type: string; data: { [k: string]: any } }[] = []; - const types = { + const types: { [k: string]: string } = { appeal: `appeal_`, gma: `gameappeal_`, report: `report_`, }; - const permissions = { + const permissions: { [k: string]: number[] } = { appeal: [1 << 0, 1 << 1], gma: [1 << 5], report: [1 << 5], }; const { current_user: currentUser } = context.data; + if (!entryType || !types[entryType]) + return new Response('{"error":"Invalid filter type"}', { + headers: { + "content-type": "application/json", + }, + status: 400, + }); + + if (!permissions[entryType].find((p) => currentUser.permissions & p)) + return new Response('{"error":"You cannot use this filter"}', { + headers: { + "content-type": "application/json", + }, + status: 403, + }); + + let prefix = types[entryType]; + + if (showClosed) prefix = `closed${prefix}`; + + const { keys } = await context.env.DATA.list({ cursor, limit: 20, prefix }); + const items = []; + + for (const key of keys) { + const listItem = await context.env.DATA.get(key.name); + + if (listItem) items.push(JSON.parse(listItem)); + } + return new Response(JSON.stringify(items), { headers: { "content-type": "application/json",