Skip to content

動画更新用API - #16

Merged
UnABC merged 3 commits into
mainfrom
feat/sync-ex-videos
Aug 24, 2026
Merged

動画更新用API#16
UnABC merged 3 commits into
mainfrom
feat/sync-ex-videos

Conversation

@pdpd22

@pdpd22 pdpd22 commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

close #10

@pdpd22
pdpd22 requested a lite review from Copilot August 22, 2026 16:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@pdpd22
pdpd22 requested a review from UnABC August 22, 2026 23:04
Comment thread docs/schema.md
Comment thread docker/init.sql
Comment thread docker/migrations/20260822_external_video_sync.sql Outdated
Comment thread docker/init.test.sql
Comment thread controllers/api_videos.cpp Outdated
Comment thread docs/openapi.yml Outdated
Comment thread controllers/api_videos.cpp Outdated
Comment thread plugins/YoutubeAPI.cpp Outdated
Comment thread controllers/api_videos.cpp Outdated

@UnABC UnABC left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PRありがとう!
いくつか仕様に関して気になる点があったので確認してほしいです:pray-nya:

/api/ex-videos/sync APIに関して

  • 再生時間の同期に関して

指定した動画を一括更新という仕組みになっているけど、同時に立つ配信枠は高々2~3程度だと思うからわざわざ一括で処理する必要はないかも。Youtube APIは1日あたり10,000ユニットの枠があるから、サークル内で使用する分にはAPI呼び出し回数の節約は気にしなくても大丈夫そうです。
現在の設計だとユーザー(クライアント側)が更新する動画を指定する必要があるけど、更新用のボタンやUIを新たに作ってユーザーに同期させるのはユーザーの手間が増えるから、動画アクセス時に自動で同期するようにした方がUXがいいと思います。
提案としては、Redisにクールダウン用のキーを保存するようにして、

  1. APIが叩かれたらRedisにキーが存在するか確認
  2. キーが存在しなければRedisにクールダウン用の有効期限(数十分~1時間程度)付きキーを保存して、Youtube APIで動画情報を問い合わせる
  3. アーカイブ済みなら動画再生時間を更新する。

という仕組みにしたらよさそう。WebSub とか使って完全に自動で更新するのもありだけどそこまで頑張らなくてもいいかも。

  • タイトル・説明の同期に関して

#10 で一緒のAPIでまとめて処理した方がいいみたいなコメントをしちゃったけど上記の設計にするならAPIを分けた方がいいかも。混乱させてしまい申し訳ないです:bow-nya:

DB schemaに関して

Youtubeとかの外部統計データはplaybacQ内では使わない(再生回数等はplaybacQ内のみで集計する)方が設計の単純さや内部動画との整合性の面でもよさそうなので新たにexternal_video_*テーブルを作る必要はないかも。

@pdpd22

pdpd22 commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

cronなどで定期的にYoutubeのAPIを叩く仕様を勝手に想定してました。すみません。
だいたい了解しましたが、仕様についていくつか確認させてほしいです。

再生時間の同期に関して

  • 動画時間同期のAPIを削除し、controllers/api_videos.cppgetVideoから同期するための関数を直接呼ぶ実装にしても問題ないですか?

メタデータ更新用APIに関して

  • ここでも再生時間を更新する設計にしたほうがいいですか?

@UnABC

UnABC commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

単一責任の原則、関心の分離の観点から両方とも分けた方がいいと思います。
特にGETリクエストは副作用を持たないことが推奨されているため、GETメソッドのgetVideoでDBの更新は行わない方が望ましいです。
メタデータ更新用APIに関しても、「投稿主が手動で表示情報を同期するAPI」と「システムが自動で再生時間を同期するAPI」は目的や実行タイミングが違うので分離した方がいいと思います。

@pdpd22

pdpd22 commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

了解しました

@pdpd22
pdpd22 requested a review from UnABC August 24, 2026 09:12
Comment thread controllers/api_videos.cpp Outdated
Comment thread controllers/api_videos.cpp Outdated

@UnABC UnABC left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

修正ありがとう!
ほぼ完璧だけど、DBの更新処理についてだけ確認をお願いします。
refreshExVideoDurationrefreshExVideoMetadataではexecSqlCoroを使って生のSQLを記述していますが、他のAPIの実装との一貫性を保つためにDrogonのORM (mapper.update)を使用した方がいいと思います。
Drogonでは、セッター(setTitlesetDuration等)を呼ぶと、内部で変更されたカラムだけを対象にしたUPDATE文を自動で生成してくれます。そのため、refreshExVideoMetadataのように手動でif (updateTitle && updateDescription)と分岐させてSQLを書く必要がなくなり、コードを簡潔に書くことができます。
また、refreshExVideoDurationではWHERE type = 'youtube live'のように状態を厳密にチェックして並行更新を防ごうとしているように見えます(この防御的な考え方自体はとても良いと思います!)が、Redisを使用したクールダウンの仕組みにより同時に処理が走ることはなく、他のAPIと並行で実行された場合でも、前述のDrogonの仕組みのおかげで意図しないカラムの巻き戻しは起きないので、ORMに任せてしまって大丈夫です。

@pdpd22

pdpd22 commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

確かにそうですね!修正します

@pdpd22
pdpd22 requested a review from UnABC August 24, 2026 12:25
@pdpd22

pdpd22 commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

何度もすみません。修正したので再度レビューよろしくお願いします。

@UnABC UnABC left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@UnABC
UnABC merged commit 9445aba into main Aug 24, 2026
5 checks passed
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.

外部live動画更新用APIの作成

3 participants