OpenShift Commons Paris - Choose Your Own Observability Adventure
Modern PerlCommerce
1. Modern PerlCommerce
Past and Future
API
Development & Deployment
Modern PerlCommerce
Stefan Hornburg (Racke)
racke@linuxia.de
Pittsburgh Perl Workshop, 8th October 2011
racke Modern PerlCommerce
2. Modern PerlCommerce
Perl Buzzwords
Past and Future
Modern Perl
API
PerlCommerce Choices
Development & Deployment
Nitesi
racke Modern PerlCommerce
3. Modern PerlCommerce
Perl Buzzwords
Past and Future
Modern Perl
API
PerlCommerce Choices
Development & Deployment
Perl Buzzwords
Marketing Perl
Modern Perl
Postmodern Perl
racke Modern PerlCommerce
4. Modern PerlCommerce
Perl Buzzwords
Past and Future
Modern Perl
API
PerlCommerce Choices
Development & Deployment
Modern Perl
CPAN
Best Practices
Tests
Separation (Modules, Plugins, Hooks, Templates)
PSGI/Plack
racke Modern PerlCommerce
5. Modern PerlCommerce
Perl Buzzwords
Past and Future
Modern Perl
API
PerlCommerce Choices
Development & Deployment
PerlCommerce Choices
Interchange
Handel
Agora
Business::Cart::Generic
racke Modern PerlCommerce
6. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Past
1995 CGI
1995 MiniVend
1998 http://www.materialboerse.de/
2001 Interchange
racke Modern PerlCommerce
7. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Interchange Development
Lot of things
Small community
Same codebase
racke Modern PerlCommerce
8. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Status quo
racke Modern PerlCommerce
9. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
References
Backcountry http://www.backcountry.com/
FragnanceNet http://www.fragrancenet.com/
racke Modern PerlCommerce
10. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Future
racke Modern PerlCommerce
11. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Principles
KISS
Components
Agnostic
Expressive
racke Modern PerlCommerce
12. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Agnostic
Cart
Session
DBI
Webservice *
racke Modern PerlCommerce
13. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Agnostic
Account Manager
DBI
LDAP *
OpenID *
racke Modern PerlCommerce
14. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Agnostic
Templating Engine
Template::Toolkit
Template::Flute
racke Modern PerlCommerce
15. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Agnostic
Web framework
Catalyst
Mojo
Dancer
racke Modern PerlCommerce
16. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Preferences
Dancer
Template::Flute
DBI
racke Modern PerlCommerce
17. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Framework
Dispatching requests
Parameter parsing
Session handling
Template engine
I18N
racke Modern PerlCommerce
18. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Extensions
Bundles
Plugins
Hooks
racke Modern PerlCommerce
19. Modern PerlCommerce
Past and Future Past
API Future
Development & Deployment
Features
Navigation
Cart
Checkout
Accounts
racke Modern PerlCommerce
20. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Cart
SKU, Name, Quantity, Price
Price > 0
Combines automatically
Multiple carts
Storage everywhere
Price caching
racke Modern PerlCommerce
21. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Nitesi::Cart Methods
use Dancer : : P l u g i n : : N i t e s i ;
c a r t −>add ( sku => ’POM253 ’ , name => ’ Pomelo ’ ,
p r i c e => 3 . 0 0 , q u a n t i t y => 1 0 ) ;
c a r t −>remove ( sku => ’POM253 ’ ) ;
c a r t −>count ( ) ;
c a r t −>c l e a r ( ) ;
c a r t −> t o t a l ( ) ;
c a r t −>s u b t o t a l ( ) ;
racke Modern PerlCommerce
22. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Everything is a Cart
Saved Carts
Wishlists
Collections
racke Modern PerlCommerce
23. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Multiple Carts
c a r t ( ’ w i s h l i s t ’ )−>add ( sku => ’ORA322 ’ , name => ’ Orange ’ ,
p r i c e => 2 . 0 0 , q u a n t i t y => 5 ) ;
racke Modern PerlCommerce
24. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Cart Backends
Session
DBI
racke Modern PerlCommerce
25. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Inventory Check
MinQuantityField min_quantity
MaxQuantityField inventory : q u a n t i t y
racke Modern PerlCommerce
26. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Inventory Check Hook
hook ’ b e f o r e _ c a r t _ a d d ’ => sub {
my ( $ c a r t , $item ) = @_;
my ( $ i n v e n t o r y ) ;
$ i n v e n t o r y = query −> s e l e c t _ f i e l d ( t a b l e => ’ p r o d u c t s ’ ,
f i e l d => ’ i n v e n t o r y ’ ,
where => { sku => $item −>{sku } } ) ;
i f ( $item −>{ q u a n t i t y } > $ i n v e n t o r y ) {
$item −>{ e r r o r } = ’ Out o f s t o c k ’ ;
}
};
racke Modern PerlCommerce
27. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Cart Hooks
before_cart_add
after_cart_add
racke Modern PerlCommerce
28. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Cart Hooks
before_cart_remove
after_cart_remove
racke Modern PerlCommerce
29. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Checkout
Taxes
Shipping
Payment
Invoice
racke Modern PerlCommerce
30. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Payment
Business::OnlinePayment
racke Modern PerlCommerce
31. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Tax Modules on CPAN
Business::Tax::Canada
Business::CA::GST
Business::Tax::VAT
Business::Tax::VAT::Validation
racke Modern PerlCommerce
32. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Shipping
Simple Shipping
Crazy Shipping
Shipping API
racke Modern PerlCommerce
33. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Costs
$ c a r t −>a p p l y _ c o s t ( amount => 5 ) ;
$ c a r t −>a p p l y _ c o s t ( amount => 0 . 1 9 , r e l a t i v e => 1 ) ;
racke Modern PerlCommerce
34. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
PDF Invoices
HTML template
Template::Flute::PDF
racke Modern PerlCommerce
35. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Accounts
p o s t ’ / l o g i n ’ => sub {
i f ( account −>l o g i n ( username => params ( ’ body ’ ) − >{username } ,
password => params ( ’ body ’ ) − >{password } ) ) {
r e d i r e c t ’ / customerservice ’ ;
}
else {
redirect ’ / login ’ ;
}
};
racke Modern PerlCommerce
36. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Accounts
g e t ’ / checkout ’ => sub {
i f ( account −>a c l ( check => ’ s u b m i t _ o r d e r s ’ ) ) {
r e t u r n t e m p l a t e ’ checkout ’ ;
}
redirect ’ / access_denied ’ ;
};
racke Modern PerlCommerce
37. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Account manager
Account Providers
Login/Logout
Account Information
Login status
Forgot password
Registration
racke Modern PerlCommerce
38. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Account Provider
DBI
LDAP *
Htpasswd *
OpenID *
OAuth *
racke Modern PerlCommerce
39. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Access Control
User
Roles
Permissions
racke Modern PerlCommerce
40. Modern PerlCommerce Cart
Past and Future Checkout
API Accounts and Access Control
Development & Deployment Forms
Forms
Display
Validation
Storage
racke Modern PerlCommerce
41. Modern PerlCommerce
Dancer
Past and Future
Contribution
API
The End
Development & Deployment
Routes
Categories
Products
Cart
Checkout
Login/Logout
Customer Service
racke Modern PerlCommerce
42. Modern PerlCommerce
Dancer
Past and Future
Contribution
API
The End
Development & Deployment
Default Route
g e t q r { / ( . ∗ ) } => sub {
my ( $sku ) = s p l a t ;
my $ p r o d u c t ;
# check f o r e x i s t i n g p r o d u c t
i f ( $ p r o d u c t = database −>q u i c k _ s e l e c t ( ’ p r o d u c t s ’ , { sku => $sku } ) )
# display flypage
template ’ flypage ’ , $product ;
}
else {
# d i s p l a y n o t found page
s t a t u s ’ not_found ’ ;
f o r w a r d ’ 404 ’ ;
}
};
racke Modern PerlCommerce
43. Modern PerlCommerce
Dancer
Past and Future
Contribution
API
The End
Development & Deployment
CPAN/GitHub
http://search.cpan.org/dist/Nitesi/
http://search.cpan.org/dist/Nitesi-DBI/
http://search.cpan.org/dist/
Dancer-Plugin-Nitesi/
https://github.com/racke/Nitesi
https://github.com/racke/Nitesi-DBI
https:
//github.com/racke/Dancer-Plugin-Nitesi
racke Modern PerlCommerce
44. Modern PerlCommerce
Dancer
Past and Future
Contribution
API
The End
Development & Deployment
The End
Slides: http://www.linuxia.de/talks/perlcommerce/
perlcommerce-beamer.pdf
Project: https://vsc.state.gov/
racke Modern PerlCommerce