From a2b4cccd6193fa4d27a4ef615f98518c397cd791 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Tue, 7 Jan 2020 14:41:50 -0300 Subject: [PATCH] Bug 24366: Merge biblioitem in Koha::Biblio->to_api This patch moves the bilbioitem object merge into the Koha::Biblio->to_api method, as opposed to doing it in the controller. This is an inevitable change as other endpoints might require to embed biblio objects, and they need to carry the biblioitem information. Also, if we merge the tables, the transition will be straightforward (remove the tests this patch introduces, and merge the mappings from Koha::Biblioitem into Koha::Biblio). To test: 1. Apply this patches 2. Run: $ kshell k$ prove t/db_dependent/Koha/Biblio.t \ t/db_dependent/api/v1/biblios.t => SUCCESS: Tests pass! i.e. the new to_api method is tested, and the API tests don't expect any behavior change. 3. Sign off :-D --- Koha/Biblio.pm | 23 +++++++++++++++++++++++ Koha/Biblioitem.pm | 1 + Koha/REST/V1/Biblios.pm | 25 +------------------------ 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm index 8c26db04fb..5efc462e03 100644 --- a/Koha/Biblio.pm +++ b/Koha/Biblio.pm @@ -724,6 +724,29 @@ sub custom_cover_image_url { return $url; } +=head3 to_api + + my $json = $biblio->to_api; + +Overloaded method that returns a JSON representation of the Koha::Biblio object, +suitable for API output. The related Koha::Biblioitem object is merged as expected +on the API. + +=cut + +sub to_api { + my ($self, $args) = @_; + + my $response = $self->SUPER::to_api( $args ); + my $biblioitem = $self->biblioitem->to_api( $args ); + + foreach my $key ( keys %{ $biblioitem } ) { + $response->{$key} = $biblioitem->{$key}; + } + + return $response; +} + =head3 to_api_mapping This method returns the mapping for representing a Koha::Biblio object diff --git a/Koha/Biblioitem.pm b/Koha/Biblioitem.pm index e524f8375d..c4be1d1beb 100644 --- a/Koha/Biblioitem.pm +++ b/Koha/Biblioitem.pm @@ -41,6 +41,7 @@ on the API. sub to_api_mapping { return { agerestriction => 'age_restriction', + biblionumber => 'biblio_id', biblioitemnumber => undef, # meaningless collectionissn => 'collection_issn', collectiontitle => 'collection_title', diff --git a/Koha/REST/V1/Biblios.pm b/Koha/REST/V1/Biblios.pm index 498a0c8172..9076172413 100644 --- a/Koha/REST/V1/Biblios.pm +++ b/Koha/REST/V1/Biblios.pm @@ -59,7 +59,7 @@ sub get { if ( $c->req->headers->accept =~ m/application\/json/ ) { return $c->render( status => 200, - json => $c->build_json_biblio( { biblio => $biblio } ) + json => $biblio->to_api ); } else { @@ -148,27 +148,4 @@ sub delete { }; } -=head2 Internal methods - -=head3 build_json_biblio - -Internal method that returns all the attributes from the biblio and biblioitems tables - -=cut - -sub build_json_biblio { - my ( $c, $args ) = @_; - - my $biblio = $args->{biblio}; - - my $response = $biblio->to_api; - my $biblioitem = $biblio->biblioitem->to_api; - - foreach my $key ( keys %{ $biblioitem } ) { - $response->{$key} = $biblioitem->{$key}; - } - - return $response; -} - 1; -- 2.24.1