Summary
生徒が「退出する」をクリックした際、サーバー側のメンバーレコードを削除する。現在はクライアントのセッションをクリアするだけでサーバーに通知していないため、教師側の座席グリッドで退出した生徒が青いまま残る。
現状の問題
- 生徒が「退出する」→
handleLeaveClassroom → dispatch(clearClassroomSession()) のみ
- サーバーの MembershipsTable にメンバーレコードが残る
- 教師の
listMembers がまだこのメンバーを返す → 座席が青(参加済み)のまま
実装方針
Backend: sessionToken 認証でメンバー自己削除
DELETE /classrooms/{classroomId}/members/me — sessionToken で認証し、自分自身のメンバーレコードを削除。
- sessionToken から
classroomId + memberId を取得
- URL の
classroomId と一致することを確認
- MembershipsTable から該当レコードを削除
Frontend: 退出時にサーバーに通知
handleLeaveClassroom で API 呼び出しを追加:
classroomAPI.leaveClassroom(sessionToken, classroomId) を呼ぶ
- 成功したら
clearClassroomSession() でローカルもクリア
- API エラーでもローカルセッションはクリア(ベストエフォート)
変更ファイル
infra/smalruby-classroom/lambda/handler.ts — DELETE /members/me ハンドラー
infra/smalruby-classroom/lib/classroom-stack.ts — ルート追加(既存 DELETE members/{memberId} を拡張)
packages/scratch-gui/src/lib/classroom-api.js — leaveClassroom() メソッド追加
packages/scratch-gui/src/containers/classroom-modal.jsx — サーバー通知追加
Summary
生徒が「退出する」をクリックした際、サーバー側のメンバーレコードを削除する。現在はクライアントのセッションをクリアするだけでサーバーに通知していないため、教師側の座席グリッドで退出した生徒が青いまま残る。
現状の問題
handleLeaveClassroom→dispatch(clearClassroomSession())のみlistMembersがまだこのメンバーを返す → 座席が青(参加済み)のまま実装方針
Backend: sessionToken 認証でメンバー自己削除
DELETE /classrooms/{classroomId}/members/me— sessionToken で認証し、自分自身のメンバーレコードを削除。classroomId+memberIdを取得classroomIdと一致することを確認Frontend: 退出時にサーバーに通知
handleLeaveClassroomで API 呼び出しを追加:classroomAPI.leaveClassroom(sessionToken, classroomId)を呼ぶclearClassroomSession()でローカルもクリア変更ファイル
infra/smalruby-classroom/lambda/handler.ts— DELETE /members/me ハンドラーinfra/smalruby-classroom/lib/classroom-stack.ts— ルート追加(既存 DELETE members/{memberId} を拡張)packages/scratch-gui/src/lib/classroom-api.js—leaveClassroom()メソッド追加packages/scratch-gui/src/containers/classroom-modal.jsx— サーバー通知追加