Bugzilla – Attachment 150720 Details for
Bug 22440
Improve ILL page performance by moving to server side filtering
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 22440: ILL API changes
Bug-22440-ILL-API-changes.patch (text/plain), 10.00 KB, created by
Martin Renvoize
on 2023-05-05 11:04:57 UTC
(
hide
)
Description:
Bug 22440: ILL API changes
Filename:
MIME Type:
Creator:
Martin Renvoize
Created:
2023-05-05 11:04:57 UTC
Size:
10.00 KB
patch
obsolete
>From 4bcd9413b000ccd802cc8912b9cc6d07aa4db2b2 Mon Sep 17 00:00:00 2001 >From: Pedro Amorim <pedro.amorim@ptfs-europe.com> >Date: Mon, 24 Apr 2023 15:28:28 +0000 >Subject: [PATCH] Bug 22440: ILL API changes > >* Add GET /illbackends/{id}/statuses >* Change API route to ill/requests > >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > Koha/REST/V1/Illbackends.pm | 44 +++++++++++++++ > api/v1/swagger/definitions/ill_status.yaml | 19 +++++++ > api/v1/swagger/definitions/ill_statuses.yaml | 5 ++ > api/v1/swagger/paths/ill_backends.yaml | 54 +++++++++++++++++-- > .../{illrequests.yaml => ill_requests.yaml} | 2 +- > api/v1/swagger/swagger.yaml | 24 +++++---- > .../intranet-tmpl/prog/js/ill-list-table.js | 6 +-- > 7 files changed, 136 insertions(+), 18 deletions(-) > create mode 100644 api/v1/swagger/definitions/ill_status.yaml > create mode 100644 api/v1/swagger/definitions/ill_statuses.yaml > rename api/v1/swagger/paths/{illrequests.yaml => ill_requests.yaml} (99%) > >diff --git a/Koha/REST/V1/Illbackends.pm b/Koha/REST/V1/Illbackends.pm >index cf2e77f301..c3c917ef70 100644 >--- a/Koha/REST/V1/Illbackends.pm >+++ b/Koha/REST/V1/Illbackends.pm >@@ -51,6 +51,50 @@ sub list { > return $c->render( status => 200, openapi => \@data ); > } > >+=head3 list_statuses >+ >+Return a list of existing ILL statuses >+ >+=cut >+ >+sub list_statuses { >+ my $c = shift->openapi->valid_input; >+ >+ my $backend_id = $c->validation->param('ill_backend_id'); >+ >+ #FIXME: Currently fetching all requests, it'd be great if we could fetch distinct(status). >+ # Even doing it with distinct status, we need the ILL request object, so that strings_map works and >+ # the ILL request returns the correct status and info respective to its backend. >+ my $ill_requests = Koha::Illrequests->search( >+ {backend => $backend_id}, >+ # { >+ # columns => [ qw/status/ ], >+ # group_by => [ qw/status/ ], >+ # } >+ ); >+ >+ my @data; >+ while (my $request = $ill_requests->next) { >+ my $status_data = $request->strings_map; >+ >+ foreach my $status_class ( qw(status_alias status) ){ >+ if ($status_data->{$status_class}){ >+ push @data, { >+ $status_data->{$status_class}->{str} ? (str => $status_data->{$status_class}->{str}) : >+ $status_data->{$status_class}->{code} ? (str => $status_data->{$status_class}->{code}) : (), >+ $status_data->{$status_class}->{code} ? (code => $status_data->{$status_class}->{code}) : (), >+ } >+ } >+ } >+ } >+ >+ # Remove duplicate statuses >+ my %seen; >+ @data = grep { my $e = $_; my $key = join '___', map { $e->{$_}; } sort keys %$_;!$seen{$key}++ } @data; >+ >+ return $c->render( status => 200, openapi => \@data ); >+} >+ > =head3 get > > Get one backend >diff --git a/api/v1/swagger/definitions/ill_status.yaml b/api/v1/swagger/definitions/ill_status.yaml >new file mode 100644 >index 0000000000..b11ea65080 >--- /dev/null >+++ b/api/v1/swagger/definitions/ill_status.yaml >@@ -0,0 +1,19 @@ >+--- >+type: object >+properties: >+ str: >+ type: string >+ description: Internal ILL status display string >+ code: >+ type: string >+ description: Internal ILL status code or av code >+ type: >+ type: string >+ description: This is 'ill_status' or 'av' depending on if coming from backend or authorised values i.e. alias >+ backend: >+ type: string >+ description: The backend in which this status is used >+ category: >+ type: string >+ description: The AV category in which the status aliases exists in >+additionalProperties: false >diff --git a/api/v1/swagger/definitions/ill_statuses.yaml b/api/v1/swagger/definitions/ill_statuses.yaml >new file mode 100644 >index 0000000000..ba2daf9447 >--- /dev/null >+++ b/api/v1/swagger/definitions/ill_statuses.yaml >@@ -0,0 +1,5 @@ >+--- >+type: array >+items: >+ $ref: "ill_status.yaml" >+additionalProperties: false >diff --git a/api/v1/swagger/paths/ill_backends.yaml b/api/v1/swagger/paths/ill_backends.yaml >index 3537c37cca..1a74f8b622 100644 >--- a/api/v1/swagger/paths/ill_backends.yaml >+++ b/api/v1/swagger/paths/ill_backends.yaml >@@ -1,10 +1,10 @@ > --- >-/ill_backends: >+/ill/backends: > get: > x-mojo-to: Illbackends#list > operationId: listIllbackends > tags: >- - illbackends >+ - ill_backends > summary: List ILL backends > parameters: [] > produces: >@@ -40,12 +40,12 @@ > x-koha-authorization: > permissions: > ill: "1" >-"/ill_backends/{ill_backend_id}": >+"/ill/backends/{ill_backend_id}": > get: > x-mojo-to: Illbackends#get > operationId: getIllbackends > tags: >- - illbackends >+ - ill_backends > summary: Get ILL backend > parameters: > - name: ill_backend_id >@@ -86,3 +86,49 @@ > x-koha-authorization: > permissions: > ill: "1" >+"/ill/backends/{ill_backend_id}/statuses": >+ get: >+ x-mojo-to: Illbackends#list_statuses >+ operationId: getIllbackendsStatuses >+ tags: >+ - ill_backends >+ summary: Get existing ILL statuses >+ parameters: >+ - name: ill_backend_id >+ in: path >+ description: ILL backend id/name >+ required: true >+ type: string >+ produces: >+ - application/json >+ responses: >+ "200": >+ description: A list of existing ILL statuses >+ schema: >+ $ref: "../swagger.yaml#/definitions/ill_statuses" >+ "401": >+ description: Authentication required >+ schema: >+ $ref: "../swagger.yaml#/definitions/error" >+ "403": >+ description: Access forbidden >+ schema: >+ $ref: "../swagger.yaml#/definitions/error" >+ "404": >+ description: ILL backends not found >+ schema: >+ $ref: "../swagger.yaml#/definitions/error" >+ "500": >+ description: | >+ Internal server error. Possible `error_code` attribute values: >+ >+ * `internal_server_error` >+ schema: >+ $ref: "../swagger.yaml#/definitions/error" >+ "503": >+ description: Under maintenance >+ schema: >+ $ref: "../swagger.yaml#/definitions/error" >+ x-koha-authorization: >+ permissions: >+ ill: "1" >\ No newline at end of file >diff --git a/api/v1/swagger/paths/illrequests.yaml b/api/v1/swagger/paths/ill_requests.yaml >similarity index 99% >rename from api/v1/swagger/paths/illrequests.yaml >rename to api/v1/swagger/paths/ill_requests.yaml >index 5e0d016998..3ba3f2ca3c 100644 >--- a/api/v1/swagger/paths/illrequests.yaml >+++ b/api/v1/swagger/paths/ill_requests.yaml >@@ -1,5 +1,5 @@ > --- >-/ill_requests: >+/ill/requests: > get: > x-mojo-to: Illrequests#list > operationId: listIllrequests >diff --git a/api/v1/swagger/swagger.yaml b/api/v1/swagger/swagger.yaml >index ddb4167f96..1cb992b23b 100644 >--- a/api/v1/swagger/swagger.yaml >+++ b/api/v1/swagger/swagger.yaml >@@ -52,6 +52,10 @@ definitions: > $ref: ./definitions/ill_backend.yaml > ill_backends: > $ref: ./definitions/ill_backends.yaml >+ ill_status: >+ $ref: ./definitions/ill_status.yaml >+ ill_statuses: >+ $ref: ./definitions/ill_statuses.yaml > ill_request: > $ref: ./definitions/ill_request.yaml > import_batch_profile: >@@ -241,14 +245,14 @@ paths: > $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1priority" > "/holds/{hold_id}/suspension": > $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1suspension" >- /ill_backends: >- $ref: ./paths/ill_backends.yaml#/~1ill_backends >- "/ill_backends/{ill_backend_id}": >- $ref: "./paths/ill_backends.yaml#/~1ill_backends~1{ill_backend_id}" >- /illrequests: >- $ref: ./paths/illrequests.yaml#/~1illrequests >- /ill_requests: >- $ref: ./paths/illrequests.yaml#/~1ill_requests >+ /ill/backends: >+ $ref: ./paths/ill_backends.yaml#/~1ill~1backends >+ "/ill/backends/{ill_backend_id}": >+ $ref: "./paths/ill_backends.yaml#/~1ill~1backends~1{ill_backend_id}" >+ "/ill/backends/{ill_backend_id}/statuses": >+ $ref: "./paths/ill_backends.yaml#/~1ill~1backends~1{ill_backend_id}~1statuses" >+ /ill/requests: >+ $ref: ./paths/ill_requests.yaml#/~1ill~1requests > "/import_batches/{import_batch_id}/records/{import_record_id}/matches/chosen": > $ref: "./paths/import_batches.yaml#/~1import_batches~1{import_batch_id}~1records~1{import_record_id}~1matches~1chosen" > /import_batch_profiles: >@@ -785,10 +789,10 @@ tags: > name: holds > x-displayName: Holds > - description: "Manage ILL module backends\n" >- name: illbackends >+ name: ill_backends > x-displayName: ILL backends > - description: "Manage ILL requests\n" >- name: illrequests >+ name: ill_requests > x-displayName: ILL requests > - description: "Manage import batches\n" > name: import_batches >diff --git a/koha-tmpl/intranet-tmpl/prog/js/ill-list-table.js b/koha-tmpl/intranet-tmpl/prog/js/ill-list-table.js >index 9b914cf728..174622ad50 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/ill-list-table.js >+++ b/koha-tmpl/intranet-tmpl/prog/js/ill-list-table.js >@@ -180,7 +180,7 @@ $(document).ready(function() { > > var ill_requests_table = $("#ill-requests").kohaTable({ > "ajax": { >- "url": '/api/v1/ill_requests' >+ "url": '/api/v1/ill/requests' > }, > "embed": [ > '+strings', >@@ -430,7 +430,7 @@ $(document).ready(function() { > function populateStatusFilter(backend) { > $.ajax({ > type: "GET", >- url: "/api/v1/ill_backends/"+backend+"/statuses", >+ url: "/api/v1/ill/backends/"+backend+"/statuses", > success: function(statuses){ > $('#illfilter_status').append( > '<option value="">'+ill_all_statuses+'</option>' >@@ -448,7 +448,7 @@ $(document).ready(function() { > function populateBackendFilter() { > $.ajax({ > type: "GET", >- url: "/api/v1/ill_backends", >+ url: "/api/v1/ill/backends", > success: function(backends){ > backends.sort((a, b) => a.ill_backend_id.localeCompare(b.ill_backend_id)).forEach(function(backend) { > $('#illfilter_backend').append( >-- >2.40.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 22440
:
150715
|
150716
|
150717
|
150718
|
150719
| 150720 |
150721
|
150722
|
150723
|
150788
|
150789