From 9e8a245ff181e3b837e1e60ef60c8eb3d8b0f190 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Mon, 4 Aug 2014 13:12:56 -0400 Subject: [PATCH] LP#1350042 streaming holds pull list API Adds an API name-based option to the standard holds pull list API to respond with a stream of fleshed users, so the caller is not forced to make additional fetch-by-ID calls to collect the holds data. Signed-off-by: Bill Erickson --- .../lib/OpenILS/Application/Circ/Holds.pm | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm index 093908665c..ccbef890a7 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm @@ -1555,6 +1555,25 @@ __PACKAGE__->register_method( } ); +__PACKAGE__->register_method( + method => "hold_pull_list", + stream => 1, + # TODO: tag with api_level 2 once fully supported + api_name => "open-ils.circ.hold_pull_list.fleshed.stream", + signature => { + desc => q/Returns a stream of fleshed holds that need to be + "pulled" by a given location. The location is + determined by the login session. + This API calls always run in authoritative mode./, + params => [ + { desc => 'Limit (optional)', type => 'number'}, + { desc => 'Offset (optional)', type => 'number'}, + ], + return => { + desc => 'Stream of holds holds, or event on failure', + } + } +); sub hold_pull_list { my( $self, $conn, $authtoken, $limit, $offset ) = @_; @@ -1577,12 +1596,24 @@ sub hold_pull_list { return $count; } elsif( $self->api_name =~ /id_list/ ) { - return $U->storagereq( + $U->storagereq( + 'open-ils.storage.direct.action.hold_request.pull_list.id_list.current_copy_circ_lib.status_filtered.atomic', + $org, $limit, $offset ); + + } elsif ($self->api_name =~ /fleshed/) { + + my $ids = $U->storagereq( 'open-ils.storage.direct.action.hold_request.pull_list.id_list.current_copy_circ_lib.status_filtered.atomic', $org, $limit, $offset ); + my $e = new_editor(xact => 1, requestor => $reqr); + $conn->respond(uber_hold_impl($e, $_, {flesh_acpl => 1})) for @$ids; + $e->rollback; + $conn->respond_complete; + return; + } else { - return $U->storagereq( + $U->storagereq( 'open-ils.storage.direct.action.hold_request.pull_list.search.current_copy_circ_lib.status_filtered.atomic', $org, $limit, $offset ); } @@ -3384,6 +3415,10 @@ sub uber_hold_impl { %$details }; + $resp->{copy}->location( + $e->retrieve_asset_copy_location($resp->{copy}->location)) + if $resp->{copy} and $args->{flesh_acpl}; + unless($args->{suppress_patron_details}) { my $card = $e->retrieve_actor_card($user->card) or return $e->event; $resp->{patron_first} = $user->first_given_name, -- 2.43.2