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

rkue9o1l  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(353)

对不起,蒂特莱戈尔。
用户最多可以有3个活动帖子,每个帖子的活动时间为48小时。
我在想 active_post_{1/2/3}_id 以及 active_post_{1/2/3}_expires_atusers 但是不知道有没有更好的方法来处理这样的事情。

qyyhg6bp

qyyhg6bp1#

我只存储post的时间戳,并使用中间层逻辑将活动post的数量限制为3个。
如果你有这样一张table:

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来强制这个约束,那么您需要将触发器引入到混合中。

相关问题