2025-12-08 14:57:15 +00:00
|
|
|
|
// Команды mongosh для исправления незасчитанных рефералов
|
|
|
|
|
|
// Выполняйте по порядку
|
|
|
|
|
|
|
2025-12-08 15:12:23 +00:00
|
|
|
|
// ============================================
|
|
|
|
|
|
// БЫСТРАЯ КОМАНДА ДЛЯ ИСПРАВЛЕНИЯ ВСЕХ РЕФЕРАЛОВ
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// Скопируйте и выполните эту команду - она засчитает всех, у кого есть 2+ даты или возраст >24ч
|
|
|
|
|
|
//
|
|
|
|
|
|
// load('backend/scripts/fixAllReferrals.mongosh.js')
|
|
|
|
|
|
//
|
|
|
|
|
|
// ИЛИ выполните команды ниже вручную
|
|
|
|
|
|
|
2025-12-08 14:57:15 +00:00
|
|
|
|
// ============================================
|
|
|
|
|
|
// 1. НАЙТИ ВСЕХ ПОЛЬЗОВАТЕЛЕЙ С REFERREDBY (независимо от referralCounted)
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
db.users.find({
|
|
|
|
|
|
referredBy: { $exists: true, $ne: null }
|
|
|
|
|
|
}).forEach(function(user) {
|
|
|
|
|
|
print("Пользователь: " + (user.username || user._id));
|
|
|
|
|
|
print(" Реферер ID: " + user.referredBy);
|
|
|
|
|
|
print(" Засчитан: " + (user.referralCounted || false));
|
|
|
|
|
|
print(" Дат входа: " + (user.loginDates ? user.loginDates.length : 0));
|
|
|
|
|
|
if (user.loginDates && user.loginDates.length > 0) {
|
|
|
|
|
|
print(" Даты: " + user.loginDates.map(function(d) { return new Date(d).toLocaleDateString('ru-RU'); }).join(', '));
|
|
|
|
|
|
}
|
|
|
|
|
|
print("---");
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 2. НАЙТИ ВСЕХ С REFERREDBY И НЕ ЗАСЧИТАННЫХ (включая null и false)
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
db.users.find({
|
|
|
|
|
|
referredBy: { $exists: true, $ne: null },
|
|
|
|
|
|
$or: [
|
|
|
|
|
|
{ referralCounted: { $exists: false } },
|
|
|
|
|
|
{ referralCounted: null },
|
|
|
|
|
|
{ referralCounted: false }
|
|
|
|
|
|
]
|
|
|
|
|
|
}).forEach(function(user) {
|
|
|
|
|
|
print("Пользователь: " + (user.username || user._id));
|
|
|
|
|
|
print(" Реферер ID: " + user.referredBy);
|
|
|
|
|
|
print(" Дат входа: " + (user.loginDates ? user.loginDates.length : 0));
|
|
|
|
|
|
print("---");
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 3. ПРОВЕРИТЬ КОНКРЕТНОГО РЕФЕРЕРА (замените USER_ID)
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// db.users.find({ referredBy: ObjectId("69090d0b52ac792c78253963") }).forEach(function(u) {
|
|
|
|
|
|
// print(u.username + " - засчитан: " + (u.referralCounted || false) + ", дат: " + (u.loginDates ? u.loginDates.length : 0));
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 4. ПОСЧИТАТЬ СКОЛЬКО ВСЕГО С REFERREDBY
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// db.users.countDocuments({ referredBy: { $exists: true, $ne: null } })
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 5. ПОСЧИТАТЬ СКОЛЬКО НЕ ЗАСЧИТАННЫХ
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// db.users.countDocuments({
|
|
|
|
|
|
// referredBy: { $exists: true, $ne: null },
|
|
|
|
|
|
// $or: [
|
|
|
|
|
|
// { referralCounted: { $exists: false } },
|
|
|
|
|
|
// { referralCounted: null },
|
|
|
|
|
|
// { referralCounted: false }
|
|
|
|
|
|
// ]
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 6. ЗАСЧИТАТЬ ВСЕХ РЕФЕРАЛОВ С 2+ УНИКАЛЬНЫМИ ДАТАМИ
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
db.users.find({
|
|
|
|
|
|
referredBy: { $exists: true, $ne: null },
|
|
|
|
|
|
$or: [
|
|
|
|
|
|
{ referralCounted: { $exists: false } },
|
|
|
|
|
|
{ referralCounted: null },
|
|
|
|
|
|
{ referralCounted: false }
|
|
|
|
|
|
],
|
|
|
|
|
|
loginDates: { $exists: true, $ne: [] }
|
|
|
|
|
|
}).forEach(function(user) {
|
|
|
|
|
|
// Получить уникальные даты
|
|
|
|
|
|
var uniqueDates = new Set();
|
|
|
|
|
|
if (user.loginDates && Array.isArray(user.loginDates)) {
|
|
|
|
|
|
user.loginDates.forEach(function(date) {
|
|
|
|
|
|
if (!date) return;
|
|
|
|
|
|
var d = new Date(date);
|
|
|
|
|
|
d.setHours(0, 0, 0, 0);
|
|
|
|
|
|
uniqueDates.add(d.getTime());
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
print("Проверка: " + (user.username || user._id) + " - уникальных дат: " + uniqueDates.size);
|
|
|
|
|
|
|
|
|
|
|
|
// Если есть 2+ уникальные даты, засчитать
|
|
|
|
|
|
if (uniqueDates.size >= 2) {
|
|
|
|
|
|
var referrer = db.users.findOne({ _id: user.referredBy });
|
|
|
|
|
|
if (referrer) {
|
|
|
|
|
|
// Увеличить счетчик рефералов
|
|
|
|
|
|
var newCount = (referrer.referralsCount || 0) + 1;
|
|
|
|
|
|
db.users.updateOne(
|
|
|
|
|
|
{ _id: referrer._id },
|
|
|
|
|
|
{ $set: { referralsCount: newCount } }
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// Пометить как засчитанного
|
|
|
|
|
|
db.users.updateOne(
|
|
|
|
|
|
{ _id: user._id },
|
|
|
|
|
|
{
|
|
|
|
|
|
$set: {
|
|
|
|
|
|
referralCounted: true,
|
|
|
|
|
|
loginDates: []
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
print("✅ ЗАСЧИТАН: " + (user.username || user._id) + " -> " + (referrer.username || referrer._id) + " (счетчик: " + newCount + ")");
|
|
|
|
|
|
}
|
|
|
|
|
|
} else if (uniqueDates.size > 0) {
|
|
|
|
|
|
print("⏳ Нужно еще дат: " + (user.username || user._id) + " (сейчас: " + uniqueDates.size + ")");
|
|
|
|
|
|
} else {
|
|
|
|
|
|
print("📅 Нет дат входа: " + (user.username || user._id));
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 7. ПРОВЕРИТЬ РЕЗУЛЬТАТ - СКОЛЬКО РЕФЕРАЛОВ У КОНКРЕТНОГО ПОЛЬЗОВАТЕЛЯ
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// db.users.findOne({ _id: ObjectId("69090d0b52ac792c78253963") }, { username: 1, referralsCount: 1, referralCode: 1 })
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 8. НАЙТИ ВСЕХ РЕФЕРАЛОВ КОНКРЕТНОГО ПОЛЬЗОВАТЕЛЯ
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// db.users.find({ referredBy: ObjectId("69090d0b52ac792c78253963") }, { username: 1, referralCounted: 1, loginDates: 1 }).forEach(function(u) {
|
|
|
|
|
|
// var dates = u.loginDates ? u.loginDates.length : 0;
|
|
|
|
|
|
// print(u.username + " - засчитан: " + (u.referralCounted || false) + ", дат входа: " + dates);
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 9. ЗАСЧИТАТЬ ВСЕХ РЕФЕРАЛОВ КОНКРЕТНОГО ПОЛЬЗОВАТЕЛЯ
|
|
|
|
|
|
// (замените USER_ID на ID пользователя)
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
var userId = ObjectId("ЗАМЕНИТЕ_НА_ID_ПОЛЬЗОВАТЕЛЯ");
|
|
|
|
|
|
|
|
|
|
|
|
var user = db.users.findOne({ _id: userId });
|
|
|
|
|
|
if (!user) {
|
|
|
|
|
|
print("❌ Пользователь не найден!");
|
|
|
|
|
|
} else {
|
|
|
|
|
|
print("👤 Пользователь: " + (user.username || user._id));
|
|
|
|
|
|
print(" Текущий счетчик: " + (user.referralsCount || 0));
|
|
|
|
|
|
print("\n🔍 Поиск рефералов...\n");
|
|
|
|
|
|
|
|
|
|
|
|
var fixed = 0;
|
|
|
|
|
|
var needMoreDays = 0;
|
|
|
|
|
|
|
|
|
|
|
|
db.users.find({ referredBy: userId }).forEach(function(ref) {
|
|
|
|
|
|
if (ref.referralCounted === true) {
|
|
|
|
|
|
print("✅ " + (ref.username || ref._id) + " - уже засчитан");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var uniqueDates = new Set();
|
|
|
|
|
|
if (ref.loginDates && Array.isArray(ref.loginDates)) {
|
|
|
|
|
|
ref.loginDates.forEach(function(date) {
|
|
|
|
|
|
if (!date) return;
|
|
|
|
|
|
var d = new Date(date);
|
|
|
|
|
|
d.setHours(0, 0, 0, 0);
|
|
|
|
|
|
uniqueDates.add(d.getTime());
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (uniqueDates.size >= 2) {
|
|
|
|
|
|
var newCount = (user.referralsCount || 0) + 1;
|
|
|
|
|
|
db.users.updateOne({ _id: userId }, { $set: { referralsCount: newCount } });
|
|
|
|
|
|
db.users.updateOne({ _id: ref._id }, { $set: { referralCounted: true, loginDates: [] } });
|
|
|
|
|
|
user.referralsCount = newCount;
|
|
|
|
|
|
print("✅ ЗАСЧИТАН: " + (ref.username || ref._id) + " (счетчик: " + newCount + ")");
|
|
|
|
|
|
fixed++;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
print("⏳ " + (ref.username || ref._id) + " - нужно еще дат (сейчас: " + uniqueDates.size + ")");
|
|
|
|
|
|
needMoreDays++;
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
var finalUser = db.users.findOne({ _id: userId });
|
|
|
|
|
|
print("\n📊 Засчитано новых: " + fixed);
|
|
|
|
|
|
print("📈 Финальный счетчик: " + (finalUser.referralsCount || 0));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 10. НАЙТИ ПОЛЬЗОВАТЕЛЯ ПО USERNAME И ИСПРАВИТЬ ЕГО РЕФЕРАЛОВ
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// var user = db.users.findOne({ username: "USERNAME" });
|
|
|
|
|
|
// if (user) {
|
|
|
|
|
|
// var userId = user._id;
|
|
|
|
|
|
// // Затем выполните команды из пункта 9, заменив userId
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 11. УСТАНОВИТЬ referralCounted: false ДЛЯ ВСЕХ С REFERREDBY (если нужно сбросить)
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// db.users.updateMany(
|
|
|
|
|
|
// {
|
|
|
|
|
|
// referredBy: { $exists: true, $ne: null },
|
|
|
|
|
|
// referralCounted: { $ne: true }
|
|
|
|
|
|
// },
|
|
|
|
|
|
// {
|
|
|
|
|
|
// $set: { referralCounted: false }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// )
|