mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
@@ -10,10 +10,11 @@
|
||||
***********************************************************************************************************************************************************************/
|
||||
'use strict';
|
||||
|
||||
const { Op } = require('sequelize');
|
||||
const mdl_Achievements = require('../models/users/achievements.mdl');
|
||||
const mdl_Users = require('../models/users/users.mdl');
|
||||
const { EARLY_ACCESS_CUTOFF, ACHIEVEMENT_REGISTRY } = require('../data/achievements.data');
|
||||
const { Op } = require('sequelize');
|
||||
const mdl_Achievements = require('../models/users/achievements.mdl');
|
||||
const mdl_AchievementDefinitions = require('../models/users/achievement_definitions.mdl');
|
||||
const mdl_Users = require('../models/users/users.mdl');
|
||||
const { EARLY_ACCESS_CUTOFF } = require('../data/achievements.data');
|
||||
const UserNotification = require('../models/notifications/user_notification.mdl');
|
||||
const { NOTIFICATION_REGISTRY } = require('../data/notifications.data');
|
||||
|
||||
@@ -24,15 +25,15 @@ const { NOTIFICATION_REGISTRY } = require('../data/notifications.data');
|
||||
* Safe to call multiple times — idempotent via findOrCreate.
|
||||
*
|
||||
* @param {string|number} user_id
|
||||
* @param {string} key — must exist in ACHIEVEMENT_REGISTRY
|
||||
* @param {string} key — must exist in the achievement_definitions catalog
|
||||
* @param {Object} metadata — optional extra data (course_id, score, etc.)
|
||||
* @param {string|number} granted_by — null = system, user_id = admin manual grant
|
||||
* @returns {{ achievement, created }} or null on error
|
||||
*/
|
||||
async function grantAchievement(user_id, key, metadata = {}, granted_by = null) {
|
||||
const def = ACHIEVEMENT_REGISTRY[key];
|
||||
const def = await mdl_AchievementDefinitions.findOne({ where: { key, is_active: true } });
|
||||
if (!def) {
|
||||
console.warn(`[ACHIEVEMENTS] Unknown achievement key: "${key}"`);
|
||||
console.warn(`[ACHIEVEMENTS] Unknown or inactive achievement key: "${key}"`);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -47,6 +48,7 @@ async function grantAchievement(user_id, key, metadata = {}, granted_by = null)
|
||||
key: def.key,
|
||||
label: def.label,
|
||||
description: def.description,
|
||||
icon: def.icon,
|
||||
granted_by: granted_by ?? null,
|
||||
granted_at: new Date(),
|
||||
metadata,
|
||||
@@ -140,7 +142,6 @@ async function backfillEarlyAccess() {
|
||||
// ─── Exports ──────────────────────────────────────────────────────────────────
|
||||
|
||||
module.exports = {
|
||||
ACHIEVEMENT_REGISTRY,
|
||||
grantAchievement,
|
||||
|
||||
// Convenience triggers
|
||||
|
||||
Reference in New Issue
Block a user