Bugzilla – Attachment 167938 Details for
Bug 36641
Add an endpoint to list circulation rules
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 36641: (follow-up) Requested changes
Bug-36641-follow-up-Requested-changes.patch (text/plain), 9.18 KB, created by
Martin Renvoize (ashimema)
on 2024-06-20 16:26:28 UTC
(
hide
)
Description:
Bug 36641: (follow-up) Requested changes
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2024-06-20 16:26:28 UTC
Size:
9.18 KB
patch
obsolete
>From 9f2aa40fa7453d92db038904a5f2a384ded2717a Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Thu, 20 Jun 2024 17:20:53 +0100 >Subject: [PATCH] Bug 36641: (follow-up) Requested changes > >This patch does a few things: > >1) Moves /circulation-rules to /circulation_rules >2) Adds a the missing permission to /circulation_rules/kinds >3) Updates the circ-rule-kind definition to allow for the new fields > added since the route was first defined >4) Adds a 'render_invalid_parameter_value' helper to ::Responses >5) Uses the above helper to render a 400 when an invalid branchcode, > itemtype or patron category code is used for filtering >6) Converts from required path based parameters to optional query based > parameters. >7) Refined the definition for the 'rules' response so we now only allow > for 'string' or 'integer' values for the keys in the response. >--- > Koha/REST/Plugin/Responses.pm | 23 ++++++ > Koha/REST/V1/CirculationRules.pm | 27 +++++-- > .../swagger/definitions/circ-rule-kind.yaml | 2 +- > ...tion-rules.yaml => circulation_rules.yaml} | 79 +++++++++++-------- > api/v1/swagger/swagger.yaml | 6 +- > 5 files changed, 92 insertions(+), 45 deletions(-) > rename api/v1/swagger/paths/{circulation-rules.yaml => circulation_rules.yaml} (82%) > >diff --git a/Koha/REST/Plugin/Responses.pm b/Koha/REST/Plugin/Responses.pm >index ed3f7673629..402f22e5b1e 100644 >--- a/Koha/REST/Plugin/Responses.pm >+++ b/Koha/REST/Plugin/Responses.pm >@@ -77,6 +77,29 @@ Provides a generic method rendering the standard response for resource not found > ); > } > ); >+ >+=head3 render_invalid_parameter_value >+ >+ $c->render_invalid_parameter_value >+ >+Provides a generic method rendering the standard response for invalid parameter value passed. >+ >+=cut >+ >+ $app->helper( >+ 'render_invalid_parameter_value' => sub { >+ my ( $c, $path ) = @_; >+ >+ $c->render( >+ status => 400, >+ openapi => { >+ error => "Invalid parameter value", >+ error_code => 'invalid_parameter_value', >+ path => $path, >+ }, >+ ); >+ } >+ ); > } > > 1; >diff --git a/Koha/REST/V1/CirculationRules.pm b/Koha/REST/V1/CirculationRules.pm >index f692181c0ac..3cfb576db60 100644 >--- a/Koha/REST/V1/CirculationRules.pm >+++ b/Koha/REST/V1/CirculationRules.pm >@@ -21,7 +21,6 @@ use Mojo::Base 'Mojolicious::Controller'; > > use Koha::CirculationRules; > >- > =head1 API > > =head2 Methods >@@ -36,12 +35,11 @@ sub get_kinds { > my $c = shift->openapi->valid_input or return; > > return $c->render( >- status => 200, >+ status => 200, > openapi => Koha::CirculationRules->rule_kinds, > ); > } > >- > =head3 list_effective_rules > > List all effective rules for the requested patron/item/branch combination >@@ -52,16 +50,31 @@ sub list_effective_rules { > my $c = shift->openapi->valid_input or return; > > my $item_type = $c->param('itemtype'); >- my $library = $c->param('library'); >+ my $branchcode = $c->param('library'); > my $patron_category = $c->param('category'); >- my $rules = $c->param('rules') // [ keys %{Koha::CirculationRules->rule_kinds} ]; >+ my $rules = $c->param('rules') // [ keys %{ Koha::CirculationRules->rule_kinds } ]; >+ >+ if ($item_type) { >+ my $type = Koha::ItemTypes->find($item_type); >+ return $c->render_invalid_parameter_value('/query/itemtype') unless $type; >+ } >+ >+ if ($branchcode) { >+ my $library = Koha::Libraries->find($branchcode); >+ return $c->render_invalid_parameter_value('/query/library') unless $library; >+ } >+ >+ if ($patron_category) { >+ my $category = Koha::Patron::Categories->find($patron_category); >+ return $c->render_invalid_parameter_value('/query/category') unless $category; >+ } > > my $effective_rules = Koha::CirculationRules->get_effective_rules( > { > categorycode => $patron_category, > itemtype => $item_type, >- branchcode => $library, >- rules => $rules >+ branchcode => $branchcode, >+ rules => $rules > } > ); > >diff --git a/api/v1/swagger/definitions/circ-rule-kind.yaml b/api/v1/swagger/definitions/circ-rule-kind.yaml >index 3a3a766cc83..f4e82088644 100644 >--- a/api/v1/swagger/definitions/circ-rule-kind.yaml >+++ b/api/v1/swagger/definitions/circ-rule-kind.yaml >@@ -10,6 +10,6 @@ properties: > - branchcode > - categorycode > - itemtype >-additionalProperties: false >+additionalProperties: true > required: > - scope >diff --git a/api/v1/swagger/paths/circulation-rules.yaml b/api/v1/swagger/paths/circulation_rules.yaml >similarity index 82% >rename from api/v1/swagger/paths/circulation-rules.yaml >rename to api/v1/swagger/paths/circulation_rules.yaml >index 742227932d6..98af6454d91 100644 >--- a/api/v1/swagger/paths/circulation-rules.yaml >+++ b/api/v1/swagger/paths/circulation_rules.yaml >@@ -1,20 +1,48 @@ > --- >-/circulation-rules/kinds: >+/circulation_rules: > get: >- x-mojo-to: CirculationRules#get_kinds >- operationId: getCirculationRuleKinds >+ x-mojo-to: CirculationRules#list_effective_rules >+ operationId: listCirculationRules > tags: > - circulation_rules >- summary: Get circulation rules kinds >+ summary: Get circulation rules for this item/library/patron combination > produces: > - application/json >+ parameters: >+ - name: itemtype >+ in: query >+ description: The itemtype >+ required: false >+ type: string >+ - name: library >+ in: query >+ description: The library code >+ required: false >+ type: string >+ - name: category >+ in: query >+ description: The patron category >+ required: false >+ type: string >+ - name: rules >+ in: query >+ description: A comma-separated list of rule kinds >+ required: false >+ type: array >+ items: >+ type: string >+ collectionFormat: csv > responses: > "200": >- description: A map of rule kind information >+ description: A list of rules for this itemtype, library and patron category combination > schema: > type: object > additionalProperties: >- $ref: "../swagger.yaml#/definitions/circ-rule-kind" >+ type: [ 'string', 'integer' ] >+ "400": >+ description: Bad request >+ schema: >+ $ref: "../swagger.yaml#/definitions/error" > "403": > description: Access forbidden > schema: >@@ -30,43 +58,25 @@ > description: Under maintenance > schema: > $ref: "../swagger.yaml#/definitions/error" >-/circulation-rules/{itemtype}/{library}/{category}: >+ x-koha-authorization: >+ permissions: >+ - circulate: circulate_remaining_permissions >+/circulation_rules/kinds: > get: >- x-mojo-to: CirculationRules#list_effective_rules >- operationId: listCirculationRules >+ x-mojo-to: CirculationRules#get_kinds >+ operationId: getCirculationRuleKinds > tags: > - circulation_rules >- summary: Get circulation rules for this item/library/patron combination >+ summary: Get circulation rules kinds > produces: > - application/json >- parameters: >- - name: itemtype >- in: path >- description: The itemtype >- required: true >- type: string >- - name: library >- in: path >- description: The library code >- required: true >- type: string >- - name: category >- in: path >- description: The patron category >- required: true >- type: string >- - name: rules >- in: query >- description: A comma-separated list of rule kinds >- type: array >- items: >- type: string >- collectionFormat: csv > responses: > "200": >- description: A list of rules for this itemtype, library and patron category combination >+ description: A map of rule kind information > schema: > type: object >+ additionalProperties: >+ $ref: "../swagger.yaml#/definitions/circ-rule-kind" > "403": > description: Access forbidden > schema: >@@ -85,3 +95,4 @@ > x-koha-authorization: > permissions: > - circulate: circulate_remaining_permissions >+ >diff --git a/api/v1/swagger/swagger.yaml b/api/v1/swagger/swagger.yaml >index 812287bfb63..082a8eb3968 100644 >--- a/api/v1/swagger/swagger.yaml >+++ b/api/v1/swagger/swagger.yaml >@@ -279,10 +279,10 @@ paths: > $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewal" > "/checkouts/availability": > $ref: "./paths/checkouts.yaml#/~1checkouts~1availability" >+ /circulation-rules: >+ $ref: ./paths/circulation_rules.yaml#/~1circulation_rules > /circulation-rules/kinds: >- $ref: ./paths/circulation-rules.yaml#/~1circulation-rules~1kinds >- /circulation-rules/{itemtype}/{library}/{category}: >- $ref: ./paths/circulation-rules.yaml#/~1circulation-rules~1{itemtype}~1{library}~1{category} >+ $ref: ./paths/circulation_rules.yaml#/~1circulation_rules~1kinds > /cities: > $ref: ./paths/cities.yaml#/~1cities > "/cities/{city_id}": >-- >2.45.2
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 36641
:
165086
|
167937
|
167938
|
167946
|
167947
|
168018
|
168019
|
168020
|
168023
|
168024
|
168025
|
168365
|
168366
|
168367
|
168368
|
168369
|
168370
|
168378
|
168379
|
168395
|
168396
|
168397
|
168398
|
168399
|
168400
|
168401
|
168841
|
168874
|
168875
|
168876
|
168877
|
168878
|
168879
|
168880
|
168881
|
168882
|
168883
|
168884
|
168905
|
168906
|
168907
|
168908
|
168909
|
168910
|
168911
|
168912
|
168913
|
168914
|
168915
|
168916
|
168926
|
168927
|
168928
|
168929
|
168930
|
168931
|
168932
|
168933
|
168934
|
168935
|
168936
|
168937
|
168938
|
168940
|
169013
|
169014
|
169015
|
169016
|
169017
|
169018
|
169019
|
169020
|
169021
|
169022
|
169023
|
169024
|
169025
|
169026