No description
Extend the game flow from raw term rows to a complete GameSession matching the shared schema: - Add getDistractors model query: fetches N same-POS, same-difficulty, same-target-language terms excluding a given termId. Returns bare strings since distractors only need their display text. - Fix getGameTerms select clause to use the neutral field names (sourceText, targetText, sourceGloss) that the type already declared. - Rename gameService entry point to createGameSession; signature now takes a GameRequest and returns a GameSession. - Per question: fetch 3 distractors, combine with the correct answer, shuffle (Fisher-Yates), assign optionIds 0-3 by post-shuffle index, and assemble into a GameQuestion with a fresh UUID. - Wrap the questions in a GameSession with its own UUID. - Run per-question distractor fetches in parallel via Promise.all. Known gap: the correct option is not yet remembered server-side, so /game/answer cannot evaluate submissions. SessionStore lands next. |
||
|---|---|---|
| apps | ||
| data-sources | ||
| documentation | ||
| packages | ||
| scripts | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc | ||
| docker-compose.yml | ||
| eslint.config.mjs | ||
| mise.toml | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| tsconfig.base.json | ||
| tsconfig.json | ||
| vitest.config.ts | ||