如何处理用户在一段时间内可以发布的固定最大帖子数?

用户1354934

对不起,标题。

用户最多可以拥有 3 个活跃帖子,每个帖子的活跃时间为 48 小时。

我在想只是把active_post_{1/2/3}_idactive_post_{1/2/3}_expires_atusers表中,但不知道是否有要处理这样的事情更好的方法。

迈克·奥内克

我只会存储帖子的时间戳,并使用中间层逻辑将活动帖子的数量限制为三个。

如果你有一张像这样的桌子:

create table posts (
  id int generated always as identity,
  user_id int not null references users(id),
  created_at timestamptz not null,
  post_text text not null
);

您可以使用此查询获取活动帖子的数量,如果结果超过三个,则禁用用户创建新帖子的能力。

select count(*) 
  from posts
 where user_id = ?
   and created_at > now() - interval '48 hours';

这可能会被确定的攻击者通过应用程序中的多个活动会话击败,但如果这是一个问题,那么我将使用相同的逻辑将可见帖子限制为每个用户只能显示三个。拉取要显示的帖子列表时:

with rnums as (
  select user_id, created_at, post_text, 
         row_number() over (partition by user_id
                                order by created_at desc) as rn
    from posts
   where created_at > now() - interval '48 hours'
)
select user_id, created_at, post_text
  from rnums
 where rn <= 3
 order by user_id, created_at desc;

如果您想使用 PostgreSQL 来强制执行此约束,那么您需要将触发器纳入其中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章