ユーザーは通常、月のどの段階でもトークンを購入できるため、月は「30」日と定義されていますか?それともカレンダーの月の日に対応していますか? (例: トークンが 3 月に購入された場合、トークンは 31 日間持続しますが、5 月に購入された場合は 30 日間持続しますか?)
常に丸 1 か月。
なんで?あなたはユーザーに親切だからです;)
日付メソッドが単純であるため、丸 1 か月を選択します。また、メンバーの追跡が容易になります。2月末に最も多くのトークンを購入したい人には、31日がより良いオプションです. たとえば、1 月 31 日の購入は、2 月 28 日ではなく 3 月 3 日に有効期限が切れます。
もちろん自分で決めることもできますが、これが最も合理的な選択肢であり、顧客とのトラブルも少なくなります。
質問の 2 番目の部分は、これらのトークンをどのように追跡するかです。ユーザーが 1 年間のサブスクリプション (12 か月間、毎月 5 トークン) の料金を支払っているが、年間を通じて追加のトークンを購入することも許可されている場合 (6 月のユーザーが 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 日を今日と比較するだけなので、列を使用しないことを検討できます。
次の問題は、ユーザーが持っているトークンの合計をどのように計算するかです。
2 つのオプションがあります。1 つ目は、より優れた購入履歴とアーカイブがあります。
オプション1:
これはかなり簡単です。ユーザーがトークンを購入するたびに、上記の表に行を作成しますが、それを自分のユーザー テーブルの列に保存された合計金額に加算しますtokens
。
ユーザーがログインするたびに (または任意の時間に)、合計トークン数 (たとえば 165) を確認できます。
今日は 2 月 21 日なので、1 月 21 日以降に彼が購入したすべてのトークンを確認します。これらを合計すると、ユーザーが有効なトークンを 100+20+40=160 しか持てないことがわかります。そのため、彼のトークンを 5 つ削除して、1 月 20 日に購入した #10001 の 5 つのトークンが期限切れになるというメッセージを彼に送信します。
2 番目のオプション:
ユーザーがトークンを使用するときに、最も古い購入からトークンを削除するだけです。有効期限が切れたら、購入行全体を削除し、その購入の残りのトークンを効果的に削除します。