V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kevinzhwl
V2EX  ›  编程

请教连续签到的问题

  •  
  •   kevinzhwl · 2017-11-02 00:25:24 +08:00 · 2636 次点击
    这是一个创建于 2597 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    情况如下

    数据库: 记录需要总签到天数 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 给指点一下。

    3 条回复    2017-11-02 10:46:58 +08:00
    Humorce
        1
    Humorce  
       2017-11-02 00:44:12 +08:00 via iPhone   ❤️ 1
    datetime 是可以计算时间差的。
    hxsf
        2
    hxsf  
       2017-11-02 00:52:46 +08:00 via iPhone
    幂等的意思不是 执行不改变状态
    而是执行一遍和多遍结果一致
    kevinzhwl
        3
    kevinzhwl  
    OP
       2017-11-02 10:46:58 +08:00
    @hxsf 这个解释比我理解的更准确,让我少了些纠结。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2859 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:45 · PVG 20:45 · LAX 04:45 · JFK 07:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.