24.08.2014 - Page 1
Département
OfficeApp::AutoCRUD
An application for searching and
manipulating data in relational
datab...
Agenda
• Introduction
• Overview (screenshots)
• Getting started
• Architecture
• Extensibility
• Conclusion
24.08.2014 - Page 1
Département
Office
Introduction
Business need : tool for the support team
Regular
Users
database
Regular
App
Database
Admins
Admin
Tools
Support
Team
? ? ?
Data access for support team
Needs
• Browse DB schema
• CRUD on all data
• Navigate
– Follow relationships
– Optimize for ...
CRUD landscape
Admin tools
Oracle SQLDeveloper
SQLite Sqliteman
Postgres pgadmin
phpMyAdmin
...
Ready
to use
Needs
program...
App::AutoCRUD main features
• Powerful search syntax
• Distinctive URL for every resource
–  no session, all information ...
24.08.2014 - Page 1
Département
Office
Quick overview
To run the demo :
cd examples
perl download_db.pl
plackup
Homepage
Specified in
config file
http://chinookdatabase.codeplex.com/
https://code.google.com/p/sakila-sample-database-po...
Datasource entry point
Auto-generated
datamodel
Grouping, order & comments
from config file
Table description
Grouping, order & comments
from config file
Hyperlinks to foreign tables
from DB schema
Search form
Multiple values (OR)
LIKE
Multiple views
Choose
columns
BETWEEN
Results from search
Hyperlinks to foreign records or lists
Only show non-null columns
Also navigate through
LEFT/RIGHT arr...
Excel output
YAML output
Bulk update (selective)
2) Call the update form
1) Check records to be modified
Update form
Keys of selected records
Bulk update (from WHERE criteria)
Call the update form
Update form
Criteria for the update
Fields to update
± RESTful URLs
• /Chinook/table/Track/search?GenreId=1,3&Name=Ab*
– GET  display pre-filled search form
– POST  redirect...
24.08.2014 - Page 1
Département
Office
Getting Started
YAML Config : connection parameters
app:
name: Test AutoCRUD
datasources :
Source1 :
dbh:
connect:
- dbi:SQLite:dbname=som...
Config : specifying table grouping / ordering
tablegroups :
- name: Music
descr: Tables describing music content
node: ope...
Config : specifying col grouping / ordering
Employee:
colgroups:
- name: keys
columns:
- name: EmployeeId
descr: primary k...
"crud.psgi" startup file
use App::AutoCRUD;
use YAML qw/LoadFile/;
my $config = LoadFile "/path/to/config.yaml";
my $crud ...
Start the application
• From the command line
plackup crud.psgi
• Within Apache
<Location /crud>
SetHandler perl-script
Pe...
24.08.2014 - Page 1
Département
Office
Architecture : external modules
External modules : Global view
Template
Toolkit
Alien:
:GvaScript
Prototype.js
Excel::Writer:
:XLSX
View
DBIx::DataModel
D...
Infrastructure modules
• Moose for OO
– Modern Perl OO framework
• YAML for config data
– Human-readable
– Support for dir...
Controller modules
• Plack for HTTP support
– Abstraction over various engines
– Many middleware options
• CGI::Expand for...
Model modules
• DBI for database independance
– Perl standard for databases
• DBIx::DataModel for object-relational mappin...
View modules
• Template Toolkit for HTML generation
• Alien::GvaScript for widgets
– Tree::Navigator
• Prototype.js for Ja...
24.08.2014 - Page 1
Département
Office
Architecture : internal structure
Internal structure : global view
AutoCRUD
AutoCRUD:
:View
AutoCRUD:
:Controller
AutoCRUD:
:Context
AutoCRUD:
:DataSource
P...
App::AutoCRUD
• Entry point
• Autodiscovers component subclasses
• isa Plack::Component
• Has
– Name
– Config
– Datasources
App::AutoCRUD::DataSource
• Encapsulates DBIx::DataModel schema
– Autogenerate Perl code if not already present
• Gathers ...
App::AutoCRUD::Context
• Gathers contextual information for the current request
– Plack::Request object
– Datasource objec...
Controller::Schema
• Lists table groups & tables
• Publishes the DBIx::DataModel schema
Controller::Table
• Implements CRUD operations
• Methods
– Descr
– List
– Id
– Search
– Update
– Delete
– Insert
View::*
• Render results
– TT
– XLSX
– YAML
– JSON
– ...
24.08.2014 - Page 1
Département
Office
Extensibility
Regular subclassing
• Extend the app
package My::Private::AutoCRUD;
use Moose;
extends 'App::AutoCRUD';
• Subclass and red...
Adding URLs
• New controllers
– Crud/<db_name>/<controller_name>/....
• New methods in existing controllers
– Crud/<db_nam...
Adding Views
• Create View/XYZ.pm with "render" method
– Serves /path/to/resource.xyz?p1=v1&p2=v2&...
Relooking
• Override CSS
– My/Private/AutoCRUD/share/static/css/styles.css
• Override TT templates
– My/Private/AutoCRUD/s...
24.08.2014 - Page 1
Département
Office
Conclusion
Status
• Still young, lots of TODO
• Already in production at Geneva Justice
• Has some original features not seen other C...
Prochain SlideShare
Chargement dans…5
×

App auto crud

1 705 vues

Publié le

An admin application for editing database, but with configurable features (grouping and ordering of tables and columns, hyperlink navigation between related records, etc.)

Publié dans : Logiciels
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 705
Sur SlideShare
0
Issues des intégrations
0
Intégrations
29
Actions
Partages
0
Téléchargements
7
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

App auto crud

  1. 1. 24.08.2014 - Page 1 Département OfficeApp::AutoCRUD An application for searching and manipulating data in relational databases YAPC::EU::2014 laurent.dami@justice.ge.ch Etat de Genève, Pouvoir Judiciaire Département Office
  2. 2. Agenda • Introduction • Overview (screenshots) • Getting started • Architecture • Extensibility • Conclusion
  3. 3. 24.08.2014 - Page 1 Département Office Introduction
  4. 4. Business need : tool for the support team Regular Users database Regular App Database Admins Admin Tools Support Team ? ? ?
  5. 5. Data access for support team Needs • Browse DB schema • CRUD on all data • Navigate – Follow relationships – Optimize for most common tables and colums Solutions • Program an admin GUI –  too much work ! • Give them DBA tools –  too low-level –  no customization  Need a CRUD app !
  6. 6. CRUD landscape Admin tools Oracle SQLDeveloper SQLite Sqliteman Postgres pgadmin phpMyAdmin ... Ready to use Needs programming Fixed features Customizable Scaffolding tools Ruby on Rails Catalyst CatalystX::CRUD ... AutoCRUD apps Catalyst::Plugin::AutoCRUD (2011) App::AutoCRUD (Jan 2014) RapidApp (Feb 2014) [ WebAPI::DBIC ] (Jul 2014) Interchange TableEditor (2013??)
  7. 7. App::AutoCRUD main features • Powerful search syntax • Distinctive URL for every resource –  no session, all information in URL –  easy admin links from the "real App" • Joins as hyperlinks • Bulk update / delete operations • Customizable table order / column order • Navigation through tree navigator
  8. 8. 24.08.2014 - Page 1 Département Office Quick overview To run the demo : cd examples perl download_db.pl plackup
  9. 9. Homepage Specified in config file http://chinookdatabase.codeplex.com/ https://code.google.com/p/sakila-sample-database-ports/ Demo: free sample databases
  10. 10. Datasource entry point Auto-generated datamodel Grouping, order & comments from config file
  11. 11. Table description Grouping, order & comments from config file Hyperlinks to foreign tables from DB schema
  12. 12. Search form Multiple values (OR) LIKE Multiple views Choose columns BETWEEN
  13. 13. Results from search Hyperlinks to foreign records or lists Only show non-null columns Also navigate through LEFT/RIGHT arrow keys
  14. 14. Excel output
  15. 15. YAML output
  16. 16. Bulk update (selective) 2) Call the update form 1) Check records to be modified
  17. 17. Update form Keys of selected records
  18. 18. Bulk update (from WHERE criteria) Call the update form
  19. 19. Update form Criteria for the update Fields to update
  20. 20. ± RESTful URLs • /Chinook/table/Track/search?GenreId=1,3&Name=Ab* – GET  display pre-filled search form – POST  redirect to list • /Chinook/table/Track/list?GenreId=1,3&Name=Ab* –  search results • /Chinook/table/Track/id/399 –  single record • /Chinook/table/Track/delete?where_pk.TrackId=399 – GET  display pre-filled delete form – POST  database operation Note : browser-oriented, not API-oriented  No use of HTTP methods PUT and DELETE
  21. 21. 24.08.2014 - Page 1 Département Office Getting Started
  22. 22. YAML Config : connection parameters app: name: Test AutoCRUD datasources : Source1 : dbh: connect: - dbi:SQLite:dbname=some_file - "" # user - "" # password - RaiseError : 1 sqlite_unicode: 1
  23. 23. Config : specifying table grouping / ordering tablegroups : - name: Music descr: Tables describing music content node: open tables : - Artist - Album - Track - name: Playlist ...
  24. 24. Config : specifying col grouping / ordering Employee: colgroups: - name: keys columns: - name: EmployeeId descr: primary key - name: ReportsTo descr: foreign key to the manager - name: Employee details columns: - name: Title - name: FirstName - name: LastName
  25. 25. "crud.psgi" startup file use App::AutoCRUD; use YAML qw/LoadFile/; my $config = LoadFile "/path/to/config.yaml"; my $crud = App::AutoCRUD->new(config => $config); my $app = $crud->to_app;
  26. 26. Start the application • From the command line plackup crud.psgi • Within Apache <Location /crud> SetHandler perl-script PerlResponseHandler Plack::Handler::Apache2 PerlSetVar psgi_app /path/to/crud.psgi </Location> • Other possibilities : see L<Plack>
  27. 27. 24.08.2014 - Page 1 Département Office Architecture : external modules
  28. 28. External modules : Global view Template Toolkit Alien: :GvaScript Prototype.js Excel::Writer: :XLSX View DBIx::DataModel DBI SQL::Abstract: :More Model Plack CGI::Expand SQL::Abstract: :FromQuery Controller Infrastructure Moose Data::DomainYAML
  29. 29. Infrastructure modules • Moose for OO – Modern Perl OO framework • YAML for config data – Human-readable – Support for directed acyclic graph (DAG)  reusable subtrees – But can be replaced by JSON, XML, Config::General or Perl source code • Data::Domain for data validation
  30. 30. Controller modules • Plack for HTTP support – Abstraction over various engines – Many middleware options • CGI::Expand for transforming form inputs – <input name="foo.1.bar" value=1234> –  { foo => [ {...}, { bar => 1234 } ] } • SQL::Abstract::FromQuery for parsing user queries – HTML form  SQL::Abstract::More  SQL – Parses booleans, < > !=, LIKE, BETWEEN, etc.
  31. 31. Model modules • DBI for database independance – Perl standard for databases • DBIx::DataModel for object-relational mapping – Why not DBIC ? See http://www.slideshare.net/ldami/dbixclass-vs- dbixdatamodel • SQL::Abstract::More for SQL generation – Emit SQL from Perl datastructures
  32. 32. View modules • Template Toolkit for HTML generation • Alien::GvaScript for widgets – Tree::Navigator • Prototype.js for Javascript abstraction – Navigator abstraction, OO programming, etc. • Excel::Writer::XLSX for generating Excel worksheets –
  33. 33. 24.08.2014 - Page 1 Département Office Architecture : internal structure
  34. 34. Internal structure : global view AutoCRUD AutoCRUD: :View AutoCRUD: :Controller AutoCRUD: :Context AutoCRUD: :DataSource Plack::Component Moose::Object Controller: :Table Controller: :Schema View::XLSXView::TT ...
  35. 35. App::AutoCRUD • Entry point • Autodiscovers component subclasses • isa Plack::Component • Has – Name – Config – Datasources
  36. 36. App::AutoCRUD::DataSource • Encapsulates DBIx::DataModel schema – Autogenerate Perl code if not already present • Gathers and merges metadata – From the DB schema • Tables, columns, foreign keys – From config • Table groups, column groups, ordering, display parameters
  37. 37. App::AutoCRUD::Context • Gathers contextual information for the current request – Plack::Request object – Datasource object – View to apply – Parameters for the view (for example TT template name)
  38. 38. Controller::Schema • Lists table groups & tables • Publishes the DBIx::DataModel schema
  39. 39. Controller::Table • Implements CRUD operations • Methods – Descr – List – Id – Search – Update – Delete – Insert
  40. 40. View::* • Render results – TT – XLSX – YAML – JSON – ...
  41. 41. 24.08.2014 - Page 1 Département Office Extensibility
  42. 42. Regular subclassing • Extend the app package My::Private::AutoCRUD; use Moose; extends 'App::AutoCRUD'; • Subclass and redefine existing methods – Automatic subclass discovery – Good candidates : • DataSource::prepare_for_request • DataSource::_query_parser
  43. 43. Adding URLs • New controllers – Crud/<db_name>/<controller_name>/.... • New methods in existing controllers – Crud/<db_name>/table/<table_name>/<method>/...
  44. 44. Adding Views • Create View/XYZ.pm with "render" method – Serves /path/to/resource.xyz?p1=v1&p2=v2&...
  45. 45. Relooking • Override CSS – My/Private/AutoCRUD/share/static/css/styles.css • Override TT templates – My/Private/AutoCRUD/share/templates/src/table/list.tt
  46. 46. 24.08.2014 - Page 1 Département Office Conclusion
  47. 47. Status • Still young, lots of TODO • Already in production at Geneva Justice • Has some original features not seen other CRUD apps • Could be useful for many people – Also outside the Perl community  •  Perl marketing needs general-purpose apps – Needs stabilization & doc – Needs marketing – You can help !

×