Skip to content

feat(admin): Admin にクラス(学級)の検索・詳細とアーカイブ解除を追加 #1133

Description

@smalruby3-editor-bot

EPIC #1129C(Admin にクラス(学級)の検索とアーカイブ解除を追加) を担当する leaf。

背景

Admin Lambda が GROUPS_TABLE に触るのは infra/smalruby-admin/lambda/handler.ts:906-912 の 1 箇所だけで、しかも読み取り(TTL 失効データのスナップショット復元時に親クラスが完全に消えているかの確認)。liveGroup.Item が返る=生きているが archived のケースは何もしない。

結果、ClassroomGroups.statusactive に戻せるのは先生用 UI の PATCH /classroom-groups/{groupId}infra/smalruby-classroom/lambda/handler.ts:2474 付近)だけで、Admin も運用 CLI(bin/restore-classroom.ts = TTL 失効専用)もクラスのアーカイブ解除を持たない。先生が UI 操作に到達できない問い合わせに運用者が対応できない。

やること

  1. Admin API に クラス(ClassroomGroups)の検索・詳細・status 更新を追加する。命名は refactor(admin): クラス(学級)と課題の用語辞典を作り、Admin の文言・識別子を全数監査して統一 #1131 の用語辞典に従い、既存の課題向けエンドポイント(/admin/classrooms)と明確に区別できるパスにする。
  2. Admin SPA に「クラス」タブ(または既存タブ内の明確な切り替え)を追加し、アーカイブ⇄利用中の切り替えと、そのクラスに属する課題の一覧を表示する。
  3. 権限・監査ログ(audit(...))は既存の課題操作と同じ扱いにする。
  4. 破壊的操作なので確認ステップを踏む(既存の 2 段階確認パターンに合わせる)。

設計上の注意

  • 単一ライターを壊さない: クラスの状態を書く経路が「先生 UI」と「Admin」の 2 つになる。どちらも同じ更新形(status + updatedAt)にし、restoredAt 等のスタンプ規約を揃える。
  • TTL を触るときは実行時点から再設定する(過去の TTL のまま書くと即再削除される。docs/classroom/operations.md の既存規約)。
  • クラスをアーカイブ解除しても、中の課題の status は変えない(無関係な課題を勝手に復活させない)。
  • 同名クラスが並ぶケースが実際に起きている(Google Classroom 連携での二重作成)。一覧ではクラス名だけで判断できないため、年度・人数・中の課題名・作成日時を併記して区別できること。

前提

先行 leaf #1131(用語辞典)・#1132(親クラス状態の表示)の後に着手する。packages/admin/src/components/classrooms-view.jsxinfra/smalruby-admin/lambda/handler.ts を共有編集するため直列化が必要。

DoD

  • Admin からクラス(学級)を検索し、アーカイブ解除できる
  • Admin からのクラス状態変更が監査ログに残る
  • 同名クラスを年度・人数・中の課題名・作成日時で区別できる
  • unit テスト追加(クラス検索・詳細・status 更新 API と SPA の表示・確認フロー)
  • lint / prettier がエラー 0・警告 0
  • docs/admin/README.md(および必要なら docs/classroom/*)を更新
  • docs/admin/screenshots/ を更新(docs/_screenshot-guidelines.md に従う)
  • 誤認シナリオ(親クラス archived + 課題 active)を作り、Admin からクラスをアーカイブ解除して先生に見える状態へ戻せることを確認

Part of #1129

Metadata

Metadata

Assignees

Labels

⏳ waiting先行 Issue (autopilot-after) の完了待ち。依存が Close されると自動着手🤖 autopilotautopilot が処理対象にした Issue/PR(daemon が付与)

Type

No type

Projects

Status
Sprint Backlog

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions