129 lines
3.9 KiB
JavaScript
129 lines
3.9 KiB
JavaScript
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();
|