Skip to content

feat(gui,admin): 通知の日次取得・アバターメニュー・白ベル・全件ページ (#1111 レビュー)#1118

Merged
smalruby3-editor-bot[bot] merged 3 commits into
topic/classroom-notification-centerfrom
feature/notification-ux-cost
Jul 26, 2026
Merged

feat(gui,admin): 通知の日次取得・アバターメニュー・白ベル・全件ページ (#1111 レビュー)#1118
smalruby3-editor-bot[bot] merged 3 commits into
topic/classroom-notification-centerfrom
feature/notification-ux-cost

Conversation

@smalruby3-editor-bot

Copy link
Copy Markdown

Summary

お知らせ通知センター(#1111)への人間レビュー指摘に対応。コスト削減右上 UI の刷新が主眼。

Changes

1) コスト削減:通知取得を 60 秒ポーリング → 1 日 1 回

  • use-teacher-notifications: 60 秒 interval を廃止。localStorage に日付つきキャッシュし、その日はじめてクラス管理を開いたときだけ GET /notifications を 1 回呼ぶ。同日再オープンは API を叩かない。共有 PC 対策で先生メールでキャッシュを識別。
  • トレードオフ(初回取得後に届いた通知は翌日反映)は「運営連絡は多くて週 1 回」の前提どおり受容。

2) 右上をアバターメニューに(teacher / admin 両方)

  • メール頭文字(kouji@…K / kouji.takao@…KT)の丸 + ▼。クリックでポップアップ(メール + ログアウト。将来の設定項目もここに集約)。紫背景で視認できる白丸 + 紫文字。
  • フルスクリーン Modal は左「戻る」で閉じ、右上に × が無いため、アバターを右端(1.25rem)へ寄せて余白をなくした(admin と統一)。

3) 通知ベルを白一色 SVG に(絵文字 🔔 は主張が強い)。アバターの左へ。

4) パネルは先頭 5 件 + 「すべて見る(N件)」→ 全件一覧ページ

  • teacher-notifications フェーズ・10 件/ページのクライアントページネーション(追加 API なし=コスト増なし)。

docs

  • classroom/ui-ux.md §1.8 更新、集約ページのスクショ 0101/0102 を新 UI で撮り直し。

AWS コスト観点(ご依頼のレビュー)

  • 今回の最大の無駄=60 秒ポーリングを解消(在席先生数 × 時間 × 60 分の 1 → 1 日 1 回で数百〜千分の 1)。
  • 提案(本 diff 外・未実装): ①管理俯瞰の 2 テーブル全 Scan(単一運営者・低頻度で許容、クラス増時は日次集計キャッシュ推奨)②クラス詳細のメンバー 30 秒ポーリングは「メンバータブ表示中のみ」に既に限定済み(タブ非表示時停止でさらに削減可)。

Test

  • jest 119 件(新規: avatar-initials / teacher-avatar-menu / teacher-notifications-list / 日次取得フック)
  • headless: teacher UX 11/11(ベル/バッジ/パネル 5 件/すべて見る/10 件ページ/単一 fetch)、admin アバター(KT/email/logout)、右端寄せ gap 20px
  • gui / admin lint クリーン

Refs #1111(レビュー指摘)

🤖 Generated with Claude Code

smalruby3-editor-bot Bot and others added 2 commits July 26, 2026 10:03
人間レビュー指摘への対応:

1) コスト削減: お知らせ取得を 60 秒ポーリング → 1 日 1 回
   - use-teacher-notifications: interval 廃止。localStorage に日付つきで
     キャッシュし、その日はじめてのクラス管理オープン時だけ 1 回取得。
     同日再オープンは API を叩かない。共有 PC 対策で先生メールで識別。

2) 右上をアバターメニューに(teacher / admin 両方)
   - メール頭文字(k / kt)の丸 + ▼。クリックでポップアップ(メール +
     ログアウト。将来の設定項目もここに集約)。紫背景で視認できる白丸 +
     紫文字。initialsFromEmail を lib に切り出し。旧 email/logout は廃止
   - フルスクリーン Modal は左「戻る」で閉じ右上に × が無いため、アバターを
     右端(1.25rem)へ寄せて余白をなくした(admin と同じ・追加レビュー指摘)

3) 通知ベルを白一色 SVG に(絵文字は主張が強い)。アバターの左へ

4) パネルは先頭 5 件 + 「すべて見る(N件)」→ 全件一覧ページ
   (teacher-notifications フェーズ・10 件/ページ・追加 API なし)

docs: classroom/ui-ux.md §1.8 更新、集約ページのスクショ 0101/0102 を
新 UI で撮り直し。

検証: jest 119件 + headless で teacher UX 11/11・admin アバター・右端
寄せ(gap 20px)を確認。gui/admin lint クリーン。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
アバターメニュー化・白ベル・右端寄せ後の UI に合わせて、
docs/classroom-notification-center/screenshots を一括更新
(teacher タイトルバー / admin ヘッダーとも新 chrome)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

- [Must] mesh 回帰スクリプト修復: ログアウトがアバターメニュー内へ
  移動したため、mesh-v2-classroom-binding.mjs で classroom-avatar-button
  を先にクリックしてから classroom-teacher-logout を押すよう修正
- [Question] dev-bypass 等 email 不明(空キー)時はキャッシュを使わず
  毎回取得(共有 PC で別の先生の通知が混ざらないように)。本番の
  Google/Microsoft ID トークンは email を持つのでキャッシュは有効
- [Question] docs/classroom/testing.md の testid を更新(logout は
  アバターメニュー内・classroom-teacher-email 廃止・avatar-* 追加)
- [FYI] admin app.css の未使用 .admin-header-email を削除

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@smalruby3-editor-bot

Copy link
Copy Markdown
Author

敵対レビュー結果(自動レビュー + 対応済み)

diff 全体を正確性・セキュリティ・rules 準拠・整合性・テストで検証(scratch-gui 28件 / admin 43件パス、lint/prettier クリーン)。

指摘と対応(コミット 0d0d9af

分類 指摘 対応
[Must] ログアウト testid がアバターメニュー内へ移動し、mesh 本命回帰スクリプト(mesh-v2-classroom-binding.mjs)が logout 待ちで固まる アバターボタンを先にクリックする手順を挿入 ✅
[Question] dev-bypass 等の空キーで同日・共有 PC だと別の先生の通知が混ざる 空キー時はキャッシュを読まない/書かない(本番 JWT は email ありで従来通り) ✅
[Question] docs/classroom/testing.md の testid が旧タイトルバー前提のまま avatar-* 追加・logout はメニュー内・classroom-teacher-email 廃止に更新 ✅
[FYI] admin app.css の未使用 .admin-header-email 削除 ✅
[FYI] Escape が Modal 全体も閉じる 非ブロッキング。外側クリックが主たる閉じ操作で許容(react-modal の Escape とは別リスナで確実な抑止が難しいため据え置き)

クリーン確認(抜粋)

  • 日次キャッシュの effect は login ごとに 1 回(handleTeacher401 は useCallback 安定)。once/day 成立
  • markRead → キャッシュ unreadCount:0 同期、readAt は据え置き(ドット維持)は意図どおり
  • initials は null/非文字列/@のみ/空ローカルで throw しない
  • タイトルバー: avatar(right 1.25rem) と bell(right 4.5rem) は重ならず、admin と統一で右余白なし
  • i18n 3 キーは ja/ja-Hira 両方に存在・プレースホルダ一致

判定: 指摘対応後 MERGEABLE

@smalruby3-editor-bot
smalruby3-editor-bot Bot merged commit dd61119 into topic/classroom-notification-center Jul 26, 2026
9 checks passed
@smalruby3-editor-bot
smalruby3-editor-bot Bot deleted the feature/notification-ux-cost branch July 26, 2026 10:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants