X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=angular-server.pl;h=6df0cbecc3deaea0d79fc546fe2be2d096bf0cf0;hb=987508ef0c6ae1c18595f7768f1e1c669eee3411;hp=d81ac00c95c17ed55b730cf98860629e7311c6b6;hpb=a9c6c81ac54243974bf3493ce5a9d8b8fe635135;p=angular-mojolicious.git diff --git a/angular-server.pl b/angular-server.pl index d81ac00..6df0cbe 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'; @@ -25,16 +26,21 @@ get '/_replicate' => sub { if ( $database && $entities ) { foreach my $entity ( keys %$entities ) { my $url = $from; - $url =~ s{/+$}{/}; + $url =~ s{/?$}{/}; # add slash at end $url .= $entity; my $e = $self->client->get( $url )->res->json; warn "# replicated $url ", dump($e); $data->{$database}->{$entity} = $e; + delete $id2nr->{$database}->{$entity}; } } } }; +get '/_data' => sub { + shift->render_json( $data ) +}; + get '/data/' => sub { my $self = shift; $self->render_json( [ keys %$data ] ); @@ -45,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; @@ -55,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 {