|
|
@@ -2,7 +2,9 @@
|
|
|
|
|
|
## Introduction
|
|
|
|
|
|
-GROWI の InAppNotification にニュース配信・表示機能を追加する。外部の静的 JSON フィード(GitHub Pages)を GROWI 本体が cron で定期取得し、ローカル MongoDB にキャッシュした上で、InAppNotification の各 UI(ドロップダウン、サイドバー、通知ページ)にニュースとして表示する。ユーザーごとの既読/未読管理、ロール別の表示制御、多言語対応を含む。
|
|
|
+GROWI の InAppNotification にニュース配信・表示機能を追加する。外部の静的 JSON フィード(GitHub Pages)を GROWI 本体が cron で定期取得し、ローカル MongoDB にキャッシュした上で、InAppNotificationパネルおよび通知一覧ページにニュースとして表示する。
|
|
|
+
|
|
|
+ニュースは既存の InAppNotification とは別モデル(NewsItem)として管理する。InAppNotification はユーザーアクション起因で関係者のみに配信されるのに対し、ニュースは全ユーザー(またはロール単位)に配信されるため、1件のニュースを全ユーザーで共有する設計が SaaS 規模で効率的である。UI ではクライアント側で両データを時系列マージして統合表示する。
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
@@ -45,15 +47,16 @@ GROWI の InAppNotification にニュース配信・表示機能を追加する
|
|
|
|
|
|
### Requirement 4: ロール別表示制御
|
|
|
|
|
|
-**Objective:** As a GROWI 管理者, I want ニュースの表示対象をロールで制御したい, so that 管理者向け情報を一般ユーザーに見せない
|
|
|
+**Objective:** As a GROWI 運営者, I want ニュースの表示対象をロールで制御したい, so that 管理者向け情報を一般ユーザーに見せない
|
|
|
+
|
|
|
+**Note:** 表示制御はニュース配信側(GROWI運営)がフィードJSON内の `conditions.targetRoles` で指定する。インスタンス側(GROWI管理者)による制御は設けない。
|
|
|
|
|
|
#### Acceptance Criteria
|
|
|
|
|
|
1. When ニュースアイテムに `conditions.targetRoles` が設定されている場合, the News API shall ユーザーのロール(admin/general)に基づいてフィルタリングする
|
|
|
-2. Where GROWI の設定で `app:newsTargetRole` が `admin_only` に設定されている場合, the News API shall 管理者以外のユーザーにはニュースを返却しない
|
|
|
-3. When ニュースアイテムに `conditions.targetRoles` が未設定の場合, the News API shall 全ユーザーにニュースを表示する
|
|
|
+2. When ニュースアイテムに `conditions.targetRoles` が未設定の場合, the News API shall 全ユーザーにニュースを表示する
|
|
|
|
|
|
-### Requirement 5: InAppNotification UI 統合
|
|
|
+### Requirement 5: InAppNotification UI 統合表示
|
|
|
|
|
|
**Objective:** As a GROWI ユーザー, I want 既存の InAppNotification UI でニュースを確認したい, so that 通知と同じ導線でニュースにアクセスできる
|
|
|
|
|
|
@@ -61,15 +64,15 @@ GROWI の InAppNotification にニュース配信・表示機能を追加する
|
|
|
|
|
|
#### Acceptance Criteria
|
|
|
|
|
|
-1. The InAppNotification ドロップダウン shall 通知とニュースを公開日時/作成日時の降順で混合した1つのリストとして表示する
|
|
|
-2. The InAppNotification ドロップダウン shall フィルタタブ(「すべて」「通知」「ニュース」)を提供し、デフォルトは「すべて」とする
|
|
|
-3. The InAppNotification ドロップダウン shall 通知設定ページへのリンクボタンを提供する
|
|
|
-4. The InAppNotification サイドバー shall ニュースセクションを通知リストの上部に表示する
|
|
|
-5. The InAppNotification ページ (/me/all-in-app-notifications) shall 「ニュース」タブを提供し、全ニュースアイテムを一覧表示する
|
|
|
+1. The InAppNotificationパネル shall 通知とニュースを公開日時/作成日時の降順で混合した1つのリストとして表示する
|
|
|
+2. The InAppNotificationパネル shall 上部にフィルタボタン(「すべて」「通知」「お知らせ」)を配置し、デフォルトは「すべて」とする。「お知らせ」選択時はニュースのみ、「通知」選択時はニュース以外のすべての通知を表示する
|
|
|
+3. The InAppNotificationパネル shall 既存の「未読のみ」トグルスイッチを廃止する。未読/既読の区別は Requirement 6(視覚表示:太字+青ドット)で十分に識別可能であり、種別フィルタとの競合を避けるため
|
|
|
+4. The InAppNotificationパネル shall リスト領域に最大高さを設定し、超過分はスクロールで表示する。ただし表示件数には上限を設ける
|
|
|
+5. The InAppNotificationパネル shall リスト下部に「すべての通知」ボタンを配置し、クリック時に `/me/all-in-app-notifications` へページ遷移する。AC 4 の表示件数上限により全件を表示できないため、全件閲覧の導線として提供する
|
|
|
6. When ユーザーがニュースアイテムをクリックした場合, the InAppNotification UI shall ニュースの詳細 URL を新しいタブで開く
|
|
|
7. When ユーザーがニュースアイテムをクリックした場合, the InAppNotification UI shall 該当ニュースを既読としてマークし、未読インジケータを更新する
|
|
|
|
|
|
-### Requirement 5.1: 既読/未読の視覚表示
|
|
|
+### Requirement 6: 既読/未読の視覚表示
|
|
|
|
|
|
**Objective:** As a GROWI ユーザー, I want 未読のニュース・通知を視覚的に区別したい, so that 未確認の項目をすぐに見分けられる
|
|
|
|
|
|
@@ -79,19 +82,17 @@ GROWI の InAppNotification にニュース配信・表示機能を追加する
|
|
|
2. The 未読アイテム shall 左端に青色の丸ドット(8px, `bg-primary`)を表示する
|
|
|
3. The 既読アイテム shall タイトルを通常ウェイト(`fw-normal`)で表示する
|
|
|
4. The 既読アイテム shall ドットと同じ幅の透明スペーサーを配置し、インデントを統一する
|
|
|
-5. The 視覚表示 shall 背景色の変更や opacity の変更を行わない
|
|
|
|
|
|
-### Requirement 6: 未読バッジ表示
|
|
|
+### Requirement 7: 未読バッジ表示
|
|
|
|
|
|
**Objective:** As a GROWI ユーザー, I want 未読ニュースの存在をバッジで把握したい, so that 新しいニュースがあることに気づける
|
|
|
|
|
|
#### Acceptance Criteria
|
|
|
|
|
|
1. The サイドバー通知アイコン shall 通知の未読数とニュースの未読数を合算してバッジに表示する
|
|
|
-2. The ヘッダードロップダウンの通知アイコン shall 通知の未読数とニュースの未読数を合算してバッジに表示する
|
|
|
-3. When 全てのニュースが既読の場合, the バッジ shall ニュース分のカウントを含めない
|
|
|
+2. When 全てのニュースが既読の場合, the バッジ shall ニュース分のカウントを含めない
|
|
|
|
|
|
-### Requirement 7: 多言語対応
|
|
|
+### Requirement 8: 多言語対応
|
|
|
|
|
|
**Objective:** As a GROWI ユーザー, I want ニュースを自分の言語で読みたい, so that 内容を正しく理解できる
|
|
|
|
|
|
@@ -99,5 +100,5 @@ GROWI の InAppNotification にニュース配信・表示機能を追加する
|
|
|
|
|
|
1. When ニュースアイテムに複数言語のテキストが含まれる場合, the NewsItem コンポーネント shall ブラウザの言語設定に応じたテキストを表示する
|
|
|
2. If ブラウザの言語に対応するテキストが存在しない場合, then the NewsItem コンポーネント shall `en_US` → `ja_JP` の順にフォールバックする
|
|
|
-3. The UI ラベル(「ニュース」「ニュースはありません。」等) shall `ja_JP`, `en_US`, `zh_CN`, `ko_KR`, `fr_FR` の i18n ロケールファイルで提供する
|
|
|
-4. The フィルタタブ用ラベル `in_app_notification.notifications`(「通知」)shall 全対応言語のロケールファイルに追加する
|
|
|
+3. The UI ラベル(「ニュース」「ニュースはありません。」等)shall `ja_JP`, `en_US`, `zh_CN`, `ko_KR`, `fr_FR` の i18n ロケールファイルで提供する
|
|
|
+4. The フィルタボタン用ラベル(「通知」「お知らせ」)shall 全対応言語のロケールファイルに追加する
|