diff --git a/backend/middleware/auth.js b/backend/middleware/auth.js index 2bd5ff5..cb06616 100644 --- a/backend/middleware/auth.js +++ b/backend/middleware/auth.js @@ -174,11 +174,17 @@ const authenticate = async (req, res, next) => { if (!user) { // Обработка реферального кода из start_param let referredBy = null; - if (startParam && startParam.startsWith('ref_')) { - const referralCode = startParam; - const referrer = await User.findOne({ referralCode }); - if (referrer) { - referredBy = referrer._id; + if (startParam) { + // Проверяем регистронезависимо (может быть ref_ или REF_) + const normalizedStartParam = startParam.toLowerCase(); + if (normalizedStartParam.startsWith('ref_')) { + // Ищем реферера по коду (регистронезависимо) + const referrer = await User.findOne({ + referralCode: { $regex: new RegExp(`^${startParam}$`, 'i') } + }); + if (referrer) { + referredBy = referrer._id; + } } } @@ -195,6 +201,26 @@ const authenticate = async (req, res, next) => { // Счетчик рефералов увеличивается только когда пользователь создаст первый пост // (см. routes/posts.js) } else { + // Для существующих пользователей тоже можно установить referredBy, + // если они еще не создали пост и пришли по реферальной ссылке + if (startParam && !user.referredBy) { + const normalizedStartParam = startParam.toLowerCase(); + if (normalizedStartParam.startsWith('ref_')) { + const referrer = await User.findOne({ + referralCode: { $regex: new RegExp(`^${startParam}$`, 'i') } + }); + if (referrer) { + // Проверяем, создал ли пользователь уже посты + const Post = require('../models/Post'); + const userPostsCount = await Post.countDocuments({ author: user._id }); + if (userPostsCount === 0) { + // Пользователь еще не создал посты, можно установить referredBy + user.referredBy = referrer._id; + await user.save(); + } + } + } + } // Обновлять только если есть новые данные, не перезаписывать существующие пустыми значениями if (normalizedUser.username) { user.username = normalizedUser.username;