# Vorbereitung

Für die Lösung der Aufgaben benötigst du lediglich einen Editor. Es ist empfohlen eine Magento-Instanz 
zu erstellen, um entsprechende Code-Vervollständigung in der IDE nutzen zu können.
Wenn Du Deinen Code auf Lauffähigkeit testen möchtest, so solltest du auch die optionalen Setup-Schritt
durchführen.

## Setup Requirements
- PHP 7.3 oder höher
- composer
- **Optional** MySQL 5.7 oder höher
- **Optional** ElasticSearch 7
- **Optional** Web-Server: nginx oder Apache

## Magento-Projekt erstellen

Erzeuge ein neues Projekt im Verzeichnis `./magento` mit den folgenden Befehlen 

```bash
composer create-project --repository=https://repo.magento.com/ magento/project-community-edition magento 
```

### **Optional**: Führe die Installation von Magento durch 

```bash
mysql -e "DROP DATABASE IF EXISTS ws_code_design"
mysql -e "CREATE DATABASE ws_code_design"

cd magento
bin/magento setup:install \
    --base-url="http://ws-code-design.test/" \
    --base-url-secure="https://ws-code-design.test/" \
    --use-secure-admin=1 --use-rewrites=1 --use-secure=1 \
    --db-host=localhost --db-name=ws_code_design --db-user=root --db-password=root \
    --backend-frontname=admin \
    --admin-firstname=admin --admin-lastname=admin --admin-email=v.justus@techdivision.com \
    --admin-user=admin --admin-password=admin123 \
    --language=en_US --currency=EUR --timezone=Europe/Berlin \
    --elasticsearch-host=localhost --elasticsearch-port=9207 \
    --cleanup-database
cd -
```

Erstelle eine vHost-Konfiguration für die soeben erstellte Magento-Instanz.

# Aufgaben
Die folgenden Aufgaben werden in kleinen Gruppen bearbeitet. 
Die Lösung wird anschließend von der Gruppe vorgestellt. Die Aufgabe muss theoretisch 
gelöst werden. Entscheidend ist dabei die Strukturierung des Codes – nicht dessen 
Funktionalität. Nach Möglichkeit sollte der Code weitestgehend geschrieben, 
jedoch nicht getestet werden.

---

## Aufgabe 1 

**WER** Als Shop-Betreiber möchte ich<br>
**WAS** meine Bestellungen exportieren können<br>
**WARUM** um die Daten in einem externen System weiterverarbeiten zu können

**UACs:**
1. Mit dem Befehl `bin/magento workshop:order:export <order-id>` kann ich eine Bestellung exportieren
2. Die Exporte werden im Verzeichnis `var/export/order/` abgelegt
3. Der Export erfolgt als JSON-Datei mit dem Dateinamen `<order-id>.json`

**INFO:**
Das JSON-Format ist näher definiert und kann vom Entwickler frei gewählt werden. Es müssen alle relevanten 
Informationen der Bestellung (Lieferadresse, Rechnungsadresse, Positionen und Summen) enthalten sein.

_**Vorlage:** Nutze für Dein Modul die Vorlage `./module-template`. Kopiere dazu den Inhalt des Ordners in das 
Verzeichnis `./magento/app/code`._
```bash
cp -R ./module-template/* ./magento
```
_**Zeit:** 45 min_

---

## Aufgabe 2

**WER** Als Shop-Betreiber möchte ich<br>
**WAS** meine Bestellungen über die Admin-UI von Magento exportieren können<br>
**WARUM** um die Daten in einem externen System weiterzuverarbeiten<br>

**Blocked by:** Aufgabe 1

**UACs:**
1. Im Admin UI von Magento befindet sich auf der Detailansicht einer Bestellung eine zusätzlicher 
Button mit der Aufschrift “Export [JSON]”
2. Beim Klick auf den Button, wird der Export der Bestellung durchgeführt, dabei wird die 
Logik aus Aufgabe 1 wiederverwendet
3. Der Benutzer bekommt die Meldung zu sehen, dass die Bestellung exportiert wurde.

_**Vorlage:** Nutze das von Dir in Aufgabe 1 erstellt Modul._<br>
_**Zeit:** 30 min_

---

## Aufgabe 2-a

Führe die Aufgabe 2 erneut durch, verwende dabei jedoch die Musterlösung der Aufgabe 1 als Ausgangslage.

_**Zeit:** 30 min_

---

## Aufgabe 3

**WER** Als Shop-Betreiber möchte ich, dass<br>
**WAS** meine Bestellungen automatisch alle 15 Minuten exportiert<br>
**WARUM** um die Daten in einem externen System weiterverarbeiten zu können<br>

**Blocked by:** Aufgabe 1

**UACs:**
1. Es existiert ein Cronjob, welcher alle 15 Minuten ausgeführt wird
2. Der Cronjob exportiert alle Bestellungen, der letzten 15 Minuten
3. Für den Export wird die Logik aus Aufgabe 1 wiederverwendet

_**Vorlage:** Nutze das von Dir in Aufgabe 1 erstellt Modul._<br>
_**Zeit:** 30 min_

---

## Aufgabe 3-a

Führe die Aufgabe 3 erneut durch, verwende dabei jedoch die Musterlösung der Aufgabe 1 als Ausgangslage.

_**Zeit:** 30 min_

---