diff --git a/%E8%AA%B2%E9%A1%8C%E6%95%B4%E7%90%86.md b/%E8%AA%B2%E9%A1%8C%E6%95%B4%E7%90%86.md index ca25f63..35afef1 100644 --- a/%E8%AA%B2%E9%A1%8C%E6%95%B4%E7%90%86.md +++ b/%E8%AA%B2%E9%A1%8C%E6%95%B4%E7%90%86.md @@ -308,73 +308,8 @@ Tag.merge_tags! は存在するが、運用 UI/API がない。タグ整理基 - [ ] スクリーンショット添付の有無を決める - [ ] 管理画面で一覧・対応済みにできる -### 53. [P1] 利用規約・プライバシーポリシーを公開導線に載せる -**種別**: legal / release blocker - -**対象** -- `frontend/src/App.tsx` -- `frontend/src/pages/*` - -**背景 / 問題** -IP、引継ぎコード、編集履歴、外部埋め込み通信を扱うため、公開前に規約とプライバシーポリシーが必要。 - -**完了条件** -- [ ] /tos と /privacy を作る -- [ ] 初回利用時・フッタ・設定画面から到達できる -- [ ] IP と外部埋め込みについて明記する - -### 54. [P1] IP アドレス保存期間と利用目的を設計する - -**種別**: privacy / ops - -**対象** -- `backend/app/models/ip_address.rb` -- `backend/app/models/user_ip.rb` -- `backend/app/controllers/users_controller.rb` - -**背景 / 問題** -user_ips は監査に有用だが、保存期間と利用目的を決めずに溜めるとプライバシー負債になる。 - -**完了条件** -- [ ] 保存期間を決める -- [ ] 削除/匿名化 rake task を作る -- [ ] BAN 用に残す情報とログ用情報を分ける -- [ ] プライバシーポリシーへ反映する - -### 55. [P2] 全 API のエラー JSON 形式を統一する - -**種別**: DX / UX - -**対象** -- `backend/app/controllers/application_controller.rb` -- `backend/app/controllers/*` -- `frontend/src/lib/api.ts` -**背景 / 問題** -head だけ、{ errors: ... }、例外メッセージ直返しなどが混在している。フロントが失敗理由を出しにくい。 - -**完了条件** -- [ ] 標準エラー形式を決める -- [ ] validation / unauthorized / forbidden / not_found / conflict を統一する -- [ ] フロント toast が message を表示できる - -### 56. [P2] 日付パラメータの不正入力を 400 にする - -**種別**: bug - -**対象** -- `backend/app/controllers/posts_controller.rb` -- `backend/app/controllers/tags_controller.rb` -- `backend/app/controllers/nico_tags_controller.rb` - -**背景 / 問題** -日付・cursor 系パラメータで parse 例外が出ると 500 になりがち。ユーザ入力なので 400 に落とすべき。 - -**完了条件** -- [ ] parse helper を作る -- [ ] 不正日付は 400 + error code -- [ ] 各検索 API に spec を追加する ### 57. [P1] アップロードファイルの content-type / サイズ制限を入れる @@ -394,22 +329,6 @@ thumbnail / material file は ActiveStorage に入るが、サイズや種類の - [ ] 画像なら寸法上限も見る - [ ] エラーを UI に出す -### 58. [P2] PostRepr / MaterialRepr の URL 生成を環境設定で統一する - -**種別**: ops / bug - -**対象** -- `backend/app/representations/post_repr.rb` -- `backend/app/representations/material_repr.rb` -- `backend/config/environments/production.rb` - -**背景 / 問題** -ActiveStorage URL の host 指定や request.base_url 依存が散らばると、本番/開発/プロキシ配下で URL が壊れる。 - -**完了条件** -- [ ] default_url_options を環境変数で設定する -- [ ] representation に host を渡す箇所を統一する -- [ ] プロキシ配下の URL spec を追加する ### 59. [P2] フロントの role guard を共通化する @@ -446,72 +365,6 @@ uploadedUser / createdByUser / Wiki history user など、bot 操作や移行デ - [ ] null 許容型に直す - [ ] 表示側に fallback を入れる -### 61. [P3] タグカテゴリ色・表示名をフロント固定から設定可能にする - -**種別**: feature / settings - -**対象** -- `frontend/src/consts.ts` -- `frontend/src/components/TagLink.tsx` -- `backend/app/models/setting.rb` - -**背景 / 問題** -カテゴリ色はユーザ好みやアクセシビリティに直結する。settings 実装後の候補として切り出す価値がある。 - -**完了条件** -- [ ] 既定テーマを維持する -- [ ] ユーザ設定で上書きできる -- [ ] コントラスト不足を警告する - -### 62. [P3] ミュートタグ / 非表示タグを実装する - -**種別**: feature - -**対象** -- `backend/app/models/setting.rb` -- `backend/app/controllers/posts_controller.rb` -- `frontend/src/pages/users/SettingPage.tsx` - -**背景 / 問題** -コンテンツ量が増えるほど、ユーザごとの見たくないタグを制御したくなる。公開後の快適性に効く。 - -**完了条件** -- [ ] ミュートと完全非表示の違いを決める -- [ ] 投稿一覧・ランダム・上映会候補に反映するか決める -- [ ] 設定画面から管理できる - -### 63. [P3] 埋め込み自動再生のユーザ設定を追加する - -**種別**: feature / accessibility - -**対象** -- `frontend/src/components/PostEmbed.tsx` -- `frontend/src/pages/theatres/TheatreDetailPage.tsx` -- `backend/app/models/setting.rb` - -**背景 / 問題** -上映会・投稿詳細で動画埋め込みが増えると、自動再生の好みと端末負荷の差が出る。設定化すべき。 - -**完了条件** -- [ ] 自動再生 on/off 設定を作る -- [ ] Theatre と通常投稿で挙動を分けるか決める -- [ ] モバイルでは既定 off などを検討する - -### 64. [P2] PostEmbed の対応サイトを site parser として分離する - -**種別**: refactor / feature - -**対象** -- `frontend/src/components/PostEmbed.tsx` -- `backend/app/models/post.rb` - -**背景 / 問題** -ニコニコ/YouTube/X/Twitter/その他の判定が UI に寄っている。プレビュー、上映会、検索候補でも同じ判定を使いたい。 - -**完了条件** -- [ ] URL から site_type / embedable / canonical_url を返す関数を作る -- [ ] youtu.be, pixiv, Bluesky, ニジカ投稿局を追加しやすくする -- [ ] 単体テストを追加する ### 65. [P3] preview API を OpenGraph / oEmbed 対応に寄せる