term_to 仕様整理term_to は有効期限を表すカラムだが、会員の有効性判定には使われていない。日常的な判定は status カラムのみで行われる。
PayJPの charge.succeeded webhookを受けたとき、term_to を翌月末に更新する。定期課金が走るたびに1ヶ月ずつ延びる仕組み。
「ある時点にこの会員は有効だったか」を term_from <= 基準日 < term_to で判定する。
1年/2年プランの更新通知に使用。満了月の前々月21日〜満了月10日を「更新期間」として計算。
| status | 判定 | 説明 |
|---|---|---|
| ACTIVE | 有効 | 通常の有効会員 |
| SCHEDULED_CANCEL | 有効 | 解約予定だがまだ有効 |
| SCHEDULED_CHANGE | 有効 | プラン変更予定だがまだ有効 |
| SCHEDULED_CONTINUE | 有効 | 継続申請済み |
| PENDING | 無効 | 保留中 |
| INACTIVE | 無効 | 無効化済み |
| PAUSED | 無効 | 一時停止中 |
| CANCELED | 無効 | 解約済み |
| USED | 無効 | 使用済み(単発) |
| FAILED | 無効 | 課金失敗 |
getAvailableUserMembershipPlan()(persistence層)、getValidMemberships()(フロントエンド)
term_to が過ぎたことをトリガーにして status を CANCELED にするバッチ処理は存在しない。
CANCELED への自動変更トリガーは以下の2つで、どちらも term_to は基準にしていない。
change_at が過ぎた SCHEDULED_CANCEL レコードを CANCELED に変更。
created_at + limit_month が過ぎた長期プランを CANCELED にし、新レコードを作成。
サブスク新規登録時。term_to = 現在日の翌月末。
charge.succeeded を受けて term_to = 現在日の翌月末に更新。最も頻繁に発火するパターン。
charge.failed 時。term_to は翌月末に設定されるが、status は SCHEDULED_CANCEL に変わる。
新レコード作成時に change_at の翌月末を設定。
新レコード作成時に翌月末を設定。