正在做一个连续签到接口,遇到如何正确的显示签到进度问题
情况如下
数据库: 记录需要总签到天数 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 给指点一下。
1
Humorce 2017-11-02 00:44:12 +08:00 via iPhone 1
datetime 是可以计算时间差的。
|
2
hxsf 2017-11-02 00:52:46 +08:00 via iPhone
幂等的意思不是 执行不改变状态
而是执行一遍和多遍结果一致 |