Modern PerlCommerce Past and Future API Development & Deployment

Modern PerlCommerce

Stefan Hornburg (Racke) [email protected]

Pittsburgh Workshop, 8th October 2011

racke Modern PerlCommerce Modern PerlCommerce Perl Buzzwords Past and Future Modern Perl API PerlCommerce Choices Development & Deployment Nitesi

racke Modern PerlCommerce Modern PerlCommerce Perl Buzzwords Past and Future Modern Perl API PerlCommerce Choices Development & Deployment Perl Buzzwords

I Marketing Perl

I Modern Perl

I Postmodern Perl

racke Modern PerlCommerce Modern PerlCommerce Perl Buzzwords Past and Future Modern Perl API PerlCommerce Choices Development & Deployment Modern Perl

I CPAN

I Best Practices

I Tests

I Separation (Modules, Plugins, Hooks, Templates)

I PSGI/

racke Modern PerlCommerce Modern PerlCommerce Perl Buzzwords Past and Future Modern Perl API PerlCommerce Choices Development & Deployment PerlCommerce Choices

I Interchange

I Handel

I

I Business::Cart::Generic

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Past

I 1995 CGI

I 1995 MiniVend

I 1998 http://www.materialboerse.de/

I 2001 Interchange

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Interchange Development

I Lot of things

I Small community

I Same codebase

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Status quo

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment References

I Backcountry http://www.backcountry.com/

I FragnanceNet http://www.fragrancenet.com/

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Future

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Principles

I KISS

I Components

I Agnostic

I Expressive

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Agnostic

Cart

I Session

I DBI

I Webservice *

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Agnostic

Account Manager

I DBI

I LDAP *

I OpenID *

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Agnostic

Templating Engine

I Template::Toolkit

I Template::Flute

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Agnostic

Web framework

I

I Mojo

I

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Preferences

I Dancer

I Template::Flute

I DBI

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Framework

I Dispatching requests

I Parameter parsing

I Session handling

I Template engine

I I18N

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Extensions

I Bundles

I Plugins

I Hooks

racke Modern PerlCommerce Modern PerlCommerce Past and Future Past API Future Development & Deployment Features

I Navigation

I Cart

I Checkout

I Accounts

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Cart

I SKU, Name, Quantity, Price

I Price > 0

I Combines automatically

I Multiple carts

I Storage everywhere

I Price caching

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Nitesi::Cart Methods

use Dancer:: Plugin :: Nitesi;

cart −>add(sku => ’POM253’ , name => ’Pomelo’ , price => 3.00, quantity => 10);

cart −>remove(sku => ’POM253’ );

cart −>count ( ) ;

cart −>c l e a r ( ) ;

cart −>t o t a l ( ) ;

cart −>subtotal ();

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Everything is a Cart

I Saved Carts

I Wishlists

I Collections

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Multiple Carts

cart( ’wishlist ’)−>add(sku => ’ORA322’ , name => ’Orange’ , price => 2.00, quantity => 5);

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Cart Backends

I Session

I DBI

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Inventory Check

MinQuantityField min_quantity MaxQuantityField inventory:quantity

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Inventory Check Hook

hook ’before_cart_add ’ => sub { my ($cart, $item) = @_; my ($inventory );

$inventory = query−>select_field(table => ’products’, field => ’inventory’, where => {sku => $item −>{sku } } ) ;

i f ( $item −>{quantity} > $inventory) { $item −>{error} = ’Out of stock’; } };

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Cart Hooks

I before_cart_add

I after_cart_add

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Cart Hooks

I before_cart_remove

I after_cart_remove

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Checkout

I Taxes

I Shipping

I Payment

I Invoice

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Payment

I Business::OnlinePayment

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Tax Modules on CPAN

I Business::Tax::Canada

I Business::CA::GST

I Business::Tax::VAT

I Business::Tax::VAT::Validation

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Shipping

I Simple Shipping

I Crazy Shipping

I Shipping API

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Costs

$cart −>apply_cost(amount => 5);

$cart −>apply_cost(amount => 0.19, relative => 1);

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms PDF Invoices

I HTML template

I Template::Flute::PDF

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Accounts

post ’/login’ => sub { i f ( account−>login(username => params( ’body ’)−>{username} , password => params( ’body ’)−>{password})) { redirect ’/customerservice ’; } else { redirect ’/login’; } };

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Accounts

get ’/checkout’ => sub { i f ( account−>acl(check => ’submit_orders’)) { return template ’checkout ’; }

redirect ’/access_denied’; };

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Account manager

I Account Providers

I Login/Logout

I Account Information

I Login status

I Forgot password

I Registration

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Account Provider

I DBI

I LDAP *

I Htpasswd *

I OpenID *

I OAuth *

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Access Control

I User

I Roles

I Permissions

racke Modern PerlCommerce Modern PerlCommerce Cart Past and Future Checkout API Accounts and Access Control Development & Deployment Forms Forms

I Display

I Validation

I Storage

racke Modern PerlCommerce Modern PerlCommerce Dancer Past and Future Contribution API The End Development & Deployment Routes

I Categories

I Products

I Cart

I Checkout

I Login/Logout

I Customer Service

racke Modern PerlCommerce Modern PerlCommerce Dancer Past and Future Contribution API The End Development & Deployment Default Route

get qr { / ( . ∗ ) } => sub { my ($sku) = splat; my $product ;

# check for existing product i f ($product = database−>quick_select( ’products’, {sku => $sku})) { # display flypage template ’flypage ’, $product; } else { # display not found page status ’not_found’; forward ’404’; } };

racke Modern PerlCommerce Modern PerlCommerce Dancer Past and Future Contribution API The End Development & Deployment CPAN/GitHub

I http://search.cpan.org/dist/Nitesi/

I http://search.cpan.org/dist/Nitesi-DBI/

I http://search.cpan.org/dist/ Dancer-Plugin-Nitesi/

I https://github.com/racke/Nitesi

I https://github.com/racke/Nitesi-DBI

I https: //github.com/racke/Dancer-Plugin-Nitesi

racke Modern PerlCommerce 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