Доброго времени суток! Передо мной стоит такая задача (реализовать систему, которая позволяет):
1) пользователи могут создавать посты (дело обычное);
2) у поста может быть категория (дело обычное);
3) пользователь может быть подписан на:
3.1) новости (т.е. новые посты) из определённых категорий (подписки на категории)
3.2) на новости (т.е.) посты других пользователей.
Товарищи-программисты, дайте совет как такое реализовать??
Пока я остановился на следующему решении: 1) создаю таблицу подписок,
она будет содержать подписки на 2типа: категории и других пользователей (можно сделать и 2е таблицы, но думаю оставить одну, просто будет поле, отвечающее за "тип").
2) последний этап создания поста будет сводится к тому, что будет проверено, есть ли данные о категории этого поста или авторе в таблице, что я создал на первом этапе.
3) далее идём в 3ую таблицу (1=посты,2=подписки,3=соотнесения): все совпадения из второго этапа будут отмечены здесь:
каждый id (каждого поста) будет проставлен в true для каждого пользователя
4) на фронтенде при скроллинге: будут проверяться данные в контексте 3его этапа (3ей таблицы). Если true = буду показывать.
Минусы:
это действительно получается подписка. В случае если пользователь изменит данные своей подписки на посты или категории, то всё что было создано до его изменений - так и останется не отмеченным. В противном случае - нужно запускать крон и отлавливать изменения, но тогда система окажется реально прожёрливой. А тут и без того всё выходит накладно...
Как думайте, глупое ли я решение придумал и / или что посоветуйте?
Для правильного вопроса надо знать половину ответа
А зачем крон, повесьте пару триггеров на таблицу подписок, AFTER INSERT и AFTER DELETE. Другое дело, надо ли пользователю получать все посты, что были в этой теме до его подписки, там ведь могут быть сотни или тысячи постов.
А в остальном логика правильная, добавился пост - добавили в таблицу отметки для всех пользователей, которые подписаны на тему/автора. Увидел пользователь этот пост - убрали соответствующую отметку.
Спасибо за ответ! Это должно быть чем-то средним между подписками->информированием и по сути отсортированной лентой постов. Т.е. это всё равно, что поиск, но отсортированный по тому, на что юзер подписан. В итоге должна быть персонифицированная лента постов.