Skip to content
Snippets Groups Projects
Commit e0b3127d authored by Fredrik Fonn Hansen's avatar Fredrik Fonn Hansen :8ball:
Browse files

Merge branch 'backend-highscore-fix' into 'main'

Backend highscore fix

See merge request !60
parents db45f25f cf187db7
No related branches found
No related tags found
1 merge request!60Backend highscore fix
Pipeline #215536 passed with stages
in 21 minutes and 5 seconds
import { Request, Response } from 'express'; import { Request, Response } from 'express';
import { Lobby } from '../models/Lobby';
import { GameHandler } from '../gameHandler';
import { getUserById } from '../functions/getUserById';
import { User } from '../../types/User'; import { User } from '../../types/User';
import admin from '../functions/firebaseAdmin';
import { IGame } from '../interfaces/IGame';
import { getTopUsers } from '../functions/firebaseCache'; import { getTopUsers } from '../functions/firebaseCache';
const gameHandler = GameHandler.getInstance();
export const top10 = async (req: Request, res: Response): Promise<void> => { export const top10 = async (req: Request, res: Response): Promise<void> => {
const topUsers = await getTopUsers(); const topUsers = await getTopUsers();
if (topUsers === null) { if (topUsers) {
res.status(204).send('No highscores found'); res.status(200).send(topUsers);
} else { } else {
const users = topUsers.docs.map( res.status(204).send('No highscores found');
(doc: any) =>
({
id: doc.id,
...doc.data(),
} as User)
);
res.status(200).send(users);
} }
}; };
...@@ -58,17 +58,13 @@ export async function getUsersIds(): Promise<any> { ...@@ -58,17 +58,13 @@ export async function getUsersIds(): Promise<any> {
* *
* @returns a list of users * @returns a list of users
*/ */
export async function getTopUsers(): Promise<any> { export async function getTopUsers(): Promise<User[] | null> {
const usersRef: CollectionReference = admin.firestore().collection('users'); const usersRef: CollectionReference = admin.firestore().collection('users');
const querySnapshot: Query = usersRef.orderBy('highscore', 'desc').limit(10); const querySnapshot: Query = usersRef.orderBy('highscore', 'desc').limit(10);
const cacheKey = 'topUsers'; const cacheKey = 'topUsers';
const responseMapper = (firestoreResponse: QueryDocumentSnapshot[]) => { const responseMapper = (firestoreResponse: QueryDocumentSnapshot[]) => {
return firestoreResponse.map((doc) => { return firestoreResponse.map((doc) => {
return { return { ...doc.data } as User;
id: doc.id,
username: doc.data().username,
highscore: doc.data().highscore,
};
}); });
}; };
return retrieveFromCache(querySnapshot, queryCache, cacheKey, responseMapper); return retrieveFromCache(querySnapshot, queryCache, cacheKey, responseMapper);
......
...@@ -107,7 +107,7 @@ router.post('/:gameid/move', gameController.move); ...@@ -107,7 +107,7 @@ router.post('/:gameid/move', gameController.move);
/** /**
* @swagger * @swagger
* /game/{id}/currentTurn: * /game/{gameId}/gameState:
* post: * post:
* tags: [Game] * tags: [Game]
* summary: Check current turn. * summary: Check current turn.
...@@ -171,7 +171,7 @@ router.post('/:gameid/move', gameController.move); ...@@ -171,7 +171,7 @@ router.post('/:gameid/move', gameController.move);
* tankType: * tankType:
* type: string * type: string
*/ */
router.get('/:gameid/currentTurn', gameController.currentTurn); router.get('/:gameid/gameState', gameController.currentTurn);
/** /**
* @swagger * @swagger
......
...@@ -5,7 +5,7 @@ const router = express.Router(); ...@@ -5,7 +5,7 @@ const router = express.Router();
/** /**
* @swagger * @swagger
* /lobby/{id}/leave: * /lobby/{lobbyId}/leave:
* post: * post:
* tags: [Lobby] * tags: [Lobby]
* summary: Leaves a lobby. * summary: Leaves a lobby.
...@@ -30,7 +30,7 @@ router.post('/:id/leave', lobbyController.leaveLobby); ...@@ -30,7 +30,7 @@ router.post('/:id/leave', lobbyController.leaveLobby);
/** /**
* @swagger * @swagger
* /lobby/{id}/join: * /lobby/{lobbyId}/join:
* post: * post:
* tags: [Lobby] * tags: [Lobby]
* summary: Joins a lobby. * summary: Joins a lobby.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment