This commit is contained in:
2026-03-24 21:57:17 +09:00
parent ee93ff8ea0
commit 4c474d2bdf
6 changed files with 84 additions and 1 deletions
@@ -0,0 +1,38 @@
require 'digest'
class WikiAssetsController < ApplicationController
def index
page_id = params[:wiki_page_id].to_i
page = WikiPage.find_by(id: page_id)
return head :not_found unless page
render json: page.assets
end
def create
return head :unauthorized unless current_user
return head :forbidden unless current_user.gte_member?
wiki_page_id = params[:wiki_page_id].to_i
page = WikiPage.find_by(id: wiki_page_id)
return head :not_found unless page
file = params[:file]
return head :bad_request if file.blank?
page.with_lock do
no = page.next_asset_no
alt_text = params[:alt_text].presence
sha256 = Digest::SHA256.file(file.tempfile.path).digest
asset = WikiAsset.new(wiki_page_id:, no:, alt_text:, sha256:, created_by_user: current_user)
asset.file.attach(file)
asset.save!
page.update!(next_asset_no: no + 1)
end
render json: asset
end
end
+10
View File
@@ -0,0 +1,10 @@
class WikiAsset < ApplicationRecord
self.primary_key = :wiki_page_id, :no
belongs_to :wiki_page
belongs_to :created_by_user, class_name: 'User'
has_one_attached :file
validates :file, presence: true
end
+2
View File
@@ -15,6 +15,8 @@ class WikiPage < ApplicationRecord
foreign_key: :redirect_page_id,
dependent: :nullify
has_many :assets, class_name: 'WikiAsset', dependent: :destroy
belongs_to :tag_name
validates :tag_name, presence: true