class PostImportsController < ApplicationController before_action :require_member! def preview rows = PostImportPreviewer.new(existing: params[:existing]).preview_rows( rows: PostImportUrlListParser.parse(params[:source])) render json: { rows: } rescue ArgumentError => e render_bad_request(e.message) end def validate rows = normalised_import_rows(allow_warning_fields: true) changed_row = Integer(params[:changed_row], exception: false) result = PostImportPreviewer.new(existing: params[:existing]) .preview_rows(rows:, fetch_metadata: changed_row, metadata_cache: {}) render json: { rows: result } rescue ArgumentError => e render_bad_request(e.message) end def create result = PostImportRunner.new( actor: current_user, rows: normalised_import_rows, existing: params[:existing]).run render json: result, status: result[:created].positive? ? :created : :ok rescue ArgumentError => e render_bad_request(e.message) end private def require_member! return head :unauthorized unless current_user return if current_user.gte_member? head :forbidden end def normalised_import_rows allow_warning_fields: false PostImportRowNormaliser.normalise!(params[:rows], allow_warning_fields:) end end