SlideShare a Scribd company logo
1 of 26
Download to read offline
Introduction
Who?
Fabian Wesner
$year >= 2012 CTO @ Project A Ventures
$year == 2011 CTO @ Rocket Internet
$year == 2010 Lead developer @ Zalando
$year <= 2009 Entrepreneur and Freelancer

Project A Ventures
Building successful companies.

Company Builder with focus on Internet, advertising technology and
mobile.
www.project-a.com
Powered by Yves & Zed
Architecture
Bird‘s eye view
Layered architecture
Structured code with Bundles and Packages
Dependency management with composer
- Code is structured in packages
- Packages may require each other
- We use composer to manage dependencies

composer.json of dwh-package

{
    "name": "project-a/dwh-package",
    "autoload": {
        "psr-0": { "ProjectA": "/src" }
    },
    "require": {
        "php": ">=5.4.0",
        "project-a/auth-package": ">=0.0.10",
        "project-a/library-package": ">=0.0.27"
    }
}

How to update Yves & Zed?
(1) add a new version to a composer.json
(2) run php composer.phar install
Dependency validation
Zed GUI
Zed user interface

Kendo UI + Bootstrap + jQuery
minified and merged with Grunt
Cronjobs
Scalable job management with Jenkins
/* subscribe users for newsletters */
$jobs[] = array(
'name'
=> 'send_newsletter_subscription_queue',
'command' => '$PHP_BIN $CLI_PATH/
index.php --module=newsletter
--controller=cronjob
--action=sendsubscriptionqueue',
'schedule' => '*/2 * * * *',
'enable'
=> true,
'stores'
=> $all_stores,
);
/* -- MAIL QUEUE -- */
$jobs[] = array(
'name'
=> 'send_queued_mails',
'command' => '$PHP_BIN $CLI_PATH/
index.php --module=mail
-- controller=cronjob
--action=send-queued-mails',
'schedule' => '* * * * *',
'enable'
=> true,
'stores'
=> $all_stores,
);
/* -- DUMP DB -- */
$jobs[] = array(
'name'
=> 'generate_database_dump',
'command' => '$PHP_BIN $CLI_PATH/
index.php --module=dbdump
--controller=cronjob --action=execute',
'schedule' => '0 0 * * *',
'enable'
=> true,

deployment
Logging
Logging with Lumberjack
Yves & Zed‘s Big Data infrastructure
Automated processing of orders
Visualization of business logic
protected function addTransitions()
{
$this->setup->addTransition(
self::STATE_NEW,
self::STATE_PREAUTHORIZED,
self::EVENT_START_PAYMENT,
self::RULE_PAYMENT_TRANSACTION_APPROVED);
$this->setup->addTransition(
self::STATE_NEW,
self::STATE_INVALID,
self::EVENT_START_PAYMENT);
}
protected function addCommands()
{
$preAuthorizeCommand = $this->factory
->getModelOrderprocessCommandPaymentPreAuthorization();
$this->setup->addCommand(
self::STATE_NEW,
self::EVENT_START_PAYMENT,
$preAuthorizeCommand);
}
protected function addDefinitions()
{
$subProcess = $this->factory
->getModelOrderprocessDefinitionSubProcessCancellation()
$this->setup->addDefinition($subProcess);
}

PHP

Graph
Automatic processing of thousands of orders per day
Trigger events
Used in several controllers to start the state machine
$this->facadeSales->triggerEvent(„start payment“,items);
$this->facadeSales->triggerEventBulk($eventName,items);

Commands
Classes with logic which are triggered from the state machine
class SaoZedPaymentComponentCommand
PreAuthorization
{
public function __invoke ($orderEntity, $context)
{ ... }
}

Check conditions
Decision which way to go
class SaoZedPaymentComponentCondition
TransactionApproved
{
/** @return bool */
public function check($orderItem, $context)
{ ... }
}
+++ More details: Talk of Oliver Tischlinger tomorrow „Statemachine – Das Mittel gegen Flags!“ +++
Data-Warehouse
ETL / job scheduler

<job id="load-order-item-status">
<description>Copies the order item status table into the tmp table
</description>
<commands>
<run-sql-file
file-name="order-statuses/create-order-item-status-tmp-table.sql"
echo-queries="false"/>
<load-from-mysql mysql-database="zed"
file-name="order-statuses/load-order-item-status.sql"
target-table="tmp.order_item_status"/>
</commands>
</job>
<job id="transform-order-item-status">
<description>Copies the order item status table into the dim schema
</description>
<dependencies>
<dependency job="load-order-item-status"/>
<dependency job="load-order-item-status-mapping"/>
</dependencies>
<commands>
<run-sql-file
file-name="order-statuses/transform-order-item-status.sql"
echo-queries="false"/>
</commands>
</job>
Order status mapping
Every color has a
simple meaning!
Not paid
Item returned
Paid
etc.
<perspective name="Sales">
<status-group name="Not paid"
description="The items are not yet paid"
color="#557799">
<status ref="shipped"/>
<status ref="waiting for payment"/>
<status ref="capture"/>
</status-group>
<status-group name="Paid"
description="The items are paid"
color="#559955">
<status ref="paid in money collect"/>
<status ref="clarify refund overpayment"/>
<status ref="closed"/>
</status-group>
</perspective>
</status-mapping>
Entity–relationship model
DWH architecture

ETL

DWH

Cubes

Reports
Thank you!

More Related Content

Viewers also liked

10042010 Mlbviponline
10042010 Mlbviponline10042010 Mlbviponline
10042010 Mlbviponline
gueste5b1381
 
eCommerce in Deutschland - Chancen und Herausforderungen für Hersteller von K...
eCommerce in Deutschland - Chancen und Herausforderungen für Hersteller von K...eCommerce in Deutschland - Chancen und Herausforderungen für Hersteller von K...
eCommerce in Deutschland - Chancen und Herausforderungen für Hersteller von K...
Aquarius Digital GmbH
 
Kritische Erfolgsfaktoren im Onlineshop: Zahlungs- und ERP-System Integrationen
Kritische Erfolgsfaktoren im Onlineshop: Zahlungs- und ERP-System IntegrationenKritische Erfolgsfaktoren im Onlineshop: Zahlungs- und ERP-System Integrationen
Kritische Erfolgsfaktoren im Onlineshop: Zahlungs- und ERP-System Integrationen
Carpathia AG
 
Einführung onlinehandel glocal-consult
Einführung onlinehandel glocal-consultEinführung onlinehandel glocal-consult
Einführung onlinehandel glocal-consult
Stefan Stengel
 
Mehr Umsatz, durch eine intelligente Such-Software im OnlineShop!
Mehr Umsatz, durch eine intelligente Such-Software im OnlineShop!Mehr Umsatz, durch eine intelligente Such-Software im OnlineShop!
Mehr Umsatz, durch eine intelligente Such-Software im OnlineShop!
eCommerce Lounge
 
Bvh ecommerce day e commerce trends
Bvh ecommerce day e commerce trends Bvh ecommerce day e commerce trends
Bvh ecommerce day e commerce trends
Joachim Graf
 

Viewers also liked (18)

Nils Seebach - Was ist mein Onlineshop wert? - Bewertungen im E-Commerce
Nils Seebach - Was ist mein Onlineshop wert? - Bewertungen im E-CommerceNils Seebach - Was ist mein Onlineshop wert? - Bewertungen im E-Commerce
Nils Seebach - Was ist mein Onlineshop wert? - Bewertungen im E-Commerce
 
2 BHK Luxury Apartment in Wagholi, Pune - Marvel Fria II
2 BHK Luxury Apartment in Wagholi, Pune - Marvel Fria II2 BHK Luxury Apartment in Wagholi, Pune - Marvel Fria II
2 BHK Luxury Apartment in Wagholi, Pune - Marvel Fria II
 
Bcil Zedwoods Value Adds Final
Bcil Zedwoods  Value Adds FinalBcil Zedwoods  Value Adds Final
Bcil Zedwoods Value Adds Final
 
Zed Earth Brochure
Zed Earth BrochureZed Earth Brochure
Zed Earth Brochure
 
Pune Property- "Marvel Fria", Wagholi
Pune Property- "Marvel Fria", WagholiPune Property- "Marvel Fria", Wagholi
Pune Property- "Marvel Fria", Wagholi
 
10042010 Mlbviponline
10042010 Mlbviponline10042010 Mlbviponline
10042010 Mlbviponline
 
Onlineshop als integraler Bestandteil der Unternehmensstrategie
Onlineshop als integraler Bestandteil der UnternehmensstrategieOnlineshop als integraler Bestandteil der Unternehmensstrategie
Onlineshop als integraler Bestandteil der Unternehmensstrategie
 
eCommerce in Deutschland - Chancen und Herausforderungen für Hersteller von K...
eCommerce in Deutschland - Chancen und Herausforderungen für Hersteller von K...eCommerce in Deutschland - Chancen und Herausforderungen für Hersteller von K...
eCommerce in Deutschland - Chancen und Herausforderungen für Hersteller von K...
 
7 Tipps und 3 Beispiele für perfekte Onlineshop-Inhalte
7 Tipps und 3 Beispiele für perfekte Onlineshop-Inhalte7 Tipps und 3 Beispiele für perfekte Onlineshop-Inhalte
7 Tipps und 3 Beispiele für perfekte Onlineshop-Inhalte
 
Online verkaufen per webshop onlineshop-e-shop-internetshop
Online verkaufen per webshop onlineshop-e-shop-internetshopOnline verkaufen per webshop onlineshop-e-shop-internetshop
Online verkaufen per webshop onlineshop-e-shop-internetshop
 
Kritische Erfolgsfaktoren im Onlineshop: Zahlungs- und ERP-System Integrationen
Kritische Erfolgsfaktoren im Onlineshop: Zahlungs- und ERP-System IntegrationenKritische Erfolgsfaktoren im Onlineshop: Zahlungs- und ERP-System Integrationen
Kritische Erfolgsfaktoren im Onlineshop: Zahlungs- und ERP-System Integrationen
 
Zed Woods Brochure
Zed Woods BrochureZed Woods Brochure
Zed Woods Brochure
 
Einführung onlinehandel glocal-consult
Einführung onlinehandel glocal-consultEinführung onlinehandel glocal-consult
Einführung onlinehandel glocal-consult
 
Der Content-Marketing-Fitness-Pass für Organisationen
Der Content-Marketing-Fitness-Pass für OrganisationenDer Content-Marketing-Fitness-Pass für Organisationen
Der Content-Marketing-Fitness-Pass für Organisationen
 
Packende AdWords-Anzeigentexte erstellen, testen und optimieren
Packende AdWords-Anzeigentexte erstellen, testen und optimierenPackende AdWords-Anzeigentexte erstellen, testen und optimieren
Packende AdWords-Anzeigentexte erstellen, testen und optimieren
 
E-Commerce, nicht Onlineshop
E-Commerce, nicht OnlineshopE-Commerce, nicht Onlineshop
E-Commerce, nicht Onlineshop
 
Mehr Umsatz, durch eine intelligente Such-Software im OnlineShop!
Mehr Umsatz, durch eine intelligente Such-Software im OnlineShop!Mehr Umsatz, durch eine intelligente Such-Software im OnlineShop!
Mehr Umsatz, durch eine intelligente Such-Software im OnlineShop!
 
Bvh ecommerce day e commerce trends
Bvh ecommerce day e commerce trends Bvh ecommerce day e commerce trends
Bvh ecommerce day e commerce trends
 

Similar to Yves & Zed @ Developer Conference 2013

Playing with php_on_azure
Playing with php_on_azurePlaying with php_on_azure
Playing with php_on_azure
CEDRIC DERUE
 
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
King Foo
 
Introducing PHP Data Objects
Introducing PHP Data ObjectsIntroducing PHP Data Objects
Introducing PHP Data Objects
webhostingguy
 
Overview of The Scala Based Lift Web Framework
Overview of The Scala Based Lift Web FrameworkOverview of The Scala Based Lift Web Framework
Overview of The Scala Based Lift Web Framework
IndicThreads
 
Scala based Lift Framework
Scala based Lift FrameworkScala based Lift Framework
Scala based Lift Framework
vhazrati
 

Similar to Yves & Zed @ Developer Conference 2013 (20)

Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
Pyramid deployment
Pyramid deploymentPyramid deployment
Pyramid deployment
 
Quality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStormQuality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStorm
 
Micro app-framework - NodeLive Boston
Micro app-framework - NodeLive BostonMicro app-framework - NodeLive Boston
Micro app-framework - NodeLive Boston
 
Micro app-framework
Micro app-frameworkMicro app-framework
Micro app-framework
 
Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)
 
Refresh Austin - Intro to Dexy
Refresh Austin - Intro to DexyRefresh Austin - Intro to Dexy
Refresh Austin - Intro to Dexy
 
WCLA12 JavaScript
WCLA12 JavaScriptWCLA12 JavaScript
WCLA12 JavaScript
 
Building and deploying React applications
Building and deploying React applicationsBuilding and deploying React applications
Building and deploying React applications
 
Global Windows Azure Bootcamp : Cedric Derue playing with php on azure. (spon...
Global Windows Azure Bootcamp : Cedric Derue playing with php on azure. (spon...Global Windows Azure Bootcamp : Cedric Derue playing with php on azure. (spon...
Global Windows Azure Bootcamp : Cedric Derue playing with php on azure. (spon...
 
Playing with php_on_azure
Playing with php_on_azurePlaying with php_on_azure
Playing with php_on_azure
 
[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development[Bristol WordPress] Supercharging WordPress Development
[Bristol WordPress] Supercharging WordPress Development
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
 
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
Introducing PHP Data Objects
Introducing PHP Data ObjectsIntroducing PHP Data Objects
Introducing PHP Data Objects
 
Overview Of Lift Framework
Overview Of Lift FrameworkOverview Of Lift Framework
Overview Of Lift Framework
 
Overview of The Scala Based Lift Web Framework
Overview of The Scala Based Lift Web FrameworkOverview of The Scala Based Lift Web Framework
Overview of The Scala Based Lift Web Framework
 
Scala based Lift Framework
Scala based Lift FrameworkScala based Lift Framework
Scala based Lift Framework
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Recently uploaded (20)

WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 

Yves & Zed @ Developer Conference 2013

  • 1.
  • 3. Who? Fabian Wesner $year >= 2012 CTO @ Project A Ventures $year == 2011 CTO @ Rocket Internet $year == 2010 Lead developer @ Zalando $year <= 2009 Entrepreneur and Freelancer Project A Ventures Building successful companies. Company Builder with focus on Internet, advertising technology and mobile. www.project-a.com
  • 8. Structured code with Bundles and Packages
  • 9. Dependency management with composer - Code is structured in packages - Packages may require each other - We use composer to manage dependencies composer.json of dwh-package {     "name": "project-a/dwh-package",     "autoload": {         "psr-0": { "ProjectA": "/src" }     },     "require": {         "php": ">=5.4.0",         "project-a/auth-package": ">=0.0.10",         "project-a/library-package": ">=0.0.27"     } } How to update Yves & Zed? (1) add a new version to a composer.json (2) run php composer.phar install
  • 12. Zed user interface Kendo UI + Bootstrap + jQuery minified and merged with Grunt
  • 14. Scalable job management with Jenkins /* subscribe users for newsletters */ $jobs[] = array( 'name' => 'send_newsletter_subscription_queue', 'command' => '$PHP_BIN $CLI_PATH/ index.php --module=newsletter --controller=cronjob --action=sendsubscriptionqueue', 'schedule' => '*/2 * * * *', 'enable' => true, 'stores' => $all_stores, ); /* -- MAIL QUEUE -- */ $jobs[] = array( 'name' => 'send_queued_mails', 'command' => '$PHP_BIN $CLI_PATH/ index.php --module=mail -- controller=cronjob --action=send-queued-mails', 'schedule' => '* * * * *', 'enable' => true, 'stores' => $all_stores, ); /* -- DUMP DB -- */ $jobs[] = array( 'name' => 'generate_database_dump', 'command' => '$PHP_BIN $CLI_PATH/ index.php --module=dbdump --controller=cronjob --action=execute', 'schedule' => '0 0 * * *', 'enable' => true, deployment
  • 17. Yves & Zed‘s Big Data infrastructure
  • 19. Visualization of business logic protected function addTransitions() { $this->setup->addTransition( self::STATE_NEW, self::STATE_PREAUTHORIZED, self::EVENT_START_PAYMENT, self::RULE_PAYMENT_TRANSACTION_APPROVED); $this->setup->addTransition( self::STATE_NEW, self::STATE_INVALID, self::EVENT_START_PAYMENT); } protected function addCommands() { $preAuthorizeCommand = $this->factory ->getModelOrderprocessCommandPaymentPreAuthorization(); $this->setup->addCommand( self::STATE_NEW, self::EVENT_START_PAYMENT, $preAuthorizeCommand); } protected function addDefinitions() { $subProcess = $this->factory ->getModelOrderprocessDefinitionSubProcessCancellation() $this->setup->addDefinition($subProcess); } PHP Graph
  • 20. Automatic processing of thousands of orders per day Trigger events Used in several controllers to start the state machine $this->facadeSales->triggerEvent(„start payment“,items); $this->facadeSales->triggerEventBulk($eventName,items); Commands Classes with logic which are triggered from the state machine class SaoZedPaymentComponentCommand PreAuthorization { public function __invoke ($orderEntity, $context) { ... } } Check conditions Decision which way to go class SaoZedPaymentComponentCondition TransactionApproved { /** @return bool */ public function check($orderItem, $context) { ... } } +++ More details: Talk of Oliver Tischlinger tomorrow „Statemachine – Das Mittel gegen Flags!“ +++
  • 22. ETL / job scheduler <job id="load-order-item-status"> <description>Copies the order item status table into the tmp table </description> <commands> <run-sql-file file-name="order-statuses/create-order-item-status-tmp-table.sql" echo-queries="false"/> <load-from-mysql mysql-database="zed" file-name="order-statuses/load-order-item-status.sql" target-table="tmp.order_item_status"/> </commands> </job> <job id="transform-order-item-status"> <description>Copies the order item status table into the dim schema </description> <dependencies> <dependency job="load-order-item-status"/> <dependency job="load-order-item-status-mapping"/> </dependencies> <commands> <run-sql-file file-name="order-statuses/transform-order-item-status.sql" echo-queries="false"/> </commands> </job>
  • 23. Order status mapping Every color has a simple meaning! Not paid Item returned Paid etc. <perspective name="Sales"> <status-group name="Not paid" description="The items are not yet paid" color="#557799"> <status ref="shipped"/> <status ref="waiting for payment"/> <status ref="capture"/> </status-group> <status-group name="Paid" description="The items are paid" color="#559955"> <status ref="paid in money collect"/> <status ref="clarify refund overpayment"/> <status ref="closed"/> </status-group> </perspective> </status-mapping>