Files
yourpart3/backend/controllers/taxiHighscoreController.js
Torsten Schulz (local) 1bde46430b Änderung: Anpassung der TaxiHighscore-API und Verbesserung der Highscore-Anzeige im Taxi-Spiel
Änderungen:
- Umbenennung des API-Endpunkts für Highscores von `/api/taxi/highscore` zu `/api/taxi/highscores`.
- Anpassung der Highscore-Datenstruktur zur Verwendung von `hashedUserId` anstelle von `userId`.
- Erweiterung der Router-Logik zur besseren Organisation der Highscore-Abfragen.
- Implementierung einer neuen Highscore-Anzeige im Spiel, die die Top 20 Spieler und den aktuellen Spieler anzeigt.

Diese Anpassungen verbessern die API-Konsistenz und erweitern die Benutzeroberfläche für die Highscore-Anzeige im Spiel.
2025-10-05 12:42:37 +02:00

196 lines
5.1 KiB
JavaScript

import taxiHighscoreService from '../services/taxiHighscoreService.js';
class TaxiHighscoreController {
/**
* Erstellt oder aktualisiert einen Highscore-Eintrag
*/
async createHighscore(req, res) {
try {
const { userId, nickname, passengersDelivered, playtime, points, mapId, mapName } = req.body;
// Validierung der erforderlichen Felder
if (!userId || !nickname || passengersDelivered === undefined || playtime === undefined || points === undefined || !mapId || !mapName) {
return res.status(400).json({
success: false,
message: 'Alle Felder sind erforderlich: userId, nickname, passengersDelivered, playtime, points, mapId, mapName'
});
}
const highscoreData = {
hashedUserId: userId, // userId ist bereits ein String (Hash)
nickname,
passengersDelivered: parseInt(passengersDelivered),
playtime: parseInt(playtime),
points: parseInt(points),
mapId: parseInt(mapId),
mapName
};
const highscore = await taxiHighscoreService.createHighscore(highscoreData);
res.status(200).json({
success: true,
data: highscore,
message: 'Highscore erfolgreich gespeichert'
});
} catch (error) {
console.error('Fehler beim Erstellen des Highscores:', error);
res.status(500).json({
success: false,
message: 'Fehler beim Speichern des Highscores',
error: error.message
});
}
}
/**
* Holt die Top-Highscores
*/
async getTopHighscores(req, res) {
try {
const { mapId, limit = 10, orderBy = 'points' } = req.query;
const highscores = await taxiHighscoreService.getTopHighscores(
mapId ? parseInt(mapId) : null,
parseInt(limit),
orderBy
);
res.status(200).json({
success: true,
data: highscores
});
} catch (error) {
console.error('Fehler beim Laden der Top-Highscores:', error);
res.status(500).json({
success: false,
message: 'Fehler beim Laden der Highscores',
error: error.message
});
}
}
/**
* Holt die persönlichen Bestleistungen eines Users
*/
async getUserBestScores(req, res) {
try {
const { userId, mapId } = req.query;
if (!userId) {
return res.status(400).json({
success: false,
message: 'userId ist erforderlich'
});
}
const bestScores = await taxiHighscoreService.getUserBestScores(
userId, // userId ist bereits ein String (Hash)
mapId ? parseInt(mapId) : null
);
res.status(200).json({
success: true,
data: bestScores
});
} catch (error) {
console.error('Fehler beim Laden der User-Bestleistungen:', error);
res.status(500).json({
success: false,
message: 'Fehler beim Laden der Bestleistungen',
error: error.message
});
}
}
/**
* Holt alle Highscores eines Users
*/
async getUserHighscores(req, res) {
try {
const { userId, limit = 20 } = req.query;
if (!userId) {
return res.status(400).json({
success: false,
message: 'userId ist erforderlich'
});
}
const highscores = await taxiHighscoreService.getUserHighscores(
userId, // userId ist bereits ein String (Hash)
parseInt(limit)
);
res.status(200).json({
success: true,
data: highscores
});
} catch (error) {
console.error('Fehler beim Laden der User-Highscores:', error);
res.status(500).json({
success: false,
message: 'Fehler beim Laden der User-Highscores',
error: error.message
});
}
}
/**
* Holt die Rangliste-Position eines Users
*/
async getUserRank(req, res) {
try {
const { userId, mapId, orderBy = 'points' } = req.query;
if (!userId) {
return res.status(400).json({
success: false,
message: 'userId ist erforderlich'
});
}
const rank = await taxiHighscoreService.getUserRank(
userId, // userId ist bereits ein String (Hash)
mapId ? parseInt(mapId) : null,
orderBy
);
res.status(200).json({
success: true,
data: { rank }
});
} catch (error) {
console.error('Fehler beim Berechnen der User-Rangliste:', error);
res.status(500).json({
success: false,
message: 'Fehler beim Berechnen der Rangliste',
error: error.message
});
}
}
/**
* Holt Statistiken über die Highscores
*/
async getHighscoreStats(req, res) {
try {
const stats = await taxiHighscoreService.getHighscoreStats();
res.status(200).json({
success: true,
data: stats
});
} catch (error) {
console.error('Fehler beim Laden der Highscore-Statistiken:', error);
res.status(500).json({
success: false,
message: 'Fehler beim Laden der Statistiken',
error: error.message
});
}
}
}
export default new TaxiHighscoreController();