运行一个定期任务,更新每个用户的个人评级和组别(这会向 Codeforces API 发送大量请求)
运行一个定期任务,在比赛进行时进行处理。由于评级只会在比赛期间发生变化,如果用户的初始评级是一致的,通过实时处理评级变化,我可以仅更新发生变化的评级,并只需一次外部 API 调用即可保持一致性
实现一个自定义的评级和组别解析器。这样我需要存储上次获取的评级,并在下一次 GET rating/groups 请求时,如果评级已过期,则调用 Codeforces API 更新用户的评级和组别。这是我最倾向的方案,因为它看起来简单,并且最终总能保持一致性。不过,我不太确定如何实现它,或者动态地为用户移除和添加组别会带来什么后果。甚至不确定这作为插件是否完全可行。
after_initialize do
DiscourseEvent.on(:user_logged_in) do |user|
# 从 Codeforces 获取数据
if codeforce_rating > 1400
group = Group.find_by(name: group_1400)
if group
gu = GroupUser.find_by(group_id: group.id, user_id: user.id)
GroupUser.create(group_id: group.id, user_id: user.id) unless gu
end
end
end
end