NodeJS показывает документы по меткам времени с задержкой - PullRequest
0 голосов
/ 25 февраля 2019

У меня 6 пользовательских уровней.Это то, что они должны делать:

  • 1-й уровень: просмотр сообщений, которые публикуются немедленно.
  • 2-й уровень: просмотр того же сообщения через 60 минут
  • 3-й уровень: см. Тот же пост через 120 минут
  • 4-й уровень: см. Тот же пост через 240 минут
  • 5-йуровень: см. тот же пост через 360 минут
  • 6-й уровень: см. тот же пост через 24 часа

Все пользователи получают своиtier настроить, когда они регистрируются на сайте.

Теперь, когда кто-то публикует данные на сайте, вот как выглядит структура документа в mongoose:

enter image description here

Для отметок времени, которые вы видите, я использую moment.js и просто обычную функцию: moment(); Все отметки времени здесь устанавливаются, когда уровни пользователей должны видеть сообщение.

Теперь янеобходимо получить эти документы по уровню аутентифицированного пользователя.Вот что я делаю сейчас:

app.get('/', async(req, res) => {
    if(req.session.user && req.cookies.user_sid){
        let user = await User.findOne({username:req.session.user.username});
        if(user.group = "Tier 1") {
            let advertisements = await Advertisement.find();
            res.render('index', {user, advertisements});
             // TIER 1 SEES ALL POSTS IMMEDIATELY.
        }
        if(user.group = "Tier 2") {
            let advertisements = await Advertisement.find();
            // Now I need some logic here so the tier 2 users could see post after 60 minutes from when it was posted.
            res.render('index', {user, advertisements});
        }        
    } else {
    res.render('index');
    }
});

Я не знаю, как получить результаты из tier 2

1 Ответ

0 голосов
/ 25 февраля 2019

Я думаю, что вы могли бы добиться большего успеха при хранении времени, когда каждое объявление было добавлено в систему, - таким образом, вы можете изменить фильтр для объектов Реклама на основе tier пользователя:

// Imagine the following Advertisements:
[
  {
    "name": "ad-1",
    "created_at": ISODate(2019-02-01)
  },
  {
    "name": "ad-2",
    "created_at": ISODate(2019-02-25)
  }
]

let offset;
if (user.group === "Tier-1") {
  offset = 0;
} else if (user.group === "Tier-2" {
  offset = 60 * 60 // remember, it's in seconds!
} else if (user.group === "Tier-3" {
  ....
}

const now = Date.now();

await db.Users.find({
  "created_at" < (now - offset)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...