From 4ba67994a9f9aabf24ce3e9b59b4e2820cdbedc6 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Tue, 31 Dec 2019 11:07:37 -0300 Subject: [PATCH] Bug 24321: Clean /libraries Signed-off-by: Josef Moravec Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize --- Koha/REST/V1/{Library.pm => Libraries.pm} | 126 +--------------------- api/v1/swagger/paths/libraries.json | 24 +++-- t/db_dependent/api/v1/libraries.t | 6 +- 3 files changed, 25 insertions(+), 131 deletions(-) rename Koha/REST/V1/{Library.pm => Libraries.pm} (58%) diff --git a/Koha/REST/V1/Library.pm b/Koha/REST/V1/Libraries.pm similarity index 58% rename from Koha/REST/V1/Library.pm rename to Koha/REST/V1/Libraries.pm index a40e049331..8d0b04e694 100644 --- a/Koha/REST/V1/Library.pm +++ b/Koha/REST/V1/Libraries.pm @@ -1,4 +1,4 @@ -package Koha::REST::V1::Library; +package Koha::REST::V1::Libraries; # This file is part of Koha. # @@ -45,7 +45,7 @@ sub list { return try { my $libraries_set = Koha::Libraries->new; - my $libraries = $c->objects->search( $libraries_set, \&_to_model, \&_to_api ); + my $libraries = $c->objects->search( $libraries_set ); return $c->render( status => 200, openapi => $libraries ); } catch { @@ -95,7 +95,7 @@ sub add { my $c = shift->openapi->valid_input or return; return try { - my $library = Koha::Library->new( _to_model( $c->validation->param('body') ) ); + my $library = Koha::Library->new_from_api( $c->validation->param('body') ); $library->store; $c->res->headers->location( $c->req->url->to_string . '/' . $library->branchcode ); @@ -146,7 +146,7 @@ sub update { return try { my $params = $c->req->json; - $library->set( _to_model($params) ); + $library->set_from_api( $params ); $library->store(); return $c->render( status => 200, @@ -203,122 +203,4 @@ sub delete { }; } -=head3 _to_api - -Helper function that maps a hashref of Koha::Library attributes into REST api -attribute names. - -=cut - -sub _to_api { - my $library = shift; - - # Rename attributes - foreach my $column ( keys %{ $Koha::REST::V1::Library::to_api_mapping } ) { - my $mapped_column = $Koha::REST::V1::Library::to_api_mapping->{$column}; - if ( exists $library->{ $column } - && defined $mapped_column ) - { - # key /= undef - $library->{ $mapped_column } = delete $library->{ $column }; - } - elsif ( exists $library->{ $column } - && !defined $mapped_column ) - { - # key == undef => to be deleted - delete $library->{ $column }; - } - } - - return $library; -} - -=head3 _to_model - -Helper function that maps REST api objects into Koha::Library -attribute names. - -=cut - -sub _to_model { - my $library = shift; - - foreach my $attribute ( keys %{ $Koha::REST::V1::Library::to_model_mapping } ) { - my $mapped_attribute = $Koha::REST::V1::Library::to_model_mapping->{$attribute}; - if ( exists $library->{ $attribute } - && defined $mapped_attribute ) - { - # key /= undef - $library->{ $mapped_attribute } = delete $library->{ $attribute }; - } - elsif ( exists $library->{ $attribute } - && !defined $mapped_attribute ) - { - # key == undef => to be deleted - delete $library->{ $attribute }; - } - } - - if ( exists $library->{pickup_location} ) { - $library->{pickup_location} = ( $library->{pickup_location} ) ? 1 : 0; - } - - return $library; -} - - -=head2 Global variables - -=head3 $to_api_mapping - -=cut - -our $to_api_mapping = { - branchcode => 'library_id', - branchname => 'name', - branchaddress1 => 'address1', - branchaddress2 => 'address2', - branchaddress3 => 'address3', - branchzip => 'postal_code', - branchcity => 'city', - branchstate => 'state', - branchcountry => 'country', - branchphone => 'phone', - branchfax => 'fax', - branchemail => 'email', - branchreplyto => 'reply_to_email', - branchreturnpath => 'return_path_email', - branchurl => 'url', - issuing => undef, - branchip => 'ip', - branchprinter => undef, - branchnotes => 'notes', - marcorgcode => 'marc_org_code', -}; - -=head3 $to_model_mapping - -=cut - -our $to_model_mapping = { - library_id => 'branchcode', - name => 'branchname', - address1 => 'branchaddress1', - address2 => 'branchaddress2', - address3 => 'branchaddress3', - postal_code => 'branchzip', - city => 'branchcity', - state => 'branchstate', - country => 'branchcountry', - phone => 'branchphone', - fax => 'branchfax', - email => 'branchemail', - reply_to_email => 'branchreplyto', - return_path_email => 'branchreturnpath', - url => 'branchurl', - ip => 'branchip', - notes => 'branchnotes', - marc_org_code => 'marcorgcode', -}; - 1; diff --git a/api/v1/swagger/paths/libraries.json b/api/v1/swagger/paths/libraries.json index c4cd55b578..1110e73348 100644 --- a/api/v1/swagger/paths/libraries.json +++ b/api/v1/swagger/paths/libraries.json @@ -1,8 +1,8 @@ { "/libraries": { "get": { - "x-mojo-to": "Library#list", - "operationId": "listLibrary", + "x-mojo-to": "Libraries#list", + "operationId": "listLibraries", "tags": [ "library" ], @@ -125,6 +125,18 @@ "description": "Case insensitive 'starts-with' search on OPAC info", "required": false, "type": "string" + }, + { + "$ref": "../parameters.json#/match" + }, + { + "$ref": "../parameters.json#/order_by" + }, + { + "$ref": "../parameters.json#/page" + }, + { + "$ref": "../parameters.json#/per_page" } ], "produces": [ @@ -160,7 +172,7 @@ } }, "post": { - "x-mojo-to": "Library#add", + "x-mojo-to": "Libraries#add", "operationId": "addLibrary", "tags": [ "library" @@ -232,7 +244,7 @@ }, "/libraries/{library_id}": { "get": { - "x-mojo-to": "Library#get", + "x-mojo-to": "Libraries#get", "operationId": "getLibrary", "tags": [ "library" @@ -266,7 +278,7 @@ } }, "put": { - "x-mojo-to": "Library#update", + "x-mojo-to": "Libraries#update", "operationId": "updateLibrary", "tags": [ "library" @@ -342,7 +354,7 @@ } }, "delete": { - "x-mojo-to": "Library#delete", + "x-mojo-to": "Libraries#delete", "operationId": "deleteLibrary", "tags": [ "library" diff --git a/t/db_dependent/api/v1/libraries.t b/t/db_dependent/api/v1/libraries.t index 5ac8eccade..8cdac30dfe 100644 --- a/t/db_dependent/api/v1/libraries.t +++ b/t/db_dependent/api/v1/libraries.t @@ -121,7 +121,7 @@ subtest 'get() tests' => sub { $t->get_ok( "//$userid:$password@/api/v1/libraries/" . $library->branchcode ) ->status_is( 200, 'SWAGGER3.2.2' ) - ->json_is( '' => Koha::REST::V1::Library::_to_api( $library->TO_JSON ), 'SWAGGER3.3.2' ); + ->json_is( '' => $library->to_api, 'SWAGGER3.3.2' ); my $non_existent_code = $library->branchcode; $library->delete; @@ -155,7 +155,7 @@ subtest 'add() tests' => sub { my $unauth_userid = $unauthorized_patron->userid; my $library_obj = $builder->build_object({ class => 'Koha::Libraries' }); - my $library = Koha::REST::V1::Library::_to_api( $library_obj->TO_JSON ); + my $library = $library_obj->to_api; $library_obj->delete; # Unauthorized attempt to write @@ -245,7 +245,7 @@ subtest 'update() tests' => sub { ); my $deleted_library = $builder->build_object( { class => 'Koha::Libraries' } ); - my $library_with_updated_field = Koha::REST::V1::Library::_to_api( $deleted_library->TO_JSON ); + my $library_with_updated_field = $deleted_library->to_api; $library_with_updated_field->{library_id} = $library_id; $deleted_library->delete; -- 2.39.5