diff --git a/controllers/gameController.js b/controllers/gameController.js index 103e3a3..e261cd7 100644 --- a/controllers/gameController.js +++ b/controllers/gameController.js @@ -1,5 +1,6 @@ const { Game } = require('../models'); const { cacheUtils } = require('../config/redis'); +const { sequelize } = require('../config/database'); /** * Game Controller - Quản lý trò chơi giáo dục @@ -393,6 +394,40 @@ class GameController { } } + /** + * Get all unique game types + */ + async getGameTypes(req, res, next) { + try { + const cacheKey = 'games:types'; + + const cached = await cacheUtils.get(cacheKey); + if (cached) { + return res.json({ + success: true, + data: cached, + cached: true, + }); + } + + // Get distinct types + const types = await Game.aggregate('type', 'DISTINCT', { plain: false }); + + // Format response as array of objects + const result = types.map(t => ({ type: t.type })); + + await cacheUtils.set(cacheKey, result, 3600); + + res.json({ + success: true, + data: result, + cached: false, + }); + } catch (error) { + next(error); + } + } + /** * Get game statistics */ diff --git a/routes/gameRoutes.js b/routes/gameRoutes.js index 312f16d..bc53305 100644 --- a/routes/gameRoutes.js +++ b/routes/gameRoutes.js @@ -10,6 +10,9 @@ const gameController = require('../controllers/gameController'); // Get all games router.get('/', gameController.getAllGames); +// Get all game types +router.get('/types', gameController.getGameTypes); + // Get game statistics router.get('/stats', gameController.getGameStats);