119 lines
4.4 KiB
JavaScript
119 lines
4.4 KiB
JavaScript
// Команды для исправления рефералов конкретного пользователя
|
||
// Замените USER_ID на ID пользователя, у которого должны быть рефералы
|
||
|
||
// ============================================
|
||
// 1. НАЙТИ ПОЛЬЗОВАТЕЛЯ ПО USERNAME ИЛИ ID
|
||
// ============================================
|
||
// var userId = db.users.findOne({ username: "USERNAME" })._id;
|
||
// или
|
||
// var userId = ObjectId("USER_ID");
|
||
|
||
// ============================================
|
||
// 2. НАЙТИ ВСЕХ РЕФЕРАЛОВ ЭТОГО ПОЛЬЗОВАТЕЛЯ
|
||
// ============================================
|
||
// db.users.find({ referredBy: userId }).forEach(function(ref) {
|
||
// print("Реферал: " + (ref.username || ref._id));
|
||
// print(" Засчитан: " + (ref.referralCounted || false));
|
||
// print(" Дат входа: " + (ref.loginDates ? ref.loginDates.length : 0));
|
||
// if (ref.loginDates && ref.loginDates.length > 0) {
|
||
// print(" Даты: " + ref.loginDates.map(function(d) { return new Date(d).toLocaleDateString('ru-RU'); }).join(', '));
|
||
// }
|
||
// print("---");
|
||
// });
|
||
|
||
// ============================================
|
||
// 3. ЗАСЧИТАТЬ ВСЕХ РЕФЕРАЛОВ КОНКРЕТНОГО ПОЛЬЗОВАТЕЛЯ
|
||
// (замените 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;
|
||
var alreadyCounted = 0;
|
||
|
||
db.users.find({ referredBy: userId }).forEach(function(ref) {
|
||
print("Реферал: " + (ref.username || ref._id));
|
||
|
||
// Если уже засчитан, пропускаем
|
||
if (ref.referralCounted === true) {
|
||
print(" ✅ Уже засчитан");
|
||
alreadyCounted++;
|
||
print("---\n");
|
||
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());
|
||
});
|
||
}
|
||
|
||
print(" Уникальных дат: " + uniqueDates.size);
|
||
if (uniqueDates.size > 0) {
|
||
var datesArray = Array.from(uniqueDates).map(function(t) {
|
||
return new Date(t).toLocaleDateString('ru-RU');
|
||
});
|
||
print(" Даты: " + datesArray.join(', '));
|
||
}
|
||
|
||
// Если есть 2+ уникальные даты, засчитать
|
||
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(" ✅ ЗАСЧИТАН! Новый счетчик: " + newCount);
|
||
fixed++;
|
||
} else if (uniqueDates.size > 0) {
|
||
print(" ⏳ Нужно еще " + (2 - uniqueDates.size) + " уникальных дат");
|
||
needMoreDays++;
|
||
} else {
|
||
print(" 📅 Нет дат входа");
|
||
needMoreDays++;
|
||
}
|
||
|
||
print("---\n");
|
||
});
|
||
|
||
print("\n📊 Итого:");
|
||
print(" ✅ Засчитано новых: " + fixed);
|
||
print(" ✅ Уже были засчитаны: " + alreadyCounted);
|
||
print(" ⏳ Требуется больше дней: " + needMoreDays);
|
||
|
||
// Обновить счетчик пользователя
|
||
var finalUser = db.users.findOne({ _id: userId });
|
||
print("\n 📈 Финальный счетчик рефералов: " + (finalUser.referralsCount || 0));
|
||
}
|
||
|