概要
ユーザー宛のシステム通知(フォロー、ランキング終了、選択肢申請、無料作成枠リセット 等)を Supabase notifications表 から取得し、HomeView のベルアイコンと NotificationListView で表示。
関連画面
通知タイプ
| type | 説明 | 発火条件 |
follow | フォローされた | 他ユーザーが follow() 実行時 |
ranking_ended | 投票したランキングが終了 | endsAt 経過時(バックエンドジョブ) |
choice_request | 選択肢申請を受信(作成者向け) | ChoiceRequestService.create() |
free_creation | 無料作成枠の通知 | FreeCreationNotificationService |
処理フロー
- HomeView 表示時に
NotificationService.fetchUnreadCount() で未読数取得
- ベルアイコンタップで NotificationListView 起動
- NotificationListView 表示時に
fetchNotifications(limit: 50)
- セルタップで
markAsRead(id) 実行 + 関連画面へ遷移
- 「すべて既読」で
markAllAsRead()
ビジネスルール
- 通知は時系列降順、最大50件表示
- 未読は背景色強調、既読は通常表示
- 通知タップで自動既読化
- プッシュ通知は v1.x で検討(現状はアプリ内通知のみ)
外部連携
| 連携先 | 用途 |
| Supabase notifications表 | 通知データ保存 |
| UserNotifications | v1.x プッシュ通知(未実装) |
エラー処理
| 発生条件 | 対応 |
| 通信失敗 | RetryHelper で再試行 |
| 該当ランキング削除済み | セルタップで「ランキングが見つかりません」 |
実装メモ
- NotificationService.fetchNotifications(limit:) で取得
- Logger.Notification カテゴリ
- プッシュ通知(APNs)は v1.x(要 .p8 キー登録)
変更履歴
| バージョン | 日付 | 変更内容 |
| 1.0 | 2026-05-09 | 初版作成 |