refactor(imports): focus Sure preflight scope (#1833)

This commit is contained in:
ghost
2026-06-02 15:37:21 -07:00
committed by GitHub
parent 948667f3d0
commit cb660ebf65
12 changed files with 1353 additions and 126 deletions

View File

@@ -35,14 +35,14 @@ class Api::V1::ImportsController < Api::V1::BaseController
rescue StandardError => e
Rails.logger.error "ImportsController#index error: #{e.message}"
render json: { error: "internal_server_error", message: e.message }, status: :internal_server_error
render json: { error: "internal_server_error", message: "An unexpected error occurred." }, status: :internal_server_error
end
def show
render :show
rescue StandardError => e
Rails.logger.error "ImportsController#show error: #{e.message}"
render json: { error: "internal_server_error", message: e.message }, status: :internal_server_error
render json: { error: "internal_server_error", message: "An unexpected error occurred." }, status: :internal_server_error
end
def rows
@@ -58,7 +58,7 @@ class Api::V1::ImportsController < Api::V1::BaseController
render :rows
rescue StandardError => e
Rails.logger.error "ImportsController#rows error: #{e.message}"
render json: { error: "internal_server_error", message: e.message }, status: :internal_server_error
render json: { error: "internal_server_error", message: "An unexpected error occurred." }, status: :internal_server_error
end
def create
@@ -133,7 +133,7 @@ class Api::V1::ImportsController < Api::V1::BaseController
rescue StandardError => e
Rails.logger.error "ImportsController#create error: #{e.message}"
render json: { error: "internal_server_error", message: e.message }, status: :internal_server_error
render json: { error: "internal_server_error", message: "An unexpected error occurred." }, status: :internal_server_error
end
def preflight
@@ -156,7 +156,7 @@ class Api::V1::ImportsController < Api::V1::BaseController
render json: {
error: "internal_server_error",
message: "Error: #{e.message}"
message: "Import preflight could not be completed."
}, status: :internal_server_error
end
@@ -242,7 +242,7 @@ class Api::V1::ImportsController < Api::V1::BaseController
end
begin
@import.publish_later if @import.publishable? && params[:publish] == "true"
@import.publish_later if params[:publish] == "true"
rescue Import::MaxRowCountExceededError
render json: {
error: "max_row_count_exceeded",
@@ -250,6 +250,22 @@ class Api::V1::ImportsController < Api::V1::BaseController
import_id: @import.id
}, status: :unprocessable_entity
return
rescue SureImport::PreflightError
render json: {
error: "preflight_failed",
message: "Import was uploaded but did not pass Sure NDJSON preflight.",
errors: sure_import_error_lines,
import_id: @import.id
}, status: :unprocessable_entity
return
rescue SureImport::NotPublishableError => e
Rails.logger.warn "Sure import not publishable for import #{@import.id}: #{e.message}"
render json: {
error: "not_publishable",
message: "Import was uploaded but has no publishable records.",
import_id: @import.id
}, status: :unprocessable_entity
return
rescue StandardError => e
Rails.logger.error "Sure import publish failed for import #{@import.id}: #{e.message}"
restore_pending_sure_import_after_publish_failure
@@ -284,6 +300,8 @@ class Api::V1::ImportsController < Api::V1::BaseController
@import.update_column(:status, "pending") if @import&.persisted? && @import.importing?
end
def sure_import_error_lines = @import.error.to_s.lines.map(&:strip).reject(&:blank?)
def clean_up_failed_sure_import(import)
return unless import