import prisma from "~/server/internal/db/database"; import libraryManager from "~/server/internal/library"; import { parsePlatform } from "~/server/internal/utils/parseplatform"; export default defineEventHandler(async (h3) => { const user = await h3.context.session.getAdminUser(h3); if (!user) throw createError({ statusCode: 403 }); const body = await readBody(h3); const gameId = body.id; const versionName = body.version; const platform = body.platform as string | undefined; const launch = (body.launch ?? "") as string; const launchArgs = (body.launchArgs ?? "") as string; const setup = (body.setup ?? "") as string; const setupArgs = (body.setupArgs ?? "") as string; const onlySetup = body.onlySetup ?? (false as boolean); const delta = (body.delta ?? false) as boolean; const umuId = (body.umuId ?? "") as string; if (!gameId || !versionName) throw createError({ statusCode: 400, statusMessage: "Game ID and version are required.", }); if (!platform) throw createError({ statusCode: 400, statusMessage: "Missing platform." }); const platformParsed = parsePlatform(platform); if (!platformParsed) throw createError({ statusCode: 400, statusMessage: "Invalid platform." }); if (delta) { const validOverlayVersions = await prisma.gameVersion.count({ where: { gameId: gameId, platform: platformParsed, delta: false }, }); if (validOverlayVersions == 0) throw createError({ statusCode: 400, statusMessage: "Update mode requires a pre-existing version for this platform.", }); } if (umuId && typeof umuId !== "string") throw createError({ statusCode: 400, statusMessage: "If specified, UMU ID must be a string.", }); if (onlySetup) { if (!setup) throw createError({ statusCode: 400, statusMessage: 'Setup required in "setup mode".', }); } else { if (!delta && !launch) throw createError({ statusCode: 400, statusMessage: "Startup executable is required for non-update versions", }); } // startup & delta require more complex checking logic const taskId = await libraryManager.importVersion(gameId, versionName, { platform, onlySetup, launch, launchArgs, setup, setupArgs, umuId, delta, }); if (!taskId) throw createError({ statusCode: 400, statusMessage: "Invalid options for import", }); return { taskId: taskId }; });