X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=angular-server.pl;h=e21ec592bcfc32ef17ae257b6a339cbf00fdfbf0;hb=c4b8b1eaa1ac4275332a5b8ca44a7e92713a2919;hp=85e6ad410f09079f1a49c70985d2ff417148b69d;hpb=9450d2c320db0e858bfd1992b70a946047aad9a2;p=angular-mojolicious.git diff --git a/angular-server.pl b/angular-server.pl index 85e6ad4..e21ec59 100755 --- a/angular-server.pl +++ b/angular-server.pl @@ -8,6 +8,7 @@ use Data::Dump qw(dump); # http://angular.getangular.com/data our $data; +our $id2nr; get '/' => 'index'; @@ -30,6 +31,7 @@ get '/_replicate' => sub { my $e = $self->client->get( $url )->res->json; warn "# replicated $url ", dump($e); $data->{$database}->{$entity} = $e; + delete $id2nr->{$database}->{$entity}; } } } @@ -49,6 +51,7 @@ get '/data/:database' => sub { my $database = $self->param('database'); my $list_databases = { name => $database }; foreach my $entity ( keys %{ $data->{ $database }} ) { +warn "# entry $entity ", dump( $data->{$database}->{$entity} ); my $count = $#{ $data->{$database}->{$entity} } + 1; $list_databases->{entities}->{$entity} = $count; $list_databases->{document_count} += $count; @@ -59,12 +62,31 @@ get '/data/:database' => sub { get '/data/:database/:entity' => sub { my $self = shift; - + $self->render_json( $data->{ $self->param('database') }->{ $self->param('entity' ) } ); }; get '/data/:database/:entity/:id' => sub { my $self = shift; + my $database = $self->param('database'); + my $entity = $self->param('entity'); + my $id = $self->param('id'); + + my $e = $data->{$database}->{$entity} || die "no entity $entity"; + + if ( ! defined $id2nr->{$database}->{$entity} ) { + foreach my $i ( 0 .. $#$e ) { + $id2nr->{$database}->{$entity}->{ $e->[$i]->{'$id'} } = $i; + } + } + + if ( exists $id2nr->{$database}->{$entity}->{$id} ) { + my $nr = $id2nr->{$database}->{$entity}->{$id}; + warn "# entity $id -> $nr\n"; + $self->render_json( $data->{$database}->{$entity}->[$nr] ); + } else { + die "no entity $entity $id in ", dump( $id2nr->{$database}->{$entity} ); + } }; any [ 'put' ] => '/data/:database/:entity/:id' => sub {