Skip to content

CSV Export

Produce a Casestry-format CSV for a specified date range — a workflow (ProcedureExecution) that queries warehouse data, generates an export document, and stores it in R2 as a downloadable file (R2 object).

Goal: Generate a downloadable export file and a durable export record.

MethodPathSpecDescription
POST/creative-ops/exportscreative-ops.yamlCreate an export job (async, returns pending)
GET/creative-ops/exportscreative-ops.yamlList export jobs with status
GET/creative-ops/exports/{export_id}creative-ops.yamlExport detail + signed download URL
POST/creative-ops/exports/{export_id}/regeneratecreative-ops.yamlRe-run export with same parameters
TableModuleRole
macrodata_artifact (kind: document_export)MacrodataWrite: export record with status + download URL
order_headerOrderRead: source data for CSV rows
order_line_itemOrderRead: line-item detail for CSV
link_product_macrodata_artifactMacrodataRead: design asset bearer URLs for join
ResourceTypePurpose
internalWorkerAPI validation, export record creation, job enqueue
ingestWorkerWorkflow executor: query, format, upload
CF QueueQueueDOCUMENT_ARTIFACT_GENERATE job delivery
R2 bucketObject storageStores generated CSV file
ActorRole
Staff userRequests export with date range
Dashboard API WorkerCreates export record, enqueues job
Ingest WorkerQueries data, generates CSV, uploads to R2
PlanetScaleData source + export records
R2Stores generated export file
  1. Staff calls POST /creative-ops/exports with date range and format
  2. API validates Access, writes macrodata_artifact row (kind: document_export) as pending
  3. API enqueues DOCUMENT_ARTIFACT_GENERATE(export_id, date_range)
  4. Step: Query — Worker queries order_header / order_line_item for the range
  5. Step: Join — Worker joins with link_product_macrodata_artifact for design asset bearer URLs
  6. Step: Format — Worker formats Casestry CSV (34 columns including vendor resolution)
  7. Step: Store — Worker uploads file to R2 and stores download URL in macrodata_artifact.file_url
  8. Step: Finalize — Worker updates macrodata_artifact.status = 'completed' with counts and metadata
Error conditionRecovery
Missing product-artifact linkInclude placeholder value; record count in metadata.error_count
PlanetScale limitsChunk reads; stream CSV generation; stay under 64 MiB result sets
Export creation failsSet status = 'failed', store error_message
{
"job_type": "DOCUMENT_ARTIFACT_GENERATE",
"job_id": "uuid",
"export_id": "uuid",
"date_range_start": "YYYY-MM-DD",
"date_range_end": "YYYY-MM-DD"
}
  • PASS: CSV rows match expected order count; download URL resolves; export record transitions pending → completed
  • FAIL: Incorrect formatting; missing required columns; data mismatch vs order_header