feat(match3): Erweiterung der Match3-Admin-Funktionalitäten und -Modelle

- Implementierung neuer Endpunkte für die Verwaltung von Match3-Kampagnen, Levels, Objectives und Tile-Typen im Admin-Bereich.
- Anpassung der Admin-Services zur Unterstützung von Benutzerberechtigungen und Fehlerbehandlung.
- Einführung von neuen Modellen und Assoziationen für Match3-Levels und Tile-Typen in der Datenbank.
- Verbesserung der Internationalisierung für Match3-spezifische Texte in Deutsch und Englisch.
- Aktualisierung der Frontend-Routen und -Komponenten zur Verwaltung von Match3-Inhalten.
This commit is contained in:
Torsten Schulz (local)
2025-08-23 06:00:29 +02:00
parent 3eb7ae4e93
commit e168adeb51
40 changed files with 6474 additions and 1007 deletions

View File

@@ -139,41 +139,73 @@ class AdminController {
async getRoomTypes(req, res) {
try {
const types = await AdminService.getRoomTypes();
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const types = await AdminService.getRoomTypes(userId);
res.status(200).json(types);
} catch (error) {
console.log(error);
res.status(500).json({ error: error.message });
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.log(error);
res.status(500).json({ error: error.message });
}
}
}
async getGenderRestrictions(req, res) {
try {
const restrictions = await AdminService.getGenderRestrictions();
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const restrictions = await AdminService.getGenderRestrictions(userId);
res.status(200).json(restrictions);
} catch (error) {
console.log(error);
res.status(500).json({ error: error.message });
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.log(error);
res.status(500).json({ error: error.message });
}
}
}
async getUserRights(req, res) {
try {
const rights = await AdminService.getUserRights();
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const rights = await AdminService.getUserRights(userId);
res.status(200).json(rights);
} catch (error) {
console.log(error);
res.status(500).json({ error: error.message });
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.log(error);
res.status(500).json({ error: error.message });
}
}
}
async getRooms(req, res) {
try {
const rooms = await AdminService.getRooms();
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const rooms = await AdminService.getRooms(userId);
res.status(200).json(rooms);
} catch (error) {
console.log(error);
res.status(500).json({ error: error.message });
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.log(error);
res.status(500).json({ error: error.message });
}
}
}
@@ -251,6 +283,350 @@ class AdminController {
res.status(500).json({ error: error.message });
}
}
// --- Match3 Admin Methods ---
async getMatch3Campaigns(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const campaigns = await AdminService.getMatch3Campaigns(userId);
res.status(200).json(campaigns);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in getMatch3Campaigns:', error);
res.status(500).json({ error: error.message });
}
}
}
async getMatch3Campaign(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const campaign = await AdminService.getMatch3Campaign(userId, req.params.id);
res.status(200).json(campaign);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in getMatch3Campaign:', error);
res.status(500).json({ error: error.message });
}
}
}
async createMatch3Campaign(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const campaign = await AdminService.createMatch3Campaign(userId, req.body);
res.status(201).json(campaign);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in createMatch3Campaign:', error);
res.status(500).json({ error: error.message });
}
}
}
async updateMatch3Campaign(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const campaign = await AdminService.updateMatch3Campaign(userId, req.params.id, req.body);
res.status(200).json(campaign);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in updateMatch3Campaign:', error);
res.status(500).json({ error: error.message });
}
}
}
async deleteMatch3Campaign(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
await AdminService.deleteMatch3Campaign(userId, req.params.id);
res.sendStatus(204);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in deleteMatch3Campaign:', error);
res.status(500).json({ error: error.message });
}
}
}
async getMatch3Levels(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const levels = await AdminService.getMatch3Levels(userId);
res.status(200).json(levels);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in getMatch3Levels:', error);
res.status(500).json({ error: error.message });
}
}
}
async getMatch3Level(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const level = await AdminService.getMatch3Level(userId, req.params.id);
res.status(200).json(level);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in getMatch3Level:', error);
res.status(500).json({ error: error.message });
}
}
}
async createMatch3Level(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const level = await AdminService.createMatch3Level(userId, req.body);
res.status(201).json(level);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in createMatch3Level:', error);
res.status(500).json({ error: error.message });
}
}
}
async updateMatch3Level(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const level = await AdminService.updateMatch3Level(userId, req.params.id, req.body);
res.status(200).json(level);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in updateMatch3Level:', error);
res.status(500).json({ error: error.message });
}
}
}
async deleteMatch3Level(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
await AdminService.deleteMatch3Level(userId, req.params.id);
res.sendStatus(204);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in deleteMatch3Level:', error);
res.status(500).json({ error: error.message });
}
}
}
// Match3 Objectives
async getMatch3Objectives(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const objectives = await AdminService.getMatch3Objectives(userId);
res.status(200).json(objectives);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in getMatch3Objectives:', error);
res.status(500).json({ error: error.message });
}
}
}
async getMatch3Objective(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const objective = await AdminService.getMatch3Objective(userId, req.params.id);
res.status(200).json(objective);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in getMatch3Objective:', error);
res.status(500).json({ error: error.message });
}
}
}
async createMatch3Objective(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const objective = await AdminService.createMatch3Objective(userId, req.body);
res.status(201).json(objective);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in createMatch3Objective:', error);
res.status(500).json({ error: error.message });
}
}
}
async updateMatch3Objective(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const objective = await AdminService.updateMatch3Objective(userId, req.params.id, req.body);
res.status(200).json(objective);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in updateMatch3Objective:', error);
res.status(500).json({ error: error.message });
}
}
}
async deleteMatch3Objective(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
await AdminService.deleteMatch3Objective(userId, req.params.id);
res.sendStatus(204);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in deleteMatch3Objective:', error);
res.status(500).json({ error: error.message });
}
}
}
async getMatch3TileTypes(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const tileTypes = await AdminService.getMatch3TileTypes(userId);
res.status(200).json(tileTypes);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in getMatch3TileTypes:', error);
res.status(500).json({ error: error.message });
}
}
}
async createMatch3TileType(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const tileType = await AdminService.createMatch3TileType(userId, req.body);
res.status(201).json(tileType);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in createMatch3TileType:', error);
res.status(500).json({ error: error.message });
}
}
}
async updateMatch3TileType(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
const tileType = await AdminService.updateMatch3TileType(userId, req.params.id, req.body);
res.status(200).json(tileType);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in updateMatch3TileType:', error);
res.status(500).json({ error: error.message });
}
}
}
async deleteMatch3TileType(req, res) {
try {
const userId = req.headers.userid;
if (!userId) {
return res.status(401).json({ error: 'User ID fehlt' });
}
await AdminService.deleteMatch3TileType(userId, req.params.id);
res.sendStatus(204);
} catch (error) {
if (error.message === 'noaccess') {
res.status(403).json({ error: 'Keine Berechtigung für diese Aktion' });
} else {
console.error('Error in deleteMatch3TileType:', error);
res.status(500).json({ error: error.message });
}
}
}
}
export default AdminController;