import type { Prisma } from "~/prisma/client"; import aclManager from "~/server/internal/acls"; import prisma from "~/server/internal/db/database"; import { handleFileUpload } from "~/server/internal/utils/handlefileupload"; export default defineEventHandler(async (h3) => { const allowed = await aclManager.allowSystemACL(h3, ["game:update"]); if (!allowed) throw createError({ statusCode: 403 }); const form = await readMultipartFormData(h3); if (!form) throw createError({ statusCode: 400, statusMessage: "This endpoint requires multipart form data.", }); const uploadResult = await handleFileUpload(h3, {}, ["internal:read"], 1); if (!uploadResult) throw createError({ statusCode: 400, statusMessage: "Failed to upload file", }); const [ids, options, pull, dump] = uploadResult; const id = ids.at(0); // handleFileUpload reads the rest of the options for us. const name = options.name; const description = options.description; const gameId = options.id; const updateModel: Prisma.GameUpdateInput = { mName: name, mShortDescription: description, }; // handle if user uploaded new icon if (id) { updateModel.mIconObjectId = id; await pull(); } else { dump(); } // If the API call doesn't provide values, don't set them for (const [key, value] of Object.entries(updateModel)) { if (value === undefined) { // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete updateModel[key as keyof typeof updateModel]; } } const newObject = await prisma.game.update({ where: { id: gameId, }, data: updateModel, }); return newObject; });