ログインストリーク集計機能
このページでは、脳活ラボのログインストリーク集計機能(streakSchedule)の詳細について説明します。
ログインストリーク集計機能は、ユーザーの連続ログイン状況を追跡し、ミッション達成に応じてポイントやメッセージを付与するバックエンド処理です。この機能は毎日0時に自動実行され、前日にログインしたすべてのユーザーのストリーク情報を更新します。
実行タイミング
Section titled “実行タイミング”schedule: '0 0 * * *' // 毎日0時timeZone: 'Asia/Tokyo'-
ログインユーザーの取得
- 前日0時以降に作成されたログインログ(screenLogsコレクション)から、本日ログインした利用者のuidを取得します。
-
ログインミッションの取得
- システムに設定されているログインミッション情報を取得します。
- ミッションには、レベルとゴール(達成に必要な連続ログイン日数)が設定されています。
-
ユーザーごとの処理
- ログインしたユーザーを10件ずつのバッチに分けて処理します。
- 各ユーザーに対して、以下の処理を並列で実行します。
ユーザーごとの処理詳細
Section titled “ユーザーごとの処理詳細”ストリーク計算ロジック
Section titled “ストリーク計算ロジック”ユーザーごとに以下のストリーク計算処理が実行されます:
-
ユーザーの最終アクション日時とストリーク情報の取得
- 最終アクション日時:ユーザーが最後にアプリを使用した日時
- ログインストリーク:現在のストリーク状況(連続ログイン日数、現在のミッションID)
-
ストリークが存在しない場合
- 新規ユーザーまたはストリーク情報がない場合は、新しいストリークを作成します。
- 初期値:currentStreak = 1、最も低いレベルのミッションを設定
-
連続ログインが途切れた場合
- 前日にログインしていない場合、ストリークはリセットされます。
- リセット後のストリーク値:1つ前のミッションのゴール値(レベル1の場合は1)
- 同じミッションIDを維持します。
-
ミッション未達の場合
- 現在のミッションのゴールに達していない場合、ストリーク値のみを更新します。
- ミッションIDは変更されません。
-
ミッション達成の場合
- ストリーク値がミッションのゴール値と一致する場合、ミッション達成と判定されます。
- ストリーク値を更新し、LINEメッセージ「ミッション達成」を送信します。
shouldShowMissionCompleteDialogフラグをtrueに設定します。
-
ミッション達成後の初回ログイン
- ミッション達成の翌日にログインした場合、次のレベルのミッションに進みます。
- 最終ミッションを達成している場合は、現在のミッションを継続します。
- 基本的には
shouldShowMissionCompleteDialogフラグはfalseですが、レベル間でストリーク値が1しか変わらない場合はtrueになります。
-
最終ミッション達成後のゴール超過
- 最終ミッションを達成し、さらにログインを続けている場合、ストリーク値のみを更新します。
- ミッションIDは変更されません。
例1: 新規ユーザーの場合
Section titled “例1: 新規ユーザーの場合”- ストリーク情報が存在しない
- 新しいストリークを作成:currentStreak = 1、最も低いレベルのミッションを設定
例2: 連続ログイン中のユーザー(ミッション未達)
Section titled “例2: 連続ログイン中のユーザー(ミッション未達)”- 現在のストリーク:3日
- 現在のミッション:レベル1、ゴール5日
- 処理後:currentStreak = 4、ミッションIDは変更なし
例3: ミッション達成のユーザー
Section titled “例3: ミッション達成のユーザー”- 現在のストリーク:4日
- 現在のミッション:レベル1、ゴール5日
- 処理後:currentStreak = 5、ミッションIDは変更なし、LINEメッセージ送信
例4: ミッション達成後の初回ログイン
Section titled “例4: ミッション達成後の初回ログイン”- 現在のストリーク:5日
- 現在のミッション:レベル1、ゴール5日
- 処理後:currentStreak = 6、ミッションIDをレベル2のものに変更
例5: 連続ログインが途切れたユーザー
Section titled “例5: 連続ログインが途切れたユーザー”- 現在のストリーク:10日
- 現在のミッション:レベル2、ゴール10日
- 最終アクション日時:2日前
- 処理後:currentStreak = レベル1のゴール値(例:5)、ミッションIDは変更なし