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