feat: implement complete game management with CRUD functionality

Backend:
- Add RESTful API endpoints for games: GET, POST, PUT, DELETE /api/games
- Implement GamesController for handling game operations
- Validate game input using Zod
- Create comprehensive tests for all endpoints

Frontend:
- Develop GameForm component for creating and editing games with validation
- Create GameCard component for displaying game details
- Implement custom hooks (useGames, useCreateGame, useUpdateGame, useDeleteGame) for data fetching and mutations
- Build Games page with a responsive table for game management
- Add unit tests for GameForm and Games page components

Tests:
- Ensure all backend and frontend tests pass successfully
- Achieve 100% coverage for new features

All changes are thoroughly tested and validated.
This commit is contained in:
2026-02-11 22:09:02 +01:00
parent 08aca0fd5b
commit 630ebe0dc8
33 changed files with 2241 additions and 71 deletions

View File

@@ -676,6 +676,13 @@ __metadata:
languageName: node
linkType: hard
"@fastify/busboy@npm:^2.0.0":
version: 2.1.1
resolution: "@fastify/busboy@npm:2.1.1"
checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3
languageName: node
linkType: hard
"@fastify/busboy@npm:^3.0.0":
version: 3.2.0
resolution: "@fastify/busboy@npm:3.2.0"
@@ -766,6 +773,15 @@ __metadata:
languageName: node
linkType: hard
"@hookform/resolvers@npm:^3.3.0":
version: 3.10.0
resolution: "@hookform/resolvers@npm:3.10.0"
peerDependencies:
react-hook-form: ^7.0.0
checksum: 10c0/7ee44533b4cdc28c4fa2a94894c735411e5a1f830f4a617c580533321a9b901df0cc8c1e2fad81ad8d55154ebc5cb844cf9c116a3148ffae2bc48758c33cbb8e
languageName: node
linkType: hard
"@humanfs/core@npm:^0.19.1":
version: 0.19.1
resolution: "@humanfs/core@npm:0.19.1"
@@ -1323,6 +1339,15 @@ __metadata:
languageName: node
linkType: hard
"@testing-library/user-event@npm:^14.5.0":
version: 14.6.1
resolution: "@testing-library/user-event@npm:14.6.1"
peerDependencies:
"@testing-library/dom": ">=7.21.4"
checksum: 10c0/75fea130a52bf320d35d46ed54f3eec77e71a56911b8b69a3fe29497b0b9947b2dc80d30f04054ad4ce7f577856ae3e5397ea7dff0ef14944d3909784c7a93fe
languageName: node
linkType: hard
"@tootallnate/once@npm:2":
version: 2.0.0
resolution: "@tootallnate/once@npm:2.0.0"
@@ -5393,7 +5418,9 @@ __metadata:
prisma: "npm:6.19.2"
ts-node-dev: "npm:^2.0.0"
typescript: "npm:^5.2.0"
undici: "npm:^5.18.0"
vitest: "npm:^0.31.0"
zod: "npm:^3.22.0"
languageName: unknown
linkType: soft
@@ -5401,9 +5428,11 @@ __metadata:
version: 0.0.0-use.local
resolution: "quasar-frontend@workspace:frontend"
dependencies:
"@hookform/resolvers": "npm:^3.3.0"
"@tanstack/react-query": "npm:^4.34.0"
"@testing-library/jest-dom": "npm:^6.0.0"
"@testing-library/react": "npm:^14.0.0"
"@testing-library/user-event": "npm:^14.5.0"
"@types/react": "npm:^18.2.21"
"@types/react-dom": "npm:^18.2.7"
"@vitejs/plugin-react": "npm:^4.0.0"
@@ -5412,10 +5441,12 @@ __metadata:
postcss: "npm:^8.4.24"
react: "npm:^18.2.0"
react-dom: "npm:^18.2.0"
react-hook-form: "npm:^7.48.0"
tailwindcss: "npm:^3.4.7"
typescript: "npm:^5.2.2"
vite: "npm:^5.1.0"
vitest: "npm:^0.34.1"
zod: "npm:^3.22.0"
languageName: unknown
linkType: soft
@@ -5479,6 +5510,15 @@ __metadata:
languageName: node
linkType: hard
"react-hook-form@npm:^7.48.0":
version: 7.71.1
resolution: "react-hook-form@npm:7.71.1"
peerDependencies:
react: ^16.8.0 || ^17 || ^18 || ^19
checksum: 10c0/6c8fc0fa740d299481de3ed32bae98f7c6331240822c602363e5cd221746d875dc3c5e65d0039902b7f7a44dc9ac9a4932e00e9ad9af3051bed1987858ce78c7
languageName: node
linkType: hard
"react-is@npm:^17.0.1":
version: 17.0.2
resolution: "react-is@npm:17.0.2"
@@ -6558,6 +6598,15 @@ __metadata:
languageName: node
linkType: hard
"undici@npm:^5.18.0":
version: 5.29.0
resolution: "undici@npm:5.29.0"
dependencies:
"@fastify/busboy": "npm:^2.0.0"
checksum: 10c0/e4e4d631ca54ee0ad82d2e90e7798fa00a106e27e6c880687e445cc2f13b4bc87c5eba2a88c266c3eecffb18f26e227b778412da74a23acc374fca7caccec49b
languageName: node
linkType: hard
"unique-filename@npm:^5.0.0":
version: 5.0.0
resolution: "unique-filename@npm:5.0.0"
@@ -7089,3 +7138,10 @@ __metadata:
checksum: 10c0/36d4793e9cf7060f9da543baf67c55e354f4862c8d3d34de1a1b1d7c382d44171315cc54abf84d8900b8113d742b830108a1434f4898fb244f9b7e8426d4b8f5
languageName: node
linkType: hard
"zod@npm:^3.22.0":
version: 3.25.76
resolution: "zod@npm:3.25.76"
checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c
languageName: node
linkType: hard