diff --git a/apps/api/src/gameSessionStore/GameSessionStore.ts b/apps/api/src/gameSessionStore/GameSessionStore.ts index 75d42cb..14e27b0 100644 --- a/apps/api/src/gameSessionStore/GameSessionStore.ts +++ b/apps/api/src/gameSessionStore/GameSessionStore.ts @@ -7,5 +7,6 @@ export interface GameSessionStore { ttlMs: number, ): Promise; get(sessionId: string): Promise; + update(sessionId: string, data: GameSessionData): Promise; delete(sessionId: string): Promise; -} +} \ No newline at end of file diff --git a/apps/api/src/gameSessionStore/InMemoryGameSessionStore.ts b/apps/api/src/gameSessionStore/InMemoryGameSessionStore.ts index 8ec2265..71e4b4c 100644 --- a/apps/api/src/gameSessionStore/InMemoryGameSessionStore.ts +++ b/apps/api/src/gameSessionStore/InMemoryGameSessionStore.ts @@ -24,6 +24,13 @@ export class InMemoryGameSessionStore implements GameSessionStore { return Promise.resolve(entry.data); } + update(sessionId: string, data: GameSessionData): Promise { + 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 { this.sessions.delete(sessionId); return Promise.resolve(); diff --git a/apps/api/src/services/gameService.ts b/apps/api/src/services/gameService.ts index 309fa1a..573f7a8 100644 --- a/apps/api/src/services/gameService.ts +++ b/apps/api/src/services/gameService.ts @@ -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 {