请教连续签到的问题

2017-11-02 00:25:24 +08:00
 kevinzhwl

正在做一个连续签到接口,遇到如何正确的显示签到进度问题

情况如下

数据库: 记录需要总签到天数 dayMax,已经连续签到天数 dayCount,和最近一次签到时间 lastTime

一个 GET 接口,读取用户的签到进度,得到类似 dayCount/dayMax 一个 UPADTE 接口,用户签到,如果连续,则 dayCount 增加;如果不连续,则 dayCount=1,并更新 lastTime

现在的问题是如果用户中断签到后,再次打开页面,签到进度是 dayCount/dayMax,这个不符合业务逻辑;应该是 0/dayMax。

现在纠结三个不同解决方案,

方案 1,在 GET 接口中,对上述情况判断并处理,返回 0/dayMax,但不更新数据库(一般读取都在从库)。这样导致前端得到的数据和后台的看起来不一致。

方案 2,在 GET 接口中,对上述情况判断并处理,返回 0/dayMax,同时更新数据(只能在主库上做)。这样做消耗资源少,但违背了 GET 幂等性,带有副作用。

方案 3,增加定时任务,在某一时刻将所有不符合的条件的用户的 dayCount 都改为 0。这个方案符合规范,但开发量多,而且会造成短时对资源消耗大。

求哪位经验 dalao 给指点一下。

2549 次点击
所在节点    编程
3 条回复
Humorce
2017-11-02 00:44:12 +08:00
datetime 是可以计算时间差的。
hxsf
2017-11-02 00:52:46 +08:00
幂等的意思不是 执行不改变状态
而是执行一遍和多遍结果一致
kevinzhwl
2017-11-02 10:46:58 +08:00
@hxsf 这个解释比我理解的更准确,让我少了些纠结。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402789

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX