# http://angular.getangular.com/data
our $data;
+our $id2nr;
get '/' => 'index';
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 ] );
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;
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 {