由于用户通常可以在一个月的任何阶段购买代币,
是定义为“30”天的月份,或者它们是否映射到
日历月? (例如:如果代币是在 3 月份购买的,那么
它们持续 31 天,但如果在 5 月购买,它们持续 30 天?)
总是 1 个完整月。
为什么?因为你对你的用户很好;)
由于日期方法的简单性,我会选择整月。并且更容易跟踪成员。
对于喜欢在 2 月底购买最多代币的人来说,31 天是一个更好的选择。
例如,1 月 31 日的购买将在 3 月 3 日到期,而不是 2 月 28 日。
当然您可以自己决定,但这是最合理的选择,也可以确保您减少与客户的麻烦。
问题的第二部分是如何跟踪这些令牌?如果一个
用户支付一年的订阅费(每月 5 个令牌,共 12
个月),但也可以在期间购买更多代币
年(六月用户想要 10 个代币),我该如何实际保留
跟踪每个月购买了多少代币?
为每个代币购买创建一个表格,其中包含购买时间和日期以及代币数量。
TokenPurchaseNumber | UserId | TokenCount | PurchaseDateTime| ExpireDateTime
---------------------------------------------------------------------
10001 | 1 | 200 | Jan 20 | Feb 20
10002 | 1 | 100 | Jan 24 | Feb 24
10002 | 2 | 300 | Jan 24 | Feb 24
10003 | 1 | 20 | Jan 25 | Feb 25
10004 | 1 | 40 | Jan 29 | Feb 29
通过这种方式,您可以使用唯一的购买编号对所有购买进行良好存档,并且可以为用户生成购买历史记录。
您可以考虑不使用 ExpireDateTime 列,因为您只需将购买代币的日期 + 31 天与今天进行比较。
现在如何计算用户拥有的令牌总数似乎是下一个问题。
两个选项,第一个将有更好的购买历史和存档。
选项 1:
这相当简单,每次用户购买代币时,您都会在上表中创建一行,并将其加到他自己的用户表列tokens中保存的总金额中。
每次用户登录(或您想要的任何其他选择的时间)时,您都可以检查他们的总令牌,例如 165。
现在是 2 月 21 日,因此您可以查看他在 1 月 21 日之后购买的所有代币。我们把它们加起来,我们看到用户只能拥有 100+20+40=160 的可能数量的有效令牌。所以我们移除了他的 5 个代币并向他发送了一条消息,他在 1 月 20 日购买的 #10001 中的 5 个代币已过期。
第二个选项:
当用户使用它们时,只需从最旧的购买中移除代币。当到期日期到期时,删除整个购买行,有效地删除该购买的剩余令牌。