33 lines
1.1 KiB
JavaScript
33 lines
1.1 KiB
JavaScript
import MinigamesService from '../services/minigamesService.js';
|
|
|
|
function extractHashedUserId(req) {
|
|
return req.headers?.userid;
|
|
}
|
|
|
|
class MinigamesController {
|
|
constructor() {
|
|
this.service = MinigamesService;
|
|
|
|
this.listCampaigns = this._wrap((userId, req) => this.service.listCampaigns());
|
|
this.getCampaign = this._wrap((userId, req) => this.service.getCampaign(req.params.code));
|
|
this.getProgress = this._wrap((userId, req) => this.service.getProgress(userId, req.params.code));
|
|
this.saveProgress = this._wrap((userId, req) => this.service.saveProgress(userId, req.params.code, req.body));
|
|
}
|
|
|
|
_wrap(fn, { successStatus = 200 } = {}) {
|
|
return async (req, res) => {
|
|
try {
|
|
const userId = extractHashedUserId(req);
|
|
if (!userId) return res.status(400).json({ error: 'Missing user identifier' });
|
|
const result = await fn(userId, req, res);
|
|
res.status(successStatus).json(result);
|
|
} catch (error) {
|
|
console.error('Minigames controller error:', error);
|
|
res.status(500).json({ error: error.message || 'Internal error' });
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
export default new MinigamesController();
|