migrate CouchDB data from old version of code
[angular-drzb] / migrate-db.pl
diff --git a/migrate-db.pl b/migrate-db.pl
new file mode 100755 (executable)
index 0000000..c91119e
--- /dev/null
@@ -0,0 +1,79 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use Mojo::UserAgent;
+use Data::Dump qw(dump);
+
+my $ua = Mojo::UserAgent->new;
+
+my $from = 'http://10.60.0.95:5984/drzb2013';
+my $to   = 'http://10.60.0.92:5984/drzb2013';
+
+my $docs = $ua->get("$from/_all_docs?include_docs=true")->res->json;
+
+#warn "## docs = ",dump($docs);
+
+foreach my $doc ( map { $_->{doc} } @{ $docs->{rows} } ) {
+       warn "OLD ",dump($doc);
+
+       my $new;
+
+       $new->{$_} = delete( $doc->{$_} ) foreach ( qw( _id _rev ) );
+
+       $new->{user} = delete $doc->{person};
+       $new->{id}   = delete $doc->{'$id'};
+
+       $new->{user}->{registration_type} = delete $doc->{type};
+
+       $new->{user}->{address}   = delete $new->{user}->{address1};
+       $new->{user}->{firstname} = delete $new->{user}->{name};
+       $new->{user}->{zip_code}  = delete $new->{user}->{zip};
+       $new->{user}->{organization}  = delete $new->{user}->{inst};
+
+       $new->{user}->{dinner}     = delete $doc->{dinner};
+       $new->{user}->{hpd_member} = delete $doc->{hpdmember};
+       $new->{user}->{student}    = delete $doc->{student};
+       $new->{user}->{reception}  = delete $doc->{reception};
+
+       if ( $doc->{r1} eq 'yes' ) {
+               $new->{user}->{r1} = {
+                       required => Mojo::JSON->true,
+                       OIB     => delete $doc->{r1oib},
+                       address => delete $doc->{r1address},
+                       organization => delete $doc->{r1inst},
+               };
+               warn "need R1";
+       }
+
+       if ( $doc->{work}->{title} ) {
+               $new->{work}->{$_} = delete $doc->{work}->{$_} foreach (qw( title abstract ));
+               $new->{work}->{type} = $new->{user}->{registration_type};
+               my @persons = @{ delete $doc->{work}->{authors} };
+               foreach my $person ( @persons ) {
+                       $person->{firstname} = delete $person->{name};
+                       $person->{organization} = delete $person->{inst};
+                       push @{ $new->{work}->{persons} }, $person;
+               }
+       }
+
+       $new->{entity} = 'registration';
+
+       warn "NEW ",dump($new);
+
+       warn "LEFT = ",dump($doc);
+
+       my $id = $new->{_id} || die "no _id in new";
+       my $result = $ua->put("$to/$id" => Mojo::JSON->new->encode( $new ))->res->json;
+
+       die "ERROR $id ",dump($result) unless $result->{ok};
+
+       warn "SAVED $id into $to\n";
+
+}
+
+__END__
+
+warn dump(
+       $ua->get("$to/_all_docs?include_docs=true")->res->json
+);