Bug 24321: Clean /libraries
Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
parent
3ac92ea881
commit
4ba67994a9
|
|
@ -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;
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue