import { ClientCapabilities } from "~/prisma/client"; import { defineClientEventHandler } from "~/server/internal/clients/event-handler"; import prisma from "~/server/internal/db/database"; import saveManager from "~/server/internal/saves"; export default defineClientEventHandler( async (h3, { fetchClient, fetchUser }) => { const client = await fetchClient(); if (!client.capabilities.includes(ClientCapabilities.CloudSaves)) throw createError({ statusCode: 403, statusMessage: "Capability not allowed.", }); const user = await fetchUser(); const gameId = getRouterParam(h3, "gameid"); if (!gameId) throw createError({ statusCode: 400, statusMessage: "No gameID in route params", }); const slotIndexString = getRouterParam(h3, "slotindex"); if (!slotIndexString) throw createError({ statusCode: 400, statusMessage: "No slotIndex in route params", }); const slotIndex = parseInt(slotIndexString); if (Number.isNaN(slotIndex)) throw createError({ statusCode: 400, statusMessage: "Invalid slotIndex", }); const game = await prisma.game.findUnique({ where: { id: gameId }, select: { id: true }, }); if (!game) throw createError({ statusCode: 400, statusMessage: "Invalid game ID" }); await saveManager.pushSave( gameId, user.id, slotIndex, h3.node.req, client.id, ); return; }, );