ライブラリ・再生・削除を追加(ステップ5) #8

Merged
kazu634 merged 1 commits from library into main 2026-10-03 20:57:03 +09:00
Owner

概要

ステップ5: ライブラリ・再生・削除を追加する(PROJECT.md の F7・F8、F9 の web 側)。

  • /library: 完了したジョブの一覧。/library/{id}: <video controls> と確認付き削除
  • /videos/{id}: DB の相対 file_path を VIDEO_DIR と結合し Range 対応で配信。クライアントからは ID だけを受け取り、VIDEO_DIR の外(../・絶対パス・シンボリックリンク)は拒否
  • 削除: ファイル→記録の順。ファイルが既に無くても記録は消せる。ファイル削除に失敗したら記録を残す。登録番組の回は既知の記録が残るため自動では再取得しない
  • internal/media: worker と共有するファイル名規則(<番組名>/<番組名> <回タイトル> [<ID>].mp4、制御文字・禁止文字の置換、前後の空白と . の除去、80文字・60バイト上限)
  • compose.yaml: VIDEO_DIR(既定 /videos)と VIDEO_HOST_DIR(必須)のマウント、.env.example に項目追加
  • PROJECT.md を更新

確認

  • go test -count=1 ./... → 124件成功・0失敗。QA の指摘で3回差し戻し(DEL の置換、先頭空白が上限を消費、上限で切った後の末尾)。QA がファイル名規則の性質を幅広い入力で確かめるテストを追加
  • go vet ./... → 指摘0件
  • dockage VM で docker compose config(VIDEO_HOST_DIR 未設定でエラー、設定時に /videos へマウント)を確認
  • 手元の embedded Postgres 17 と試験用 MP4 で /library、/videos/{id} の 200 と Range 206 を確認

課題(未対応)

  • ファイル名の部分ごとの上限が 60 バイト(日本語で約 20 文字)。広げるには NAS の共有フォルダが暗号化されているかの確認が要る
  • パスの安全確認とファイルを開く間の理論上のすり替え。os.Root への置き換えで解消できる

🤖 Generated with Claude Code

https://claude.ai/code/session_01BcuBr9DyfcqZY8xFQsY5Di

## 概要 ステップ5: ライブラリ・再生・削除を追加する(PROJECT.md の F7・F8、F9 の web 側)。 - `/library`: 完了したジョブの一覧。`/library/{id}`: `<video controls>` と確認付き削除 - `/videos/{id}`: DB の相対 `file_path` を `VIDEO_DIR` と結合し Range 対応で配信。クライアントからは ID だけを受け取り、`VIDEO_DIR` の外(`../`・絶対パス・シンボリックリンク)は拒否 - 削除: ファイル→記録の順。ファイルが既に無くても記録は消せる。ファイル削除に失敗したら記録を残す。登録番組の回は既知の記録が残るため自動では再取得しない - `internal/media`: worker と共有するファイル名規則(`<番組名>/<番組名> <回タイトル> [<ID>].mp4`、制御文字・禁止文字の置換、前後の空白と `.` の除去、80文字・60バイト上限) - `compose.yaml`: `VIDEO_DIR`(既定 `/videos`)と `VIDEO_HOST_DIR`(必須)のマウント、`.env.example` に項目追加 - `PROJECT.md` を更新 ## 確認 - `go test -count=1 ./...` → 124件成功・0失敗。QA の指摘で3回差し戻し(DEL の置換、先頭空白が上限を消費、上限で切った後の末尾)。QA がファイル名規則の性質を幅広い入力で確かめるテストを追加 - `go vet ./...` → 指摘0件 - dockage VM で `docker compose config`(`VIDEO_HOST_DIR` 未設定でエラー、設定時に `/videos` へマウント)を確認 - 手元の embedded Postgres 17 と試験用 MP4 で `/library`、`/videos/{id}` の 200 と Range 206 を確認 ## 課題(未対応) - ファイル名の部分ごとの上限が 60 バイト(日本語で約 20 文字)。広げるには NAS の共有フォルダが暗号化されているかの確認が要る - パスの安全確認とファイルを開く間の理論上のすり替え。`os.Root` への置き換えで解消できる 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01BcuBr9DyfcqZY8xFQsY5Di
kazu634 added 1 commit 2026-10-03 20:54:48 +09:00
kazu634 merged commit ebf1cfcbc2 into main 2026-10-03 20:57:03 +09:00
kazu634 deleted branch library 2026-10-03 20:57:04 +09:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kazu634/tver#8