X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=angular-server.pl;h=6df0cbecc3deaea0d79fc546fe2be2d096bf0cf0;hb=987508ef0c6ae1c18595f7768f1e1c669eee3411;hp=f84f2eb5b1e17764a2503c97927cb51e3e1b7b26;hpb=dc5525e0cd32ff8b9ed4fe06ae8f426b06249183;p=angular-mojolicious.git diff --git a/angular-server.pl b/angular-server.pl index f84f2eb..6df0cbe 100755 --- a/angular-server.pl +++ b/angular-server.pl @@ -8,10 +8,11 @@ use Data::Dump qw(dump); # http://angular.getangular.com/data our $data; +our $id2nr; get '/' => 'index'; -get '/replicate' => sub { +get '/_replicate' => sub { my $self = shift; if ( my $from = $self->param('from') ) { @@ -24,14 +25,22 @@ get '/replicate' => sub { if ( $database && $entities ) { foreach my $entity ( keys %$entities ) { - my $e = $self->client->get( "$from/$entity" )->res->json; - warn "# replicated $entity ", dump($e); + my $url = $from; + $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 ] ); @@ -42,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; @@ -52,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 {