В настоящее время я работаю над сайтом социальной сети типа Instgram, где пользователь может
- Зарегистрироваться
- Подписаться на других пользователей
- Блокировать других пользователей
- Можно ставить лайки и делиться постами других пользователей
- Закладка поста
Это очень типичный социальный сайт.
Мое требование - создать временную шкалу на основе активности пользователей, которой я следую, также я не должен видеть ни одного сообщения своих заблокированных пользователей.Для этого я использую следующий запрос:
MATCH (n:User {user_id:'5b89012a1134ec4daa491d64'})-[fr:FOLLOWS]->(f:User)-[p:CREATED|:SHARED|:LIKED]->(d:Post)
WHERE ( fr.is_blocked=false )
WITH d, n OPTIONAL MATCH (n)-[m:MYBID]->(d) WITH d,n,m as mybid_status
RETURN d, SIZE(()-[:LIKED]->(d) ) as likecount, SIZE( ()-[:SHARED]->(d) ) as sharecount,
SIZE( (n)-[:LIKED]->(d) ) as likestatus, SIZE( (n)-[:SHARED]->(d) ) as sharetatus,
SIZE( (n)-[:BOOKMARK]->(d) ) as bookmarkstatus, SIZE( (n)-[:REPORT]->(d) ) as reportstatus,
SIZE( (n)-[:MYBID]->(d) ) AS mybid, mybid_status,
SIZE( (n)-[:FOLLOWS]->(:User {user_id:d.owner_id}) ) as is_follow, count(*) as postcount
ORDER BY d.updated_at DESC
SKIP 0 LIMIT 10
Основная проблема этого запроса в том, что даже если я блокирую пользователя, я могу видеть его сообщение на своей временной шкале.Это из-за того, что пользователь уже сделал что-то подобное или поделился с любым другим сообщением.
Я использую пакет neo4j 3.4 и py2neo python.
Кто-нибудь может подсказать, где я делаю не так?
Любая помощь будет высоко оценена
Спасибо