PhoenixKit.Modules.Shop.Import.CSVValidator (phoenix_kit v1.7.39)

Copy Markdown View Source

Validates CSV files before import processing.

Performs early validation to fail fast with meaningful errors rather than discovering issues mid-import.

Validation Checks

  1. File exists and readable - Basic filesystem check
  2. CSV parseable - File is valid CSV format
  3. Required columns present - Checks for Handle, Title, Variant Price by default
  4. Warning detection - Non-blocking issues like empty rows

Examples

# Basic validation with default required columns
case CSVValidator.validate_file("/path/to/products.csv") do
  :ok -> IO.puts("File is valid")
  {:error, reason} -> IO.puts("Validation failed: #{reason}")
end

# Validation with custom required columns
CSVValidator.validate_headers("/path/to/products.csv", ["Handle", "Title", "Price"])

# Full validation report
report = CSVValidator.get_validation_report("/path/to/products.csv")
# => %{
#   valid: true,
#   file_path: "/path/to/products.csv",
#   headers: ["Handle", "Title", ...],
#   row_count: 1234,
#   warnings: ["Some rows have empty Handle values"]
# }

Summary

Functions

Extracts headers from a CSV file.

Returns a comprehensive validation report.

Validates that a file exists, is readable, and has valid CSV format.

Extracts and validates CSV headers against required columns.

Extracts and validates CSV headers against custom required columns.

Functions

extract_headers(file_path)

Extracts headers from a CSV file.

Returns {:ok, headers} or {:error, reason}.

get_validation_report(file_path, opts \\ [])

Returns a comprehensive validation report.

Report Structure

%{
  valid: boolean,
  file_path: string,
  file_size: integer,
  headers: list | nil,
  row_count: integer | nil,
  missing_columns: list,
  warnings: list,
  error: string | nil
}

validate_file(file_path)

Validates that a file exists, is readable, and has valid CSV format.

Returns :ok or {:error, reason}.

validate_headers(file_path)

Extracts and validates CSV headers against required columns.

Uses default required columns: ["Handle", "Title", "Variant Price"]

Returns {:ok, headers} or {:error, reason}.

validate_headers(file_path, required_columns)

Extracts and validates CSV headers against custom required columns.

Returns {:ok, headers} or {:error, {:missing_columns, missing}}.