如何使用Node Express和Sequelize Postgress实现块用户特性



我有Postgres DB与user表。用户数据为'A', 'B'和'C'

-------------------------------------------------+
| user_id   |   name   |   email   |   is_active |
------------+----------+-----------+-------------+
|      1    |    A     |   a@a.in  |         1   |
------------+----------+-----------+-------------+
|      2    |    B     |   b@a.in  |         1   |
------------+----------+-----------+-------------+
|      3    |    C     |   c@a.in  |         1   |
--------------------------------------------------

我已经使用sequelize方法实现了列表所有用户api,但现在需要实现块用户功能,例如:如果用户'A'块用户'B',用户'A'不会获得用户'B'的数据,用户'B'也不会检索用户'A'的数据,但用户'C'需要获得用户'B'的数据,反之亦然。这里我需要实现块用户的功能,像Instagram或Facebook使用节点express和sequelize postgres。

您所描述的是用户对用户之间的多对多关系。这是通过创建一个交集表来解决的,该交集表定义了哪些用户阻塞了哪些其他用户。

create table user_blocks_user( user_id    integer references users(user_id) 
, blocked_id integer references users(user_id)
, constraint user_blocks_user_pk
primary key (user_id, blocked_id)
) ;

要列出目标用户没有阻止的用户,您将users连接到users,并消除存在于交集表中的条目。(见演示)

select bu.*
from users ub    -- user blocking
join users bu    -- blocked user
on true
where ub.user_id = <user_id>      -- targeted user
and ub.user_id <> bu.user_id    -- eliminate self  
and not exists (select null     -- eliminate users blocked by targeted user  
from user_blocks_user ubu
where ubu.user_id = ub.user_id 
and ubu.blocked_id = bu.user_id
);

对不起,但我不知道你的模糊语言(Node Express, Sequelize),所以我把翻译留给你,或者只是使用本地SQL。

相关内容

  • 没有找到相关文章

最新更新