From 35111173c3f961f0d3149fe132537dc7a17427e2 Mon Sep 17 00:00:00 2001 From: Rory& Date: Wed, 14 Jan 2026 23:11:06 +0100 Subject: [PATCH] Enum for report menu types --- assets/openapi.json | Bin 863500 -> 872967 bytes .../reporting/{menu/index.ts => menu.ts} | 36 +++++++++------ src/schemas/api/reports/ReportMenu.ts | 43 ++++++++++++++++++ 3 files changed, 66 insertions(+), 13 deletions(-) rename src/api/routes/reporting/{menu/index.ts => menu.ts} (60%) create mode 100644 src/schemas/api/reports/ReportMenu.ts diff --git a/assets/openapi.json b/assets/openapi.json index 19447b164d28a11da13dde009723deb7d3e5bea4..c8624a102d148c9bf736f3f1f1ad45bc813bbcec 100644 GIT binary patch delta 1172 zcmeCVWzxRHw4sHug{g(Pg{6hHg{_5s3x`0%bfFZEwUZr;_%)+lBSK;o+*3;w63Y@Z za}twsQWc6)3-XIfGV{_Ea#Qn46-p`#Qj7H_AB+~+zTg>`45MUGQDUV{5Ll5fP(cV# z-Y+pXwb*X@LR0oF)8(5vWTtPp$*#f=H%K33kpAR@=3>(wUb3y$1=$CegxHc_P?DLS zSFDhhU!;&;nwgUVRRFPhn-Qlp8lS}f8D&te93v#lFf~~bB(ptFIyb=PID`NF;adJj#N@-4N zN_=YB^n>ioA|%+3tT#0e79H3_dpctShuCB>1wpX+`UHFjObNw_>9AykW}-Qh5HxW? zLb136sC4@K`7DxPvrP$@4OSkXoROH9mzsk&y2Q~!EG@IBxFkL$clw78ZgA2!AYc_t z172G&lK4VfND|N?V0vkBY7t2$Pmkkel>vv5F#)3!3kq^FlM_MN39k)8XdzUdnKIq+ oB^x9W=@GC5s5l*-iP7R1nn&A3TR4E26NtHhn0vcu3(xlz04+hjT>t<8 delta 81 zcmZo)V%l@dq@jheg{g(Pg{6hHg{_5s3x_}hTW)G`abo)Pi;f&3+Xb|^w=r&yYvqV$ ioUZVNO?di+sT?QUg;sI^F((jn0WtS>p_M#eR{#K&%pFw# diff --git a/src/api/routes/reporting/menu/index.ts b/src/api/routes/reporting/menu.ts similarity index 60% rename from src/api/routes/reporting/menu/index.ts rename to src/api/routes/reporting/menu.ts index 55de1409b..b1ac252e6 100644 --- a/src/api/routes/reporting/menu/index.ts +++ b/src/api/routes/reporting/menu.ts @@ -18,25 +18,35 @@ import { route } from "@spacebar/api"; import { Request, Response, Router } from "express"; +import { ReportMenuTypeNames } from "../../../schemas/api/reports/ReportMenu"; const router = Router({ mergeParams: true }); -for (const type of [ - "guild", - "guild_discovery", - "guild_directory_entry", - "guild_scheduled_event", - "message", - "stage_channel", - "first_dm", - "user", - "application", - "widget", -] as const) { +console.log("[Server] Registering reporting menu routes..."); +router.get( + "/", + route({ + description: "[EXT] Get available reporting menu types.", + responses: { + 200: { + body: "Array", + }, + }, + }), + (req: Request, res: Response) => { + res.json(Object.values(ReportMenuTypeNames)); + }, +); + +for (const type of Object.values(ReportMenuTypeNames)) { + console.log(`[Server] Route /reporting/menu/${type} registered (reports).`); router.get( `/${type}`, route({ description: `Get reporting menu options for ${type} reports.`, + query: { + variant: { type: "string", required: false, description: "Version variant of the menu to retrieve (max 256 characters, default active)" }, + }, responses: { 200: { body: "ReportingMenuResponse", @@ -46,7 +56,7 @@ for (const type of [ }), (req: Request, res: Response) => { // TODO: implement - //res.send([] as ReportingMenuResponseSchema); + // res.send([] as ReportingMenuResponseSchema); }, ); } diff --git a/src/schemas/api/reports/ReportMenu.ts b/src/schemas/api/reports/ReportMenu.ts new file mode 100644 index 000000000..3396dd515 --- /dev/null +++ b/src/schemas/api/reports/ReportMenu.ts @@ -0,0 +1,43 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum ReportMenuType { + GUILD, + GUILD_DISCOVERY, + GUILD_DIRECTORY_ENTRY, + GUILD_SCHEDULED_EVENT, + MESSAGE, + STAGE_CHANNEL, + FIRST_DM, + USER, + APPLICATION, + WIDGET, +} + +export const ReportMenuTypeNames: Record = { + [ReportMenuType.GUILD]: "guild", + [ReportMenuType.GUILD_DISCOVERY]: "guild_discovery", + [ReportMenuType.GUILD_DIRECTORY_ENTRY]: "guild_directory_entry", + [ReportMenuType.GUILD_SCHEDULED_EVENT]: "guild_scheduled_event", + [ReportMenuType.MESSAGE]: "message", + [ReportMenuType.STAGE_CHANNEL]: "stage_channel", + [ReportMenuType.FIRST_DM]: "first_dm", + [ReportMenuType.USER]: "user", + [ReportMenuType.APPLICATION]: "application", + [ReportMenuType.WIDGET]: "widget", +};