import match3Service from '../services/match3Service.js'; class Match3Controller { /** * Lädt alle aktiven Kampagnen */ async getCampaigns(req, res) { try { const campaigns = await match3Service.getActiveCampaigns(); res.json({ success: true, data: campaigns }); } catch (error) { console.error('Error in getCampaigns:', error); res.status(500).json({ success: false, message: 'Fehler beim Laden der Kampagnen' }); } } /** * Lädt eine spezifische Kampagne */ async getCampaign(req, res) { try { const { campaignId } = req.params; const campaign = await match3Service.getCampaign(campaignId); if (!campaign) { return res.status(404).json({ success: false, message: 'Kampagne nicht gefunden' }); } res.json({ success: true, data: campaign }); } catch (error) { console.error('Error in getCampaign:', error); res.status(500).json({ success: false, message: 'Fehler beim Laden der Kampagne' }); } } /** * Lädt den Benutzerfortschritt für eine Kampagne */ async getUserProgress(req, res) { try { const { campaignId } = req.params; const userId = req.headers.userid || req.user?.id; if (!userId) { return res.status(401).json({ success: false, message: 'Benutzer-ID nicht gefunden' }); } const userProgress = await match3Service.getUserProgress(userId, campaignId); res.json({ success: true, data: userProgress }); } catch (error) { console.error('Error in getUserProgress:', error); res.status(500).json({ success: false, message: 'Fehler beim Laden des Fortschritts' }); } } /** * Aktualisiert den Level-Fortschritt eines Benutzers */ async updateLevelProgress(req, res) { try { const { campaignId, levelId } = req.params; const userId = req.headers.userid || req.user?.id; const { score, moves, time, stars, isCompleted } = req.body; if (!userId) { return res.status(401).json({ success: false, message: 'Benutzer-ID nicht gefunden' }); } if (!score || !moves || !stars) { return res.status(400).json({ success: false, message: 'Alle erforderlichen Felder müssen ausgefüllt werden' }); } const levelData = { score: parseInt(score), moves: parseInt(moves), time: time ? parseInt(time) : 0, stars: parseInt(stars), isCompleted: Boolean(isCompleted) }; const result = await match3Service.updateLevelProgress(userId, campaignId, levelId, levelData); res.json({ success: true, data: result }); } catch (error) { console.error('Error in updateLevelProgress:', error); res.status(500).json({ success: false, message: 'Fehler beim Aktualisieren des Fortschritts' }); } } /** * Lädt die Bestenliste für eine Kampagne */ async getLeaderboard(req, res) { try { const { campaignId } = req.params; const { limit = 10 } = req.query; const leaderboard = await match3Service.getLeaderboard(campaignId, parseInt(limit)); res.json({ success: true, data: leaderboard }); } catch (error) { console.error('Error in getLeaderboard:', error); res.status(500).json({ success: false, message: 'Fehler beim Laden der Bestenliste' }); } } /** * Lädt Statistiken für einen Benutzer */ async getUserStats(req, res) { try { const userId = req.headers.userid || req.user?.id; if (!userId) { return res.status(401).json({ success: false, message: 'Benutzer-ID nicht gefunden' }); } const stats = await match3Service.getUserStats(userId); res.json({ success: true, data: stats }); } catch (error) { console.error('Error in getUserStats:', error); res.status(500).json({ success: false, message: 'Fehler beim Laden der Statistiken' }); } } } export default new Match3Controller();