DESCRIPTION

This is a framework based on Mojo, with easy syntax
like Mojolicious::Lite, intended for making applications
which are part of an HTTP-based cluster.

When used with Rose::DB::Planter, Clustericious
allows for the easy conversion of a database
schema into a RESTful interface and a web
frontend.

EXAMPLE

Let's turn a database schema below into a RESTful
web service with a web front end.

Step 1.  Make your schema :

   create table artist (
       id serial primary key,
       name varchar
   );

   create table album (
       id serial primary key,
       artist integer references artist,
       title varchar,
       year integer
   );

   create table song (
       id serial primary key,
       album integer references album(id),
       title varchar,
       length integer
   );

   create table performance (
       id serial primary key,
       location varchar
   );

   create table song_performance (
       song integer references song(id),
       performance integer references performance (id),
       primary key (song, performance)
   );


Note we have several 1-many relationships and one
many-many relationship.

Save the above as schema.sql.

Step 2.

   clustericious generate mbd_app Musicrest --schema schema.sql

Now skip to step 7 if you just want to see it work.

Step 4.  Try the test suite :

   cd Musicrest
   perl Build.PL
   ./Build
   ./Build test

Step 5.  Add a test :

   cat > t/002_music.t

   #!/usr/bin/env perl

   use Test::More;
   use Test::Clustericious;
   use Test::MBD '-autostart';

   my $t = Test::Clustericious->new(app => 'Musicrest');
   $t->create_ok( '/artist' => { name => 'Prince' } );
   my $id = $t->tx->res->json->{id};
   ok $id, "Added artist, id is $id";
   $t->remove_ok( "/artist/$id" );
   done_testing();

Step 6.  Run ./Build test to see it work.

Step 7.  Prepare to distribute your application and schema.

   ./Build dbdist
   ./Build manifest
   ./Build dist
   # (and commit and tag)

Step 8.  Install and configure

   ./Build fakeinstall
   ./Build dbfakeinstall

   ./Build install
   ./Build dbinstall

Check the db that was installed :
   psql --list
   psql musicrestserver
   \dt

Step 9.  Configure

   mkdir ~/etc
   cp eg/*.conf ~/etc

Step 10. Start it up

   musicrest start

Step 11.  Try it :

   curl -v http://localhost:3000

Now for some sample REST calls :

Note for testing, you can use the server
as a client, e.g. :
   musicrest get -v /status

   add an artist
   add an album
   add some songs
   add a performance

   get a list of artists
   get the songs for an artist
   get the performances by an artist