コミットを比較

..
2 コミット
作成者 SHA1 メッセージ 日付
Codex Night Worker ae3d9b3876 AI: address review on PR #468 2026-11-13 12:41:39 +09:00
Codex Night Worker b7d92b7ddd AI: address issue #439 2026-11-13 12:25:24 +09:00
3個のファイルの変更、18行の追加、34行の削除
+3 -1
ファイルの表示
@@ -314,7 +314,9 @@ class PostsController < ApplicationController
def viewed
return head :unauthorized unless current_user
current_user.viewed_posts << Post.find(params[:id])
UserPostView.create_or_find_by!(
user: current_user,
post: Post.find(params[:id]))
head :no_content
end
+15
ファイルの表示
@@ -2559,6 +2559,21 @@ RSpec.describe 'Posts API', type: :request do
expect(user.reload.viewed?(post_record)).to be(true)
end
it '204 and keeps one view on repeated requests' do
sign_in_as(user)
expect {
post "/posts/#{ post_record.id }/viewed"
}.to change(UserPostView, :count).by(1)
expect(response).to have_http_status(:no_content)
expect {
post "/posts/#{ post_record.id }/viewed"
}.not_to change(UserPostView, :count)
expect(response).to have_http_status(:no_content)
expect(user.reload.viewed?(post_record)).to be(true)
end
end
describe 'DELETE /posts/:id/viewed' do
-33
ファイルの表示
@@ -196,39 +196,6 @@ const PostEmbed: FC<Props> = (
return <TwitterEmbed userId={userId} statusId={statusId}/>
}
case 'bilibili.com':
{
const videoId = url.pathname.match (
/^\/video\/(BV[a-zA-Z0-9]{10}|av[1-9]\d*)\/?$/)?.[1]
if (!(videoId))
break
if (embedAutoLoadMode === 'off')
return externalLink
if (shouldLoadEmbed === false)
return manualLoadControl
const playerUrl = new URL ('https://player.bilibili.com/player.html')
const parameter = videoId.startsWith ('BV') ? 'bvid' : 'aid'
const identifier = parameter === 'bvid' ? videoId : videoId.slice (2)
playerUrl.searchParams.set (parameter, identifier)
playerUrl.searchParams.set ('autoplay', '1')
const page = url.searchParams.get ('p')
if (page != null && /^[1-9]\d*$/.test (page))
playerUrl.searchParams.set ('p', page)
return (
<iframe
src={playerUrl.toString ()}
title={post.title || post.url}
width={640}
height={360}
className="aspect-video h-auto max-w-full"
allow="autoplay; fullscreen"
allowFullScreen/>)
}
case 'youtube.com':
{
const videoId = url.searchParams.get ('v')