2

ユーザーが月単位でトークン/コインを購入する Web アプリに取り組んでいます。つまり、トークンは月末に期限切れになります (たとえば、3 ドルで 1 か月間 5 トークンを取得できます)。各ユーザーのトークンの保存と追跡に関して、どのような戦略を取るべきかについて少し混乱しています。

2 部構成の質問:

1) ユーザーは通常、月のどの段階でもトークンを購入できるため、月は「30」日と定義されていますか?それとも暦月の日に対応していますか? (例: トークンが 3 月に購入された場合、トークンは 31 日間持続しますが、5 月に購入された場合は 30 日間持続しますか?)

2) 質問の 2 番目の部分は、これらのトークンをどのように追跡するかです。ユーザーが 1 年間のサブスクリプション (12 か月間、毎月 5 トークン) の料金を支払っているが、年間を通じて追加のトークンを購入することも許可されている場合 (6 月のユーザーが 10 トークンを希望している場合)、実際にいくつのトークンを追跡するにはどうすればよいですか?トークンは毎月購入されていますか?

私はいくつかの実装のアイデアを念頭に置いていますが、どれも「正しい」とは思えません。誰かが同様の問題に取り組んでいるか、関連する文献を教えてくれることを望んでいました。

前もって感謝します。

4

3 に答える 3

4

ユーザーは通常、月のどの段階でもトークンを購入できるため、月は「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 番目のオプション:

ユーザーがトークンを使用するときに、最も古い購入からトークンを削除するだけです。有効期限が切れたら、購入行全体を削除し、その購入の残りのトークンを効果的に削除します。

于 2013-02-21T22:13:04.560 に答える
2

1) これはあなた次第です。トークンの有効期間が 30 日間であることと正確に 1 か月であることの間に大きな違いはないと思いますが、私の意見では、30 日間有効であることの方が優れています。それらを作りました。何を決定するにしても、それがユーザーに対して明確に説明されていることを確認してください。

2) トークンのグループごとに「有効期限」が異なる可能性があるため、これらをバックエンド データベースに個別に保存する必要があります。ユーザーがトークンを使用すると、残りのトークンの数がゼロになるまで減少します。

TokenGroupId | UserId | TotalTokens | RemainingTokens | Active | Expires
------------------------------------------------------------------------
6789         | 1234   | 5           | 2               | Mar 1  | Mar 31
6790         | 1235   | 5           | 5               | Mar 13 | Apr 12
于 2013-02-21T22:12:39.463 に答える
0

私はそのようなシステムを一度実装しなければなりませんでした。私は次のアイデアを使用して解決しました。

実際には、ユーザーのトークンの総数をデータベースに保存するのではなく、購入したトークンの数と組み合わせて各購入操作を保存します。

データベース構造は次のようになります。

- purchase_id
- user_id
- dollar_amount
- purchase_date
- expiration_date
- purchased_tokens
- remaining_tokens

ここで重要な点は、購入したトークンの有効期限を保存することです。たとえば、プロモーション操作のように、一部のトークンがより重要な期間を持つ場合があります。

購入したトークンの総数と残りのトークンの数も保存されます。ユーザーが持っているトークンの総数を保存しないため、実際に使用されたトークンを追跡する必要があるため、remaining_tokens有効期限が切れていないトークンを合計して合計を計算できます。

使用するトークンを選択するには、基本的に、購入した最も古いトークンを常に使用し、残りのトークンが 0 になったら次の購入から使用するという考え方です。

于 2013-02-21T22:20:08.377 に答える