40 lines
1.2 KiB
TypeScript

/**
* GET /api/games/highscore?gameName=<snake|tetris|memory|tictactoe>
*
* Liefert den Personal-Best-Score des aktuellen Users für ein bestimmtes Spiel.
* Wird bei SOS-Spielstart gefetcht, damit Lyra dem User seinen PB nennen kann
* ("Dein bester Score ist X — ich glaub an dich").
*
* Response:
* { score: number, hasRecord: boolean, updatedAt: string | null }
*
* Wenn kein Eintrag existiert: score=0, hasRecord=false. Lyra-Hint behandelt
* dann den Erst-Spielen-Fall ("Probier's, lass uns deinen ersten Score setzen!").
*/
import { usePrisma } from "../../utils/prisma";
export default defineEventHandler(async (event) => {
const user = await requireUser(event);
const query = getQuery(event);
const gameName = String(query.gameName ?? "").trim();
if (!gameName) {
throw createError({
statusCode: 400,
message: "gameName query param required",
});
}
const db = usePrisma();
const hs = await db.gameHighScore.findUnique({
where: { userId_gameName: { userId: user.id, gameName } },
select: { score: true, updatedAt: true },
});
return {
score: hs?.score ?? 0,
hasRecord: !!hs,
updatedAt: hs?.updatedAt?.toISOString() ?? null,
};
});