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

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Tomas Cohen Arazi 2020-01-07 14:41:50 -03:00 committed by Martin Renvoize
parent 0d634ca430
commit 52d3b5439d
No known key found for this signature in database
GPG Key ID: 422B469130441A0F
3 changed files with 25 additions and 24 deletions

View File

@ -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

View File

@ -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',

View File

@ -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;