Bugzilla – Attachment 114114 Details for
Bug 17314
Routes to create, list and delete a purchase suggestion
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 17314: Migration from Swagger2 to OpenApi
Bug-17314-Migration-from-Swagger2-to-OpenApi.patch (text/plain), 15.00 KB, created by
Arthur Suzuki
on 2020-12-02 20:53:09 UTC
(
hide
)
Description:
Bug 17314: Migration from Swagger2 to OpenApi
Filename:
MIME Type:
Creator:
Arthur Suzuki
Created:
2020-12-02 20:53:09 UTC
Size:
15.00 KB
patch
obsolete
>From fc12d3d10059aa12c6349bd31351bf4f38be2375 Mon Sep 17 00:00:00 2001 >From: Arthur Suzuki <arthur.suzuki@biblibre.com> >Date: Wed, 29 May 2019 01:50:49 +0200 >Subject: [PATCH] Bug 17314: Migration from Swagger2 to OpenApi > >This patch migrates the original implementation so it uses the new >OpenAPI plugin. >--- > Koha/REST/V1/Suggestions.pm | 103 +++++++++++++---------------- > api/v1/swagger/definitions/suggestion.json | 8 +-- > api/v1/swagger/paths/suggestions.json | 20 +++--- > 3 files changed, 59 insertions(+), 72 deletions(-) > >diff --git a/Koha/REST/V1/Suggestions.pm b/Koha/REST/V1/Suggestions.pm >index 4b771ff25c..fae6aff1a6 100644 >--- a/Koha/REST/V1/Suggestions.pm >+++ b/Koha/REST/V1/Suggestions.pm >@@ -32,11 +32,11 @@ use Koha::Libraries; > use Try::Tiny; > > sub list { >- my ($c, $args, $cb) = @_; >+ my $c = shift->openapi->valid_input or return; > > my $suggestions; > my $filter; >- $args //= {}; >+ my $args = $c->validation->output; > > for my $filter_param ( keys %$args ) { > $filter->{$filter_param} = { LIKE => $args->{$filter_param} . '%' }; >@@ -44,55 +44,54 @@ sub list { > > return try { > $suggestions = Koha::Suggestions->search($filter)->unblessed; >- return $c->$cb( $suggestions, 200 ); >+ return $c->render( status => 200, openapi => $suggestions ); > } > catch { > if ( $_->isa('DBIx::Class::Exception') ) { >- return $c->$cb( { error => $_->{msg} }, 500 ); >+ return $c->render( status => 500, openapi => { error => $_->{msg} } ); > } > else { >- return $c->$cb( >- { error => 'Something went wrong, check the logs.' }, 500 ); >+ return $c->render( status => 500, openapi => { error => 'Something went wrong, check the logs.' } ); > } > }; > } > > sub get { >- my ($c, $args, $cb) = @_; >+ my $c = shift->openapi->valid_input or return; >+ my $args = $c->validation->output; > > my $suggestion = Koha::Suggestions->find($args->{suggestionid}); > unless ($suggestion) { >- return $c->$cb({error => 'Suggestion not found'}, 404); >+ return $c->render( status => 404, openapi => {error => 'Suggestion not found'}); > } > >- return $c->$cb($suggestion->unblessed, 200); >+ return $c->render( status => 200, openapi => $suggestion->unblessed ); > } > > sub add { >- my ( $c, $args, $cb ) = @_; >- >- my $error = _validate_body($c, $args, $cb, 0); >- return $error if $error; >+ my $c = shift->openapi->valid_input or return; >+ my $args = $c->validation->output; > > my $suggestion = Koha::Suggestion->new( $args->{body} ); > > return try { > $suggestion->store; >- return $c->$cb( $suggestion->unblessed, 200 ); >+ return $c->render( status => 200, openapi => $suggestion->unblessed ); > } > catch { > if ( $_->isa('DBIx::Class::Exception') ) { >- return $c->$cb( { error => $_->msg }, 500 ); >+ return $c->render( status => 500, openapi => { error => $_->msg } ); > } > else { >- return $c->$cb( >- { error => 'Something went wrong, check the logs.' }, 500 ); >+ return $c->render( status => 500, openapi => { error => 'Something went wrong, check the logs.' } ); > } >- }; >+ } > } > > sub update { >- my ( $c, $args, $cb ) = @_; >+ my $c = shift->openapi->valid_input or return; >+ >+ my $args = $c->validation->output; > > my $suggestion; > >@@ -109,55 +108,54 @@ sub update { > } > } > >- my $error = _validate_body($c, $args, $cb, 1); >- return $error if $error; >- > $suggestion->set( $body ); > $suggestion->store(); >- return $c->$cb( $suggestion->unblessed, 200 ); >+ return $c->render( status => 200, openapi => $suggestion->unblessed ); > } > catch { > if ( not defined $suggestion ) { >- return $c->$cb( { error => 'Object not found' }, 404 ); >+ return $c->render( status => 404, openapi => { error => 'Object not found' } ); > } > elsif ( $_->isa('Koha::Exceptions::Object') ) { >- return $c->$cb( { error => $_->message }, 500 ); >+ return $c->render( status => 500, openapi => { error => $_->message } ); > } > else { >- return $c->$cb( >- { error => 'Something went wrong, check the logs.' }, 500 ); >+ return $c->render( status => 500, openapi => { error => 'Something went wrong, check the logs.' } ); > } > }; > > } > > sub delete { >- my ( $c, $args, $cb ) = @_; >+ my $c = shift->openapi->valid_input or return; >+ >+ my $args = $c->validation->output; > > my $suggestion; > > return try { > $suggestion = Koha::Suggestions->find( $args->{suggestionid} ); > $suggestion->delete; >- return $c->$cb( '', 200 ); >+ return $c->render( status => 200, openapi => '' ); > } > catch { > if ( not defined $suggestion ) { >- return $c->$cb( { error => 'Object not found' }, 404 ); >+ return $c->render( status => 404, openapi => { error => 'Object not found' } ); > } > elsif ( $_->isa('DBIx::Class::Exception') ) { >- return $c->$cb( { error => $_->msg }, 500 ); >+ return $c->render( status => 500, openapi => { error => $_->msg } ); > } > else { >- return $c->$cb( >- { error => 'Something went wrong, check the logs.' }, 500 ); >+ return $c->render( status => 500, openapi => { error => 'Something went wrong, check the logs.' } ); > } > }; > > } > > sub _validate_body { >- my ( $c, $args, $cb, $updating ) = @_; >+ my $c = shift->openapi->valid_input or return; >+ >+ my $args = $c->validation->output; > > my $body = $args->{body}; > my $user = $c->stash('koha.user'); >@@ -177,25 +175,14 @@ sub _validate_body { > foreach my $param ( keys %{ $body } ) { > unless (/^$param$/ ~~ @allowed_fields) { > # Ouch ! Some mandatory field is missing! >- my $verb = $updating ? 'updated ' : 'specified '; >- return $c->$cb({error => 'You ' . $verb . $param . ', but allowed fields are only ' . >- join(', ', @allowed_fields)}, 403); >+ my $verb = 'specified '; >+ return $c->render( status => 403 , openapi => { >+ error => 'You ' . $verb . $param . ', but allowed fields are only ' . join(', ', @allowed_fields)} >+ ); > } > } > } > >- if (not $updating) { >- # Check for missing fields >- my @mandatory_fields = split /,/, C4::Context->preference('OPACSuggestionMandatoryFields'); >- my @missing_fields = (); >- for my $mandatory_field (@mandatory_fields) { >- push(@missing_fields, $mandatory_field) if (not exists $body->{$mandatory_field}); >- } >- >- if ( @missing_fields ) { >- return $c->$cb({error => 'Missing mandatory fields: ' . join(', ', @missing_fields)}, 400); >- } >- } > > # Is suggester anonymous? > my $is_anonymous = not (defined $body->{suggestedby} and >@@ -204,7 +191,7 @@ sub _validate_body { > > # Refuse if are anonymous suggestions disabled > if ( $is_anonymous ) { >- return $c->$cb({error => 'Anonymous suggestions are disabled'}, 403) >+ return $c->render( status => 403, openapi => {error => 'Anonymous suggestions are disabled'} ) > unless C4::Context->preference('AnonSuggestions'); > } > >@@ -213,47 +200,47 @@ sub _validate_body { > if ( $max_open_suggestions gt 0 and not $is_anonymous ) { > my $count = Koha::Suggestions->search({suggestedby => $body->{suggestedby}})->count(); > >- return $c->$cb({error => >- 'You have ' . $count . ' opened suggestions out of ' . $max_open_suggestions}, 403) >+ return $c->render( status => 403 , openapi => {error => >+ 'You have ' . $count . ' opened suggestions out of ' . $max_open_suggestions} ) > if ( $count >= $max_open_suggestions ); > } > > # Check STATUS is valid > if ( exists $body->{STATUS} ) { >- return $c->$cb({error => 'STATUS must be one of ASKED, CHECKED, ACCEPTED, or REJECTED'}, 400) >+ return $c->render( status => 400, openapi => {error => 'STATUS must be one of ASKED, CHECKED, ACCEPTED, or REJECTED'} ) > unless ($body->{STATUS} =~ m/^(ASKED|CHECKED|ACCEPTED|REJECTED)$/); > } > > # Check itemtype is valid > if ( exists $body->{itemtype} ) { > my @item_types = map {$_->unblessed->{itemtype}} Koha::ItemTypes->search; >- return $c->$cb({error => 'itemtype must be one of ' . join(', ', @item_types)}, 400) >+ return $c->render( status => 400 , openapi => {error => 'itemtype must be one of ' . join(', ', @item_types)} ) > unless /^$body->{itemtype}$/ ~~ @item_types; > } > > # Check branchcode is valid > if ( exists $body->{branchcode} ) { > my @branch_codes = map {$_->unblessed->{branchcode}} Koha::Libraries->search; >- return $c->$cb({error => 'branchcode must be one of ' . join(', ', @branch_codes)}, 400) >+ return $c->render( status => 400 , openapi => {error => 'branchcode must be one of ' . join(', ', @branch_codes)} ) > unless /^$body->{branchcode}$/ ~~ @branch_codes; > } > > # Check patron reason is valid > if ( exists $body->{patronreason} ) { > my @authorized_values = map { $_->{authorised_value} } @{ C4::Koha::GetAuthorisedValues('OPAC_SUG') }; >- return $c->$cb({error => 'patronreason must be one of ' . join(', ', @authorized_values)}, 400) >+ return $c->render( status => 400, openapi => {error => 'patronreason must be one of ' . join(', ', @authorized_values)} ) > unless /^$body->{patronreason}$/ ~~ @authorized_values; > } > > # Check suggestedby patron exists > if ( exists $body->{suggestedby} ) { >- return $c->$cb({error => 'suggestedby patron not found'}, 400) >+ return $c->render( status => 400 , openapi => {error => 'suggestedby patron not found'} ) > unless Koha::Patrons->find($body->{suggestedby}); > } > > # Check managedby patron exists > if ( exists $body->{managedby} ) { >- return $c->$cb({error => 'managedby patron not found'}, 400) >+ return $c->render( status => 400 , openapi => {error => 'managedby patron not found'} ) > unless Koha::Patrons->find($body->{managedby}); > } > >diff --git a/api/v1/swagger/definitions/suggestion.json b/api/v1/swagger/definitions/suggestion.json >index 12ff222722..b789d09961 100644 >--- a/api/v1/swagger/definitions/suggestion.json >+++ b/api/v1/swagger/definitions/suggestion.json >@@ -7,7 +7,7 @@ > }, > "suggestedby": { > "type": "string", >- "description": "borrowernumber for the person making the suggestion, foreign key linking to the borrowers table" >+ "description": "patron_id for the person making the suggestion, foreign key linking to the borrowers table" > }, > "suggesteddate": { > "type": "string", >@@ -15,7 +15,7 @@ > }, > "managedby": { > "type": ["string", "null"], >- "description": "borrowernumber for the librarian managing the suggestion, foreign key linking to the borrowers table" >+ "description": "patron_id for the librarian managing the suggestion, foreign key linking to the borrowers table" > }, > "manageddate": { > "type": ["string", "null"], >@@ -23,7 +23,7 @@ > }, > "acceptedby": { > "type": ["string", "null"], >- "description": "borrowernumber for the librarian who accepted the suggestion, foreign key linking to the borrowers table" >+ "description": "patron_id for the librarian who accepted the suggestion, foreign key linking to the borrowers table" > }, > "accepteddate": { > "type": ["string", "null"], >@@ -31,7 +31,7 @@ > }, > "rejectedby": { > "type": ["string", "null"], >- "description": "borrowernumber for the librarian who rejected the suggestion, foreign key linking to the borrowers table" >+ "description": "patron_id for the librarian who rejected the suggestion, foreign key linking to the borrowers table" > }, > "rejecteddate": { > "type": ["string", "null"], >diff --git a/api/v1/swagger/paths/suggestions.json b/api/v1/swagger/paths/suggestions.json >index dfef6cba05..091f5be01b 100644 >--- a/api/v1/swagger/paths/suggestions.json >+++ b/api/v1/swagger/paths/suggestions.json >@@ -1,8 +1,8 @@ > { > "/suggestions": { > "get": { >- "x-mojo-controller": "Koha::REST::V1::Suggestions", >- "operationId": "list", >+ "x-mojo-to": "Suggestions#list", >+ "operationId" : "list", > "tags": ["patrons", "suggestions"], > "parameters": [ > { >@@ -15,25 +15,25 @@ > "name": "suggestedby", > "in": "query", > "type": "integer", >- "description": "borrowernumber for the person making the suggestion, foreign key linking to the borrowers table" >+ "description": "patron_id for the person making the suggestion, foreign key linking to the borrowers table" > }, > { > "name": "managedby", > "in": "query", > "type": "integer", >- "description": "borrowernumber for the librarian managing the suggestion, foreign key linking to the borrowers table" >+ "description": "patron_id for the librarian managing the suggestion, foreign key linking to the borrowers table" > }, > { > "name": "acceptedby", > "in": "query", > "type": "integer", >- "description": "borrowernumber for the librarian who accepted the suggestion, foreign key linking to the borrowers table" >+ "description": "patron_id for the librarian who accepted the suggestion, foreign key linking to the borrowers table" > }, > { > "name": "rejectedby", > "in": "query", > "type": "integer", >- "description": "borrowernumber for the librarian who rejected the suggestion, foreign key linking to the borrowers table" >+ "description": "patron_id for the librarian who rejected the suggestion, foreign key linking to the borrowers table" > }, > { > "name": "STATUS", >@@ -118,7 +118,7 @@ > } > }, > "post": { >- "x-mojo-controller": "Koha::REST::V1::Suggestions", >+ "x-mojo-to": "Suggestions#add", > "operationId": "add", > "tags": ["patrons", "suggestions"], > "parameters": [{ >@@ -169,7 +169,7 @@ > }, > "/suggestions/{suggestionid}": { > "get": { >- "x-mojo-controller": "Koha::REST::V1::Suggestions", >+ "x-mojo-to": "Suggestions#get", > "operationId": "get", > "tags": ["patrons", "suggestions"], > "parameters": [{ >@@ -208,7 +208,7 @@ > } > }, > "put": { >- "x-mojo-controller": "Koha::REST::V1::Suggestions", >+ "x-mojo-to": "Suggestions#update", > "operationId": "update", > "tags": ["patrons", "suggestions"], > "parameters": [{ >@@ -265,7 +265,7 @@ > } > }, > "delete": { >- "x-mojo-controller": "Koha::REST::V1::Suggestions", >+ "x-mojo-to": "Suggestions#delete", > "operationId": "delete", > "tags": ["patrons", "suggestions"], > "parameters": [{ >-- >2.11.0
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 17314
:
58098
|
58100
|
58101
|
58993
|
60133
|
90171
|
90172
|
90176
|
91545
|
91546
|
93761
|
93762
|
93763
|
93764
|
93765
|
108380
|
109972
|
109973
|
109974
|
109975
|
109976
|
109977
|
114113
|
114114
|
114115
|
114116
|
114117
|
114118
|
120111
|
120133
|
120134
|
120135
|
120136
|
125097
|
125098
|
125099
|
125100
|
125101
|
125102
|
125103
|
125104
|
127533
|
127534
|
127535
|
127536