nakama/backend/scripts/checkReferralCodes.mongosh.js

78 lines
2.8 KiB
JavaScript
Raw Permalink Normal View History

2025-12-08 15:12:23 +00:00
// Команды для проверки и исправления реферальных кодов
// Выполняйте в mongosh
// ============================================
// 1. ПРОВЕРИТЬ ПОЛЬЗОВАТЕЛЕЙ БЕЗ REFERRALCODE
// ============================================
print("Пользователи без referralCode:\n");
db.users.find({
referralCode: { $exists: false }
}, {
username: 1,
telegramId: 1,
createdAt: 1
}).forEach(function(user) {
print(" - " + (user.username || user._id) + " (telegramId: " + user.telegramId + ")");
});
// ============================================
// 2. ПОСЧИТАТЬ СКОЛЬКО БЕЗ REFERRALCODE
// ============================================
// db.users.countDocuments({ referralCode: { $exists: false } })
// ============================================
// 3. ПОСМОТРЕТЬ ПРИМЕРЫ REFERRALCODE
// ============================================
print("\nПримеры referralCode в базе:\n");
db.users.find({
referralCode: { $exists: true }
}, {
username: 1,
referralCode: 1
}).limit(10).forEach(function(user) {
print(" " + (user.username || user._id) + ": " + user.referralCode);
});
// ============================================
// 4. НАЙТИ ПОЛЬЗОВАТЕЛЕЙ С REFERREDBY БЕЗ REFERRALCODE
// ============================================
print("\nПользователи с referredBy, но без referralCode:\n");
db.users.find({
referredBy: { $exists: true, $ne: null },
referralCode: { $exists: false }
}).forEach(function(user) {
print(" - " + (user.username || user._id) + " -> referredBy: " + user.referredBy);
});
// ============================================
// 5. СГЕНЕРИРОВАТЬ REFERRALCODE ДЛЯ ВСЕХ БЕЗ НЕГО
// ============================================
db.users.find({
referralCode: { $exists: false }
}).forEach(function(user) {
// Генерируем код по той же логике, что в модели
var code = "REF_" + user.telegramId.slice(-8) + Math.random().toString(36).substring(2, 6).toUpperCase();
// Проверяем уникальность
var exists = db.users.findOne({ referralCode: code });
var attempts = 0;
while (exists && attempts < 10) {
code = "REF_" + user.telegramId.slice(-8) + Math.random().toString(36).substring(2, 6).toUpperCase();
exists = db.users.findOne({ referralCode: code });
attempts++;
}
if (!exists) {
db.users.updateOne(
{ _id: user._id },
{ $set: { referralCode: code } }
);
print("✅ Сгенерирован код для " + (user.username || user._id) + ": " + code);
} else {
print("⚠️ Не удалось сгенерировать уникальный код для " + (user.username || user._id));
}
});
print("\n✅ Готово!");