Files
yourpart3/backend/controllers/taxiHighscoreController.js
Torsten Schulz (local) 42349e46c8 Änderung: Hinzufügen von TaxiHighscore-Logik und Verbesserung der API-Integration
Änderungen:
- Implementierung des neuen Routers für TaxiHighscore zur Verwaltung von Highscore-Daten.
- Anpassung der Datenbankmodelle zur Unterstützung von TaxiHighscore-Associations.
- Erweiterung der Vue-Komponenten zur Anzeige und Speicherung von Highscores im Taxi-Spiel.
- Verbesserung der Statusanzeige im AppHeader zur besseren Benutzerinteraktion.

Diese Anpassungen erweitern die Spielmechanik und Benutzererfahrung, indem sie die Verwaltung von Highscores integrieren und die Benutzeroberfläche optimieren.
2025-10-05 00:04:28 +02:00

199 lines
5.0 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 = {
userId: parseInt(userId),
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 } = req.params;
const { mapId } = req.query;
if (!userId) {
return res.status(400).json({
success: false,
message: 'userId ist erforderlich'
});
}
const bestScores = await taxiHighscoreService.getUserBestScores(
parseInt(userId),
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 } = req.params;
const { limit = 20 } = req.query;
if (!userId) {
return res.status(400).json({
success: false,
message: 'userId ist erforderlich'
});
}
const highscores = await taxiHighscoreService.getUserHighscores(
parseInt(userId),
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 } = req.params;
const { mapId, orderBy = 'points' } = req.query;
if (!userId) {
return res.status(400).json({
success: false,
message: 'userId ist erforderlich'
});
}
const rank = await taxiHighscoreService.getUserRank(
parseInt(userId),
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();