如何使用Node Express和Sequelize Postgress实现屏蔽用户功能

问题描述 投票:0回答:1

我有 Postgres DB 和

user
表。具有用户数据“A”、“B”和“C”

-------------------------------------------------+
| user_id   |   name   |   email   |   is_active |
------------+----------+-----------+-------------+
|      1    |    A     |   [email protected]  |         1   |
------------+----------+-----------+-------------+
|      2    |    B     |   [email protected]  |         1   |
------------+----------+-----------+-------------+
|      3    |    C     |   [email protected]  |         1   |
--------------------------------------------------

我已经使用 sequelize 方法实现了列出所有用户 api,但现在需要实现阻止用户功能,例如:如果用户“A”阻止用户“B”,则用户“A”将不会获得用户“B”的数据并且用户“B”不会检索用户“A”的数据,但用户“C”需要获取用户“B”的数据,反之亦然。在这里,我需要使用 node express 和 sequelize postgres 实现与 Instagram 或 Facebook 相同的块用户功能。

node.js postgresql express sequelize.js
1个回答
1
投票

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

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
并消除交集表中存在的条目。 (见demo

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。

© www.soinside.com 2019 - 2024. All rights reserved.