38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { usePrisma } from "../../utils/prisma";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const user = await requireUser(event);
|
|
const body = await readBody(event);
|
|
|
|
const { gameName, score, nickname } = body;
|
|
if (!gameName || typeof score !== "number" || score < 0) {
|
|
throw createError({
|
|
statusCode: 400,
|
|
message: "gameName und score erforderlich",
|
|
});
|
|
}
|
|
|
|
const db = usePrisma();
|
|
const name = String(
|
|
nickname ||
|
|
user.user_metadata?.nickname ||
|
|
user.email?.split("@")[0] ||
|
|
"Anonym",
|
|
).slice(0, 30);
|
|
|
|
// Nur updaten wenn neuer Score besser ist
|
|
const existing = await db.gameHighScore.findUnique({
|
|
where: { userId_gameName: { userId: user.id, gameName } },
|
|
});
|
|
|
|
if (!existing || score > existing.score) {
|
|
await db.gameHighScore.upsert({
|
|
where: { userId_gameName: { userId: user.id, gameName } },
|
|
create: { userId: user.id, nickname: name, gameName, score },
|
|
update: { score, nickname: name },
|
|
});
|
|
}
|
|
|
|
return { ok: true, isNewBest: !existing || score > existing.score };
|
|
});
|