Bereinigen und Entfernen von nicht mehr benötigten TinyMCE-Dateien und -Plugins; Aktualisierung der Internationalisierung für Deutsch und Englisch in den Falukant- und Navigationsmodulen; Verbesserung der Statusleiste und Router-Implementierung.

This commit is contained in:
Torsten Schulz (local)
2025-08-21 16:10:21 +02:00
parent 53c748a074
commit 3eb7ae4e93
170 changed files with 3850 additions and 7924 deletions

View File

@@ -0,0 +1,53 @@
import BaseService from './BaseService.js';
import models from '../models/index.js';
import { Op } from 'sequelize';
const { MinigameCampaign, MinigameCampaignLevel, MinigameUserProgress, User } = models;
class MinigamesService extends BaseService {
async listCampaigns() {
const campaigns = await MinigameCampaign.findAll({ order: [['id', 'ASC']] });
return campaigns;
}
async getCampaign(code) {
const campaign = await MinigameCampaign.findOne({ where: { code }, include: [{ model: MinigameCampaignLevel, as: 'levels', order: [['index', 'ASC']] }] });
if (!campaign) throw new Error('campaign_not_found');
return campaign;
}
async getProgress(hashedUserId, code) {
const user = await this.getUserByHashedId(hashedUserId);
if (!user) throw new Error('user_not_found');
const campaign = await MinigameCampaign.findOne({ where: { code } });
if (!campaign) throw new Error('campaign_not_found');
const progress = await MinigameUserProgress.findOne({ where: { userId: user.id, campaignId: campaign.id } });
if (!progress) {
return { levelIndex: 1, stars: 0, bestScore: 0 };
}
return progress;
}
async saveProgress(hashedUserId, code, payload) {
const user = await this.getUserByHashedId(hashedUserId);
if (!user) throw new Error('user_not_found');
const campaign = await MinigameCampaign.findOne({ where: { code } });
if (!campaign) throw new Error('campaign_not_found');
const { levelIndex, stars, bestScore } = payload;
const [progress, created] = await MinigameUserProgress.findOrCreate({
where: { userId: user.id, campaignId: campaign.id },
defaults: { levelIndex, stars, bestScore }
});
if (!created) {
await progress.update({
levelIndex: Math.max(progress.levelIndex, levelIndex),
stars: Math.max(progress.stars, stars),
bestScore: Math.max(progress.bestScore, bestScore),
});
}
return { success: true };
}
}
export default new MinigamesService();