Komplettes AdivmentSystem überarbeitet!
This commit is contained in:
@@ -874,6 +874,23 @@ router.post('/v1/private/create-time', requireApiKey, async (req, res) => {
|
||||
[rfiduid, location_id, recorded_time, new Date()]
|
||||
);
|
||||
|
||||
// Achievement-Überprüfung nach Zeit-Eingabe (JavaScript)
|
||||
try {
|
||||
const AchievementSystem = require('../lib/achievementSystem');
|
||||
const achievementSystem = new AchievementSystem();
|
||||
const newAchievements = await achievementSystem.checkImmediateAchievements(result.rows[0].player_id);
|
||||
|
||||
if (newAchievements.length > 0) {
|
||||
console.log(`🏆 ${newAchievements.length} neue Achievements für Spieler ${result.rows[0].player_id}:`);
|
||||
newAchievements.forEach(achievement => {
|
||||
console.log(` ${achievement.icon} ${achievement.name} (+${achievement.points} Punkte)`);
|
||||
});
|
||||
}
|
||||
} catch (achievementError) {
|
||||
console.error('Fehler bei Achievement-Check:', achievementError);
|
||||
// Achievement-Fehler sollen die Zeit-Eingabe nicht blockieren
|
||||
}
|
||||
|
||||
// WebSocket-Event senden für Live-Updates
|
||||
const io = req.app.get('io');
|
||||
if (io) {
|
||||
@@ -2503,10 +2520,18 @@ router.post('/v1/admin/runs', requireAdminAuth, async (req, res) => {
|
||||
[player_id, location_id, timeInterval]
|
||||
);
|
||||
|
||||
// Achievement-Überprüfung nach Zeit-Eingabe
|
||||
// Achievement-Überprüfung nach Zeit-Eingabe (JavaScript)
|
||||
try {
|
||||
await pool.query('SELECT check_immediate_achievements($1)', [player_id]);
|
||||
console.log(`✅ Achievement-Check für Spieler ${player_id} ausgeführt`);
|
||||
const AchievementSystem = require('../lib/achievementSystem');
|
||||
const achievementSystem = new AchievementSystem();
|
||||
const newAchievements = await achievementSystem.checkImmediateAchievements(player_id);
|
||||
|
||||
if (newAchievements.length > 0) {
|
||||
console.log(`🏆 ${newAchievements.length} neue Achievements für Spieler ${player_id}:`);
|
||||
newAchievements.forEach(achievement => {
|
||||
console.log(` ${achievement.icon} ${achievement.name} (+${achievement.points} Punkte)`);
|
||||
});
|
||||
}
|
||||
} catch (achievementError) {
|
||||
console.error('Fehler bei Achievement-Check:', achievementError);
|
||||
// Achievement-Fehler sollen die Zeit-Eingabe nicht blockieren
|
||||
@@ -3048,14 +3073,16 @@ router.get('/achievements/player/:playerId', async (req, res) => {
|
||||
a.category,
|
||||
a.icon,
|
||||
a.points,
|
||||
COALESCE(pa.progress, 0) as progress,
|
||||
COALESCE(pa.is_completed, false) as is_completed,
|
||||
pa.earned_at
|
||||
COALESCE(MAX(pa.progress), 0) as progress,
|
||||
COALESCE(COUNT(pa.id) > 0, false) as is_completed,
|
||||
MAX(pa.earned_at) as earned_at,
|
||||
COUNT(pa.id) as completion_count
|
||||
FROM achievements a
|
||||
LEFT JOIN player_achievements pa ON a.id = pa.achievement_id AND pa.player_id = $1
|
||||
LEFT JOIN player_achievements pa ON a.id = pa.achievement_id AND pa.player_id = $1 AND pa.is_completed = true
|
||||
WHERE a.is_active = true
|
||||
GROUP BY a.id, a.name, a.name_en, a.description, a.description_en, a.category, a.icon, a.points
|
||||
ORDER BY
|
||||
pa.is_completed DESC,
|
||||
is_completed DESC,
|
||||
a.category,
|
||||
a.points DESC
|
||||
`, [playerId]);
|
||||
@@ -3092,10 +3119,10 @@ router.get('/achievements/player/:playerId/stats', async (req, res) => {
|
||||
WHERE is_active = true
|
||||
`);
|
||||
|
||||
// Get player's earned achievements
|
||||
// Get player's earned achievements (count unique achievements, not total completions)
|
||||
const playerResult = await pool.query(`
|
||||
SELECT
|
||||
COUNT(CASE WHEN pa.is_completed = true THEN 1 END) as completed_achievements,
|
||||
COUNT(DISTINCT CASE WHEN pa.is_completed = true THEN pa.achievement_id END) as completed_achievements,
|
||||
SUM(CASE WHEN pa.is_completed = true THEN a.points ELSE 0 END) as total_points,
|
||||
COUNT(CASE WHEN pa.is_completed = true AND DATE(pa.earned_at AT TIME ZONE 'Europe/Berlin') = CURRENT_DATE THEN 1 END) as achievements_today
|
||||
FROM achievements a
|
||||
|
||||
Reference in New Issue
Block a user