Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# AGENTS.md - import-cli

## Zweck & Verantwortung

Das `import-cli` Modul bietet **CLI Commands und Helpers** für das Pacemaker Import-System. Es ist ein **Tier 7 Modul** und dient als Basis für CLI-Anwendungen.

**Hauptverantwortung:**
- Symfony Console Integration
- CLI Commands für Import-Operationen
- Configuration Loading und Management
- Dependency Injection für CLI
- Helper-Klassen für CLI-Operationen

## Architektur & Design Patterns

### Kern-Klassen
- **ConfigurationLoader**: Lädt Konfiguration aus Dateien
- **SimpleConfigurationLoader**: Einfache Konfiguration-Loader
- **ConfigurationLoaderInterface**: Basis-Interface
- **CliCommand**: Basis-Klasse für CLI Commands

### Verwendete Patterns
- **Command Pattern**: Für CLI Commands
- **Factory Pattern**: Für Object-Erstellung
- **Dependency Injection**: Für Dependency Management

### Externe Dependencies
- **symfony/console** - Symfony Console Component
- **symfony/config** - Symfony Config Component
- **symfony/dependency-injection** - Symfony DI
- **symfony/expression-language** - Expression Language
- **ramsey/uuid** - UUID-Generierung

## Abhängigkeiten

### Externe Pakete
- **symfony/console** ^4.0|^5.0|^6.0 - Console Commands
- **symfony/config** ^4.0|^5.0|^6.0 - Configuration
- **symfony/dependency-injection** ^4.0|^5.0|^6.0 - DI Container
- **symfony/expression-language** ^4.0|^5.0|^6.0 - Expression Language
- **ramsey/uuid** ^1.0 - UUID-Generierung

### TechDivision Dependencies
- **import-app-simple** ^19.0 - Simple Application
- **import-configuration-jms** ^18.1 - JMS Configuration

### Abhängig von diesem Modul (1 Reverse Dependency)
- **import-cli-simple** - Master CLI

## Wichtige Entry Points

### Configuration Loader Klassen
```php
// Configuration Loader Interface
ConfigurationLoaderInterface::load($file): ConfigurationInterface

// Simple Configuration Loader
SimpleConfigurationLoader::load($file): ConfigurationInterface

// Configuration Loader
ConfigurationLoader::load($file): ConfigurationInterface
```

### CLI Command Klassen
```php
// CLI Command
CliCommand::execute(InputInterface $input, OutputInterface $output): int
CliCommand::configure(): void
```

## Events & Extension Points

**Keine Events** - Tier 7 CLI-Modul

## Hints für KI-Agenten

### Wichtig zu verstehen
1. **Tier 7 Modul**: CLI Framework für Import-Operationen
2. **Symfony Console**: Nutzt Symfony Console Component
3. **Configuration Loading**: Lädt Konfiguration aus Dateien
4. **Dependency Injection**: Nutzt Symfony DI Container
5. **1 Dependent**: Basis für Master CLI

### Bei Änderungen
- **CLI-Kompatibilität**: Beachte Symfony Console API
- **Configuration-Kompatibilität**: Beachte Konfiguration-Format
- **Backward Compatibility**: Alte CLI-Commands sollten noch funktionieren

## Häufige Use Cases

### CLI-Command-Beispiele
```bash
# Standard Import-Command
php bin/pacemaker import:product --config=config.xml

# Mit Custom Options
php bin/pacemaker import:product --config=config.xml --batch-size=500

# Configuration Loading
php bin/pacemaker import:customer --config=customer-config.xml
```

### Szenarien
1. **CLI-Integration**: Commands nutzen SimpleConfigurationLoader für Config-Laden
2. **Cron-Jobs**: Automatisierte Imports via Cron
3. **Manual Triggers**: Ad-hoc Imports über CLI

## Performance-Überlegungen

- **CLI-Startup**: ~200-300ms für Framework-Init
- **Configuration-Load**: ~50-100ms für Standard Config
- **Total-Overhead**: ~300-400ms vorher der Import startet
- **Configuration-Caching**: Config wird gecacht - schneller bei wiederholten Imports
- **Optimal für**: > 5000 Records (Overhead relativiert sich)

## Verwandte Module

- **import-app-simple**: Application-Layer für CLI
- **import-configuration-jms**: JMS Configuration für CLI
- **import-cli-simple**: Master CLI nutzt dieses Modul
- **import-cli** ← **diese Datei** (CLI Framework!)

## Troubleshooting & FAQ

**Q: "Configuration file not found"**
- A: Config-Pfad prüfen! Relative oder absolute Pfade möglich: `--config=/path/config.xml` oder `--config=config.xml` (relativ zu cwd)

**Q: CLI-Commands werden nicht erkannt**
- A: Composer autoload problem. Führe aus: `composer dump-autoload`

**Q: Symfony Console Command nicht geladen**
- A: Command-Klasse nicht in DI registriert. Prüfe DI-Konfiguration.

**Q: Environment-Variablen funktionieren nicht**
- A: `.env` wird nicht automatisch geladen! Setze Variablen: `export BATCH_SIZE=1000 && php bin/pacemaker import:product`

## Bekannte Einschränkungen

- **Symfony-abhängig**: Erfordert Symfony Components
- **Single-Threaded**: Nur für Single-Threaded Imports
- **Keine Multi-Threaded Support**: Nicht für parallele Imports

## Zusammenfassung

`import-cli` ist ein **Tier 7 Modul**, das CLI Commands und Helpers für das Pacemaker-System bietet. Es ist die Basis für CLI-Anwendungen und nutzt Symfony Console für Command-Management.

**Für Agenten:** Verstehe dieses Modul als **CLI Framework** mit Symfony Console Integration und Configuration Loading.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
# Version 13.2.0

## Features

### PHP 8.5 Compatibility

* Update dependencies
* Remove PHP 8.2 support
* Use the project-specific XML loader class instead of the one removed in `symfony/dependency-injection` v8

# Version 13.1.0

## Features
Expand Down
10 changes: 5 additions & 5 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
"description": "Commands and Helpers to implement a CLI providing single-threaded Magento 2 importing functionality based on Pacemaker",
"license": "MIT",
"require": {
"php": "^8.1",
"php": "^8.3",
"ramsey/uuid": "^4.2|^4.7",
"symfony/config": "~5.0|~6.0|~7.0",
"symfony/config": "~5.0|~6.0|~7.0|~8.0",
"symfony/console": "~4.0|~5.0|~6.0|~7.0",
"symfony/expression-language": "~6.0",
"symfony/dependency-injection": "~5.0|~6.0|~7.0",
"techdivision/import-app-simple": "^19.0",
"techdivision/import-configuration-jms": "^18.1"
"symfony/dependency-injection": "~5.0|~6.0|~7.0|~8.0",
"techdivision/import-app-simple": "^19.1",
"techdivision/import-configuration-jms": "^18.2"
},
"require-dev": {
"doctrine/dbal": "^4.0.4",
Expand Down
45 changes: 7 additions & 38 deletions config.json.simple
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"system-name": "",
"entity-type-code": "none",
"installation-dir": "",
"system-name": "01786-mbp",
"entity-type-code": "debug",
"installation-dir": "\/Volumes\/workspace\/MET\/249e",
"source-dir": "var\/pacemaker\/import",
"target-dir": "var\/pacemaker\/import",
"magento-edition": "CE",
"magento-version": "2.4.6",
"magento-version": "2.4.9-beta1",
"databases": [],
"loggers": {
"system": {
Expand Down Expand Up @@ -9674,38 +9674,7 @@
}
}
},
"extension-libraries": [
"techdivision\/import-app-simple",
"techdivision\/import",
"techdivision\/import-cli",
"techdivision\/import-ee",
"techdivision\/import-attribute",
"techdivision\/import-attribute-set",
"techdivision\/import-category",
"techdivision\/import-category-ee",
"techdivision\/import-customer",
"techdivision\/import-customer-address",
"techdivision\/import-product",
"techdivision\/import-product-ee",
"techdivision\/import-product-msi",
"techdivision\/import-product-tier-price",
"techdivision\/import-product-url-rewrite",
"techdivision\/import-product-bundle",
"techdivision\/import-product-bundle-ee",
"techdivision\/import-product-link",
"techdivision\/import-product-link-ee",
"techdivision\/import-product-media",
"techdivision\/import-product-media-ee",
"techdivision\/import-product-variant",
"techdivision\/import-product-variant-ee",
"techdivision\/import-product-grouped",
"techdivision\/import-product-grouped-ee",
"techdivision\/import-converter",
"techdivision\/import-converter-ee",
"techdivision\/import-converter-product-category",
"techdivision\/import-converter-product-attribute",
"techdivision\/import-converter-customer-attribute"
],
"extension-libraries": [],
"header-mappings": {
"eav_entity_attribute": {
"entity_type_code": "entity_type_id",
Expand Down Expand Up @@ -10280,7 +10249,7 @@
"magento-domain": ""
},
"config-output": false,
"configuration_files": true,
"configurationFiles": true,
"ignore-attribute-value-on-update": {},
"delimiter": ",",
"enclosure": "\"",
Expand Down Expand Up @@ -10328,4 +10297,4 @@
]
}
]
}
}
4 changes: 2 additions & 2 deletions src/Command/AbstractImportCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,11 @@ protected function getContainer()
* @param \Symfony\Component\Console\Input\InputInterface $input An InputInterface instance
* @param \Symfony\Component\Console\Output\OutputInterface $output An OutputInterface instance
*
* @return null|int null or 0 if everything went fine, or an error code
* @return int 0 if everything went fine, or an error code
* @throws \LogicException When this abstract method is not implemented
* @see \Symfony\Component\Console\Command\Command::execute()
*/
protected function execute(InputInterface $input, OutputInterface $output)
protected function execute(InputInterface $input, OutputInterface $output): int
{

// initialize the configuration instance
Expand Down
2 changes: 1 addition & 1 deletion src/Configuration/LibraryLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use TechDivision\Import\DependencyInjection\Loader\XmlFileLoader;
use TechDivision\Import\Configuration\ConfigurationInterface;
use TechDivision\Import\Cli\Utils\DependencyInjectionKeys;

Expand Down
7 changes: 4 additions & 3 deletions symfony/DependencyInjection/ImportExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@

namespace TechDivision\Import\Cli\DependencyInjection;

use Exception;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use TechDivision\Import\DependencyInjection\Loader\XmlFileLoader;

/**
* The symfony extension implementation for the M2IF import attribute library.
Expand All @@ -30,14 +31,14 @@
*/
class ImportExtension extends Extension
{

/**
* Load's the bundles DI configuration.
*
* @param array $configs The array with the configuration
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container The container instance
* @return void
*/
public function load(array $configs, ContainerBuilder $container)
public function load(array $configs, ContainerBuilder $container): void
{
$loader = new XmlFileLoader($container, new FileLocator(dirname(__DIR__) . '/Resources/config'));
$loader->load('services.xml');
Expand Down
Loading