X-Git-Url: http://git.rot13.org/?p=angular-drzb;a=blobdiff_plain;f=angular-server.pl;h=3da071c45c29a2d0b81e77e43ae2e0b91a83e1a7;hp=3a97b73634ab472d5b76248575c4115508d9a51d;hb=HEAD;hpb=b299e8621d031b25c179531fa77d2947148aba37 diff --git a/angular-server.pl b/angular-server.pl index 3a97b73..3da071c 100755 --- a/angular-server.pl +++ b/angular-server.pl @@ -19,9 +19,13 @@ my $couchdb_database = 'drzb2013v2'; my $couchdb_view = "http://10.60.0.92:5984/_utils/document.html?$couchdb_database"; my $client = Mojo::UserAgent->new; +our $view_cache; + sub _couchdb_put { my ( $url, $data ) = @_; + $view_cache = undef; + $data->{'$entity'} = $1 if $url =~ m{/(\w+)\.\d+/$/}; my $json = Mojo::JSON->new->encode( $data ); @@ -216,8 +220,6 @@ any [ 'post' ] => '/data/:database/:entity' => sub { # CouchDB proxy for _design _view -our $view_cache; - get '/:database/_design/:design/_view/:view' => sub { my $self = shift; my $format = $self->param('format'); @@ -253,8 +255,8 @@ get '/:database/_design/:design/_view/:view' => sub { if ( doc.user.organization != '' ) { if ( doc.user.organization ) emit(doc.user.organization, 1); - if ( doc.user.persons ) { - doc.user.persons.forEach( function(person) { + if ( doc.work.persons ) { + doc.work.persons.forEach( function(person) { if ( person.organization ) emit(person.organization, 1); }); @@ -262,7 +264,29 @@ if ( doc.user.organization != '' ) { } }q|, reduce => q| function(keys,values,rereduce) { return sum(values); } |, - } + }, + authors => { + map => q| +function(doc) { + if ( doc.work.persons ) { + doc.work.persons.forEach( function(person) { + emit(person.surname+person.firstname , + person + ); + }); + } + if ( doc.work.symposium_works ) { + doc.work.symposium_works.forEach( function(work) { + work.persons.forEach( function(person) { + emit(person.surname+person.firstname , + person + ); + }); + }); + } +} + |, + }, } }; $json = _couchdb_get($url) @@ -271,6 +295,26 @@ if ( doc.user.organization != '' ) { if ( $format eq 'key_array' ) { # array of keys sorted by value $json->{rows} = [ map { $_->{key} } sort { $b->{value} <=> $a->{value} } @{ $json->{rows} } ]; + } elsif ( $format eq 'key_distinct' ) { + + my $found; + my @rows = grep { + push @{ $found->{ $_->{key} } }, $_->{id}; + $#{ $found->{ $_->{key} } } == 0; # take just first registration + } @{ $json->{rows} }; + + $json->{rows} = [ map { + $_->{distinct_ids} = $found->{ $_->{key} }; + $_; + } @rows ]; + + $json->{distinct_rows} = scalar @{ $json->{rows} }; + warn "## distinct stats ", dump( $found ); + + } elsif ( $format ) { + + die "unknown format: $format"; + } $view_cache->{$url}->{time} = time();