nakama/backend/scripts/checkReferralCodes.mongosh.js

78 lines
2.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Команды для проверки и исправления реферальных кодов
// Выполняйте в 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✅ Готово!");