fix: explicit store update in evaluateAnswer, remove mutation through reference

This commit is contained in:
lila 2026-04-28 15:47:53 +02:00
parent a02d3b3335
commit c081e632cf
3 changed files with 17 additions and 3 deletions

View file

@ -7,5 +7,6 @@ export interface GameSessionStore {
ttlMs: number,
): Promise<void>;
get(sessionId: string): Promise<GameSessionData | null>;
update(sessionId: string, data: GameSessionData): Promise<void>;
delete(sessionId: string): Promise<void>;
}

View file

@ -24,6 +24,13 @@ export class InMemoryGameSessionStore implements GameSessionStore {
return Promise.resolve(entry.data);
}
update(sessionId: string, data: GameSessionData): Promise<void> {
const entry = this.sessions.get(sessionId);
if (!entry) return Promise.resolve();
this.sessions.set(sessionId, { data, expiresAt: entry.expiresAt });
return Promise.resolve();
}
delete(sessionId: string): Promise<void> {
this.sessions.delete(sessionId);
return Promise.resolve();

View file

@ -96,10 +96,16 @@ export const evaluateAnswer = async (
throw new NotFoundError(`Question not found: ${submission.questionId}`);
}
session.answers.delete(submission.questionId);
const updatedAnswers = new Map(session.answers);
updatedAnswers.delete(submission.questionId);
if (session.answers.size === 0) {
if (updatedAnswers.size === 0) {
await store.delete(submission.sessionId);
} else {
await store.update(submission.sessionId, {
answers: updatedAnswers,
userId: session.userId,
});
}
return {