# WEBSHOP SYSTEM - API DOKUMENTATION ## ÜBERBLICK Das Webshop-System bietet eine vollständig PrestaShop-kompatible API mit erweiterten Funktionen für moderne E-Commerce-Anwendungen. **Version:** 1.0.0 **Basis:** PrestaShop 8.x kompatibel **Lizenz:** GPL v3 **Autor:** Webshop System ## 🚀 SCHNELLSTART ### Installation ```bash # Repository klonen git clone https://github.com/webshop-system/core.git # Dependencies installieren composer install # Docker-Container starten docker-compose up -d # Datenbank initialisieren php bin/console doctrine:database:create php bin/console doctrine:migrations:migrate ``` ### Erste Schritte ```php // Context initialisieren $context = Context::getContext(); // Produkt erstellen $product = new Product(); $product->name = 'Mein Produkt'; $product->price = 29.99; $product->add(); // Produkt abrufen $product = new Product(1); echo $product->name; // "Mein Produkt" ``` ## 📚 CORE-KLASSEN ### Product.php **Vollständige PrestaShop-kompatible Produktverwaltung** #### Konstruktor ```php $product = new Product($id = null, $id_lang = null, $id_shop = null); ``` #### Hauptmethoden **Produkt erstellen:** ```php $product = new Product(); $product->name = 'Produktname'; $product->reference = 'REF-001'; $product->price = 29.99; $product->active = true; $result = $product->add(); ``` **Produkt abrufen:** ```php $product = new Product(1); echo $product->name; echo $product->price; ``` **Produkt aktualisieren:** ```php $product = new Product(1); $product->price = 39.99; $result = $product->update(); ``` **Produkt löschen:** ```php $product = new Product(1); $result = $product->delete(); ``` **Produkt suchen:** ```php $products = Product::searchByName('Suchbegriff'); $product = Product::getByReference('REF-001'); ``` **Preisberechnung:** ```php $product = new Product(1); $priceWithTax = $product->getPrice(true); $priceWithoutTax = $product->getPrice(false); ``` **Lagerbestand:** ```php $product = new Product(1); $available = $product->checkQty(5); $stock = $product->quantity; ``` #### Webservice-API ```php // Alle Produkte abrufen $products = $product->getWebserviceObjectList('', '', '', ''); // Produkt über Webservice erstellen $wsProduct = [ 'name' => 'Webservice Produkt', 'reference' => 'WS-001', 'price' => 19.99 ]; ``` ### Category.php **Kategorieverwaltung mit Hierarchie-Support** #### Hauptmethoden ```php // Kategorie erstellen $category = new Category(); $category->name = 'Elektronik'; $category->active = true; $category->add(); // Unterkategorie erstellen $subCategory = new Category(); $subCategory->name = 'Smartphones'; $subCategory->id_parent = 1; $subCategory->add(); // Kategoriehierarchie abrufen $categories = Category::getCategories(1); $children = $category->getChildren(1); ``` ### ObjectModel.php **Basis-Klasse für alle Modelle** #### Hauptmethoden ```php // Objekt erstellen $object = new MyModel(); $object->add(); // Objekt abrufen $object = new MyModel(1); // Objekt aktualisieren $object->update(); // Objekt löschen $object->delete(); // Validierung $isValid = $object->validateFields(); ``` ### Db.php **Erweiterte Datenbankfunktionen** #### Hauptmethoden ```php // Query ausführen $result = Db::getInstance()->executeS('SELECT * FROM product'); // Einzelnen Wert abrufen $name = Db::getInstance()->getValue('SELECT name FROM product WHERE id = 1'); // Insert $result = Db::getInstance()->insert('product', [ 'name' => 'Test', 'price' => 29.99 ]); // Update $result = Db::getInstance()->update('product', [ 'price' => 39.99 ], 'id = 1'); // Delete $result = Db::getInstance()->delete('product', 'id = 1'); ``` ### Context.php **Kontext-Management für Multi-Shop** #### Hauptmethoden ```php // Context abrufen $context = Context::getContext(); // Shop-Informationen $shop = $context->shop; $language = $context->language; $currency = $context->currency; $customer = $context->customer; $cart = $context->cart; ``` ### Order.php **Bestellverwaltung** #### Hauptmethoden ```php // Bestellung erstellen $order = new Order(); $order->id_customer = 1; $order->id_cart = 1; $order->total_paid = 99.99; $order->add(); // Bestellstatus aktualisieren $order = new Order(1); $order->setCurrentState(2); // 2 = Bezahlt // Bestellhistorie $history = $order->getHistory(1); ``` ### Customer.php **Kundenverwaltung** #### Hauptmethoden ```php // Kunde erstellen $customer = new Customer(); $customer->firstname = 'Max'; $customer->lastname = 'Mustermann'; $customer->email = 'max@example.com'; $customer->add(); // Kunde abrufen $customer = new Customer(1); echo $customer->firstname; // Kundenadressen $addresses = $customer->getAddresses(1); ``` ### Cart.php **Warenkorb-Management** #### Hauptmethoden ```php // Warenkorb erstellen $cart = new Cart(); $cart->id_customer = 1; $cart->add(); // Produkt zum Warenkorb hinzufügen $cart->updateQty(1, 2); // Produkt ID 1, Menge 2 // Warenkorb-Inhalt abrufen $products = $cart->getProducts(); // Gesamtsumme $total = $cart->getOrderTotal(); ``` ## 🔧 KONFIGURATION ### Configuration.php **Zentrale Konfigurationsverwaltung** ```php // Konfiguration setzen Configuration::set('PS_SHOP_NAME', 'Mein Webshop'); Configuration::set('PS_SHOP_EMAIL', 'info@meinwebshop.de'); // Konfiguration abrufen $shopName = Configuration::get('PS_SHOP_NAME'); $shopEmail = Configuration::get('PS_SHOP_EMAIL'); // Globale Konfiguration Configuration::updateGlobalValue('PS_MAINTENANCE_MODE', false); // Multi-Shop Konfiguration Configuration::set('PS_SHOP_NAME', 'Shop Name', 1, 1); ``` ### Language.php **Sprachverwaltung** ```php // Sprachen abrufen $languages = Language::getLanguages(); $activeLanguages = Language::getLanguages(true); // Sprache nach ISO-Code $language = Language::getIdByIso('de'); $language = Language::getIdByLocale('de_DE'); // Sprache installieren Language::checkAndAddLanguage('fr', true); ``` ### Shop.php **Multi-Shop Management** ```php // Shops abrufen $shops = Shop::getShops(); $activeShops = Shop::getShops(true); // Context setzen Shop::setContext(Shop::CONTEXT_SHOP, 1); Shop::setContext(Shop::CONTEXT_GROUP, 1); Shop::setContext(Shop::CONTEXT_ALL); // Aktueller Shop $currentShop = Shop::getContextShopID(); ``` ## 🌐 WEBSERVICE-API ### REST-API Endpoints **Produkte:** ``` GET /api/products GET /api/products/{id} POST /api/products PUT /api/products/{id} DELETE /api/products/{id} ``` **Kategorien:** ``` GET /api/categories GET /api/categories/{id} POST /api/categories PUT /api/categories/{id} DELETE /api/categories/{id} ``` **Bestellungen:** ``` GET /api/orders GET /api/orders/{id} POST /api/orders PUT /api/orders/{id} DELETE /api/orders/{id} ``` **Kunden:** ``` GET /api/customers GET /api/customers/{id} POST /api/customers PUT /api/customers/{id} DELETE /api/customers/{id} ``` ### API-Authentifizierung ```php // API-Key generieren $apiKey = Tools::generateApiKey(); // API-Zugriff $headers = [ 'Authorization: Bearer ' . $apiKey, 'Content-Type: application/json' ]; ``` ## 🐳 DOCKER-DEPLOYMENT ### Docker-Compose Setup ```yaml version: '3.8' services: php: build: ./docker/php volumes: - .:/var/www/html depends_on: - mysql - redis mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: webshop volumes: - mysql_data:/var/lib/mysql nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - .:/var/www/html - ./docker/nginx:/etc/nginx/conf.d depends_on: - php redis: image: redis:alpine ports: - "6379:6379" ``` ### Deployment-Skript ```bash #!/bin/bash # deploy.sh echo "🚀 Deploying Webshop System..." # Docker-Container stoppen docker-compose down # Neueste Version pullen git pull origin main # Dependencies installieren composer install --no-dev --optimize-autoloader # Docker-Container starten docker-compose up -d # Datenbank-Migrationen docker-compose exec php php bin/console doctrine:migrations:migrate # Cache leeren docker-compose exec php php bin/console cache:clear echo "✅ Deployment abgeschlossen!" ``` ## 📊 PERFORMANCE-OPTIMIERUNG ### Caching-Strategien ```php // Redis-Cache konfigurieren Cache::setRedisConnection([ 'host' => 'redis', 'port' => 6379, 'database' => 0 ]); // Produkt-Cache $product = Cache::retrieve('product_1'); if (!$product) { $product = new Product(1); Cache::store('product_1', $product, 3600); } ``` ### Datenbank-Optimierung ```sql -- Indizes für bessere Performance CREATE INDEX idx_product_active ON product(active); CREATE INDEX idx_product_category ON product(id_category_default); CREATE INDEX idx_product_price ON product(price); CREATE INDEX idx_order_customer ON `order`(id_customer); CREATE INDEX idx_cart_customer ON cart(id_customer); ``` ### Monitoring ```php // Performance-Monitoring $startTime = microtime(true); $product = new Product(1); $endTime = microtime(true); $executionTime = $endTime - $startTime; Logger::log('Product load time: ' . $executionTime . 's'); ``` ## 🔒 SICHERHEIT ### Validierung ```php // Input-Validierung $name = Tools::safeOutput($_POST['name']); $email = Validate::isEmail($_POST['email']); $price = Validate::isPrice($_POST['price']); if (!$email) { throw new Exception('Ungültige E-Mail-Adresse'); } ``` ### SQL-Injection-Schutz ```php // Sichere Queries $sql = 'SELECT * FROM product WHERE id = ' . (int)$id; $sql = 'SELECT * FROM product WHERE name = \'' . pSQL($name) . '\''; ``` ### XSS-Schutz ```php // Output-Escaping echo Tools::safeOutput($userInput); echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8'); ``` ## 🧪 TESTING ### Unit-Tests ausführen ```bash # Alle Tests vendor/bin/phpunit # Spezifische Test-Klasse vendor/bin/phpunit tests/Unit/ProductTest.php # Mit Coverage-Report vendor/bin/phpunit --coverage-html coverage/ ``` ### Integration-Tests ```php // Beispiel Integration-Test class OrderIntegrationTest extends TestCase { public function testCompleteOrderFlow() { // Kunde erstellen $customer = new Customer(); $customer->firstname = 'Test'; $customer->lastname = 'Customer'; $customer->email = 'test@example.com'; $customer->add(); // Warenkorb erstellen $cart = new Cart(); $cart->id_customer = $customer->id; $cart->add(); // Produkt zum Warenkorb hinzufügen $cart->updateQty(1, 2); // Bestellung erstellen $order = new Order(); $order->id_customer = $customer->id; $order->id_cart = $cart->id; $order->total_paid = 99.99; $order->add(); $this->assertGreaterThan(0, $order->id); } } ``` ## 📈 MONITORING & LOGGING ### Logging-Konfiguration ```php // Logger konfigurieren Logger::setLogLevel(Logger::INFO); Logger::log('Application started', Logger::INFO); Logger::log('Error occurred', Logger::ERROR); ``` ### Performance-Monitoring ```php // Response-Zeit messen $startTime = microtime(true); // ... Code ausführen ... $endTime = microtime(true); $responseTime = $endTime - $startTime; if ($responseTime > 1.0) { Logger::log('Slow response: ' . $responseTime . 's', Logger::WARNING); } ``` ## 🚀 DEPLOYMENT-CHECKLISTE ### Vor dem Deployment - [ ] Alle Tests erfolgreich - [ ] Code-Review abgeschlossen - [ ] Datenbank-Backup erstellt - [ ] Umgebungsvariablen konfiguriert - [ ] SSL-Zertifikate installiert ### Nach dem Deployment - [ ] Anwendung erreichbar - [ ] Datenbank-Verbindung funktioniert - [ ] Cache funktioniert - [ ] Logs werden geschrieben - [ ] Monitoring aktiviert ## 📞 SUPPORT ### Kontakt - **E-Mail:** support@webshop-system.de - **Dokumentation:** https://docs.webshop-system.de - **GitHub:** https://github.com/webshop-system/core ### Häufige Probleme **Problem:** Datenbank-Verbindung fehlschlägt ```bash # Lösung: Docker-Container neu starten docker-compose restart mysql ``` **Problem:** Cache-Probleme ```bash # Lösung: Cache leeren php bin/console cache:clear ``` **Problem:** Performance-Probleme ```bash # Lösung: OpCache aktivieren docker-compose exec php php -d opcache.enable=1 ``` --- **© 2024 Webshop System - Vollständig PrestaShop-kompatibel**