ファイル
btrc-hub/backend/app/controllers/post_imports_controller.rb
T
2026-07-11 21:11:36 +09:00

38 行
1.3 KiB
Ruby

class PostImportsController < ApplicationController
before_action :require_member!
def preview
source =
if params[:format] == 'google_sheets'
PostImportGoogleSheetsFetcher.fetch!(params[:source], rate_key: current_user.id)
else
params[:source]
end
format = params[:format] == 'google_sheets' ? 'csv' : params[:format]
parsed = PostImportSourceParser.new(source:, format:,
has_header: params[:has_header], json_path: params[:json_path]).parse
url_column = params[:url_column].presence || (parsed[:columns].length == 1 ? 0 : nil)
return render_bad_request('URL 列を選択してください.') if url_column.nil?
rows = PostImportPreviewer.new(parsed:, url_column:, mappings: params[:mappings],
existing: params[:existing]).preview
render json: parsed.slice(:columns).merge(rows:)
rescue ArgumentError => e
render_bad_request(e.message)
end
def create
render json: PostImportRunner.new(actor: current_user, rows: params[:rows].to_a).run,
status: :created
end
private
def require_member!
return head :unauthorized unless current_user
return if current_user.gte_member?
head :forbidden
end
end