| name | data-import |
| description | Use the skill to create, update, fix, or implement data import. |
Data Import Generator
I need to create a data import for my new entity '{ENTITY_NAME}'.
Main AC: Create a new Spryker module named {MODULE_NAME}.
Create a new module {MODULE_NAME} in Zed Layer:
- Create the database schema:
- Table: {TABLE_NAME}
- Columns: {COLUMN_DEFINITIONS}.
Include timestampable behavior.
- Define Transfer objects in Shared layer (transfer.xml).
Create a new module {MODULE_NAME}DataImport in Zed Layer:
- Create
{MODULE_NAME}DataImportConfig extending DataImportConfig:
- Define
IMPORT_TYPE_{ENTITY_NAME_UPPER} constant.
- Implement
get{ENTITY_NAME}DataImporterConfiguration(): DataImporterConfigurationTransfer.
- Create
{ENTITY_NAME}DataSetInterface with CSV column key constants.
- Implement the import step pipeline in Business layer:
{ENTITY_NAME}RequiredFieldValidatorStep — validates required CSV fields.
{ENTITY_NAME}WriterStep — reads DataSet, upserts entity via Propel query, saves.
- If foreign keys needed: add
{Reference}To{Id}Step resolver steps with internal ID cache.
- Create
{MODULE_NAME}DataImportBusinessFactory extending DataImportBusinessFactory:
get{ENTITY_NAME}DataImport(): DataImporterInterface — wires CSV importer + transaction-aware step broker with all steps.
- Create
{MODULE_NAME}DataImportFacadeInterface and {MODULE_NAME}DataImportFacade:
- Method:
import{ENTITY_NAME}s(?DataImporterConfigurationTransfer $dataImporterConfigurationTransfer = null): DataImporterReportTransfer
- Create
{ENTITY_NAME}DataImportPlugin in Communication/Plugin implementing DataImportPluginInterface:
getImportType() returns the IMPORT_TYPE constant value.
import() delegates to facade.
- Register the plugin in
DataImportDependencyProvider::getDataImporterPlugins().
- Add the import entry to the relevant
data/import/*.yml file:
- data_entity: {import-type}
source: data/import/common/common/{entity_name}.csv
- Create the sample CSV file with headers matching DataSetInterface constants.
Use Spryker best practices. Use native PHP types. No extra DocBlocks. Use current branch.
Do not run propel:install or transfer:generate — write code only.
Example Usage
I need to create a data import for my new entity 'picker'.
Main AC: Create a new Spryker module named Picker.
Create a new module Picker in Zed Layer:
- Create the database schema:
- Table: pyz_picker
- Columns:
- id_picker (PK, auto-increment integer)
- first_name (VARCHAR 255, required)
- last_name (VARCHAR 255, required)
- middle_name (VARCHAR 255, optional)
- rating (INTEGER, optional)
- date_of_birth (DATE, optional).
Include timestampable behavior.
- Define PickerTransfer in Shared/Transfer/picker.transfer.xml.
Create a new module PickerDataImport in Zed Layer:
PickerDataImportConfig with IMPORT_TYPE_PICKER = 'picker' and getPickerDataImporterConfiguration().
PickerDataSetInterface — constants: FIRST_NAME = 'first_name', LAST_NAME = 'last_name', etc.
- Step pipeline:
PickerRequiredFieldValidatorStep — validates first_name, last_name.
PickerWriterStep — upserts SpyPickerQuery using DataSet values.
PickerDataImportBusinessFactory::getPickerDataImport() — CSV importer + transaction-aware broker with validator → writer steps.
- Facade method:
importPickers(?DataImporterConfigurationTransfer $dataImporterConfigurationTransfer = null): DataImporterReportTransfer
PickerDataImportPlugin implementing DataImportPluginInterface.
- Register plugin in
DataImportDependencyProvider.
- Add to
data/import/common/minimal.yml:
- data_entity: picker
source: data/import/common/common/picker.csv
- Create
data/import/common/common/picker.csv:
first_name,last_name,middle_name,rating,date_of_birth
John,Doe,,5,1990-01-15
Example Output
PickerDataImport/
├── src/Pyz/Zed/PickerDataImport/
│ ├── PickerDataImportConfig.php
│ ├── PickerDataImportDependencyProvider.php
│ ├── Business/
│ │ ├── DataSet/
│ │ │ └── PickerDataSetInterface.php
│ │ ├── DataImport/
│ │ │ └── PickerDataImportStep/
│ │ │ ├── PickerRequiredFieldValidatorStep.php
│ │ │ └── PickerWriterStep.php
│ │ ├── PickerDataImportBusinessFactory.php
│ │ ├── PickerDataImportFacadeInterface.php
│ │ └── PickerDataImportFacade.php
│ └── Communication/
│ └── Plugin/
│ └── PickerDataImportPlugin.php
└── data/import/common/common/
└── picker.csv