Skip to content

feat: 幹事が候補日程を追加・削除できるようにする#22

Merged
toshi0607 merged 1 commit into
mainfrom
claude/organizer-schedule-add-delete-c68afe
Jul 25, 2026
Merged

feat: 幹事が候補日程を追加・削除できるようにする#22
toshi0607 merged 1 commit into
mainfrom
claude/organizer-schedule-add-delete-c68afe

Conversation

@toshi0607

Copy link
Copy Markdown
Owner

概要

幹事管理ページ(/e/[slug]/admin)で、集計を見ながら候補日程を後から追加・削除できるようにしました。参加者から「この日程では無理」と言われたときに、イベントを作り直さずに候補を足す/削ることができます。

DB スキーマ変更はありません(マイグレーション不要)。

サーバー(Server Actions)

Action 挙動
addSlots adminToken 照合 → イベント行を FOR UPDATE でロックして既存候補との重複を除外 → 合計 50 件の上限を判定 → sort_order 末尾に追加(既存の並び順を変えない)
deleteSlot 候補が 1 件のときは拒否 / 確定中の候補なら確定を解除 / 紐づく回答は answersON DELETE CASCADE で削除

どちらも last_activity_at を更新するため、既存の Realtime(未設定時はポーリング)経路で他端末の集計ページも自動更新されます。

UI

  • 候補入力 UI を /new と共通化(src/lib/slot-draft.ts の純ロジック + src/components/slot-picker.tsx の hook/コンポーネント)。new-event-form.tsx は 559 → 197 行に
  • 幹事管理は「候補日程」1 枚のカードに統合し、追加ピッカーは折りたたみ(モバイルのページ高 1522 → 1165px、「締め切る」が初期ビューポート内に)
  • 削除は Trash2 アイコン + 行内 2 段階確認(候補・参加者で共通、キャンセル側に自動フォーカス)
  • 回答 0 件 / 確定済み / 締切済みの状態ごとに文面と表示要素を切り替え
  • 幹事画面の集計に未回答数を表示(○0・△0・×0・未回答1

参加者側

  • 回答後に追加された候補は再編集時に未選択のまま扱い、「新しい候補」バッジで明示。未選択の候補は送信しないので集計表では「未回答」のまま(既定値を入れると「見ていない候補」が「未定と回答」になってしまう)
  • ダークモードで ○△× の選択色が消えていた既存バグを修正outline バリアントの dark:bg-input/30 が呼び出し側の bg-* に勝っており、△ は暗褐色の文字だけが残って判読不能でした
  • 「確定」の色を primary に統一(primary = 幹事が決めたこと / emerald = 集計の事実)

検証

  • pnpm check(biome + tsc)exit 0
  • pnpm test 80 passed(63 → 80。Zod スキーマ 6 件、候補下書きロジック 11 件を追加)
  • pnpm build exit 0
  • pnpm test:e2e 16 passed(13 → 16、docker Postgres の実 DB)
    • 幹事が候補を追加 → 集計反映 → 重複拒否 → 確定候補を削除して確定解除
    • 回答後に追加された候補が既存回答者にとって未回答のまま扱われること
    • ダークモードで選択色が保たれること
  • 375px / 1280px × ライト/ダークで、回答 0 件・エラー・確定 + 締切・候補 12 件の各状態をスクリーンショット確認

設計と 5 ラウンド分のデザインレビュー記録は tasks/todo.md にあります。

🤖 Generated with Claude Code

幹事管理ページ(/e/[slug]/admin)に候補日程の追加・削除を追加する。
参加者から「この日程では無理」と言われたときに、イベントを作り直さずに
候補を足す/削ることができる。

## サーバー

- `addSlots`: adminToken 照合 → イベント行をロックして既存候補との重複を除外し、
  合計 50 件の上限を判定 → sort_order 末尾に追加(既存の並び順を変えない)
- `deleteSlot`: 候補が 1 件のときは拒否、確定中の候補なら確定を解除、
  紐づく回答は answers の ON DELETE CASCADE で削除
- どちらも last_activity_at を更新するため、既存の Realtime/ポーリング経路で
  他端末の集計ページも自動更新される
- DB スキーマ変更なし(マイグレーション不要)

## UI

- 候補入力 UI を /new と共通化(src/lib/slot-draft.ts + src/components/slot-picker.tsx)
- 幹事管理は「候補日程」1 枚のカードに統合し、追加ピッカーは折りたたみ
- 削除は Trash2 アイコン + 行内 2 段階確認(候補・参加者で共通)
- 回答 0 件・確定済み・締切済みの状態ごとに文面と表示要素を切り替え
- 幹事画面の集計に未回答数を表示

## 参加者側

- 回答後に追加された候補は再編集時に未選択のまま扱い、「新しい候補」として明示する
  (既定値を入れると「見ていない候補」が「未定と回答」になってしまう)
- ダークモードで ○△× の選択色が消えていた既存バグを修正
  (outline バリアントの dark:bg-input/30 が呼び出し側の bg-* に勝っていた)
- 「確定」の色を primary に統一(primary = 幹事が決めたこと / emerald = 集計の事実)

検証: pnpm check / pnpm test(80 passed)/ pnpm build / playwright(16 passed、docker Postgres)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
matenaiyo Ready Ready Preview, Comment Jul 25, 2026 6:47am

@toshi0607
toshi0607 merged commit 9417bd0 into main Jul 25, 2026
3 checks passed
@toshi0607
toshi0607 deleted the claude/organizer-schedule-add-delete-c68afe branch July 25, 2026 06:50
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.

1 participant