コンテンツにスキップ

ログインストリーク集計機能

このページでは、脳活ラボのログインストリーク集計機能(streakSchedule)の詳細について説明します。

ログインストリーク集計機能は、ユーザーの連続ログイン状況を追跡し、ミッション達成に応じてポイントやメッセージを付与するバックエンド処理です。この機能は毎日0時に自動実行され、前日にログインしたすべてのユーザーのストリーク情報を更新します。

schedule: '0 0 * * *' // 毎日0時
timeZone: 'Asia/Tokyo'
  1. ログインユーザーの取得

    • 前日0時以降に作成されたログインログ(screenLogsコレクション)から、本日ログインした利用者のuidを取得します。
  2. ログインミッションの取得

    • システムに設定されているログインミッション情報を取得します。
    • ミッションには、レベルとゴール(達成に必要な連続ログイン日数)が設定されています。
  3. ユーザーごとの処理

    • ログインしたユーザーを10件ずつのバッチに分けて処理します。
    • 各ユーザーに対して、以下の処理を並列で実行します。

ユーザーごとに以下のストリーク計算処理が実行されます:

  1. ユーザーの最終アクション日時とストリーク情報の取得

    • 最終アクション日時:ユーザーが最後にアプリを使用した日時
    • ログインストリーク:現在のストリーク状況(連続ログイン日数、現在のミッションID)
  2. ストリークが存在しない場合

    • 新規ユーザーまたはストリーク情報がない場合は、新しいストリークを作成します。
    • 初期値:currentStreak = 1、最も低いレベルのミッションを設定
  3. 連続ログインが途切れた場合

    • 前日にログインしていない場合、ストリークはリセットされます。
    • リセット後のストリーク値:1つ前のミッションのゴール値(レベル1の場合は1)
    • 同じミッションIDを維持します。
  4. ミッション未達の場合

    • 現在のミッションのゴールに達していない場合、ストリーク値のみを更新します。
    • ミッションIDは変更されません。
  5. ミッション達成の場合

    • ストリーク値がミッションのゴール値と一致する場合、ミッション達成と判定されます。
    • ストリーク値を更新し、LINEメッセージ「ミッション達成」を送信します。
    • shouldShowMissionCompleteDialog フラグを true に設定します。
  6. ミッション達成後の初回ログイン

    • ミッション達成の翌日にログインした場合、次のレベルのミッションに進みます。
    • 最終ミッションを達成している場合は、現在のミッションを継続します。
    • 基本的には shouldShowMissionCompleteDialog フラグは false ですが、レベル間でストリーク値が1しか変わらない場合は true になります。
  7. 最終ミッション達成後のゴール超過

    • 最終ミッションを達成し、さらにログインを続けている場合、ストリーク値のみを更新します。
    • ミッションIDは変更されません。
  • ストリーク情報が存在しない
  • 新しいストリークを作成: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は変更なし