Bug 22615: Add /ill_backends endpoint
authorJosef Moravec <josef.moravec@gmail.com>
Mon, 1 Apr 2019 15:08:26 +0000 (15:08 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Thu, 5 Mar 2020 13:03:32 +0000 (13:03 +0000)
Signed-off-by: Andrew Isherwood <andrew.isherwood@ptfs-europe.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Koha/REST/V1/Illbackends.pm [new file with mode: 0644]
api/v1/swagger/definitions.json
api/v1/swagger/definitions/ill_backend.json [new file with mode: 0644]
api/v1/swagger/definitions/ill_backends.json [new file with mode: 0644]
api/v1/swagger/paths.json
api/v1/swagger/paths/ill_backends.json [new file with mode: 0644]

diff --git a/Koha/REST/V1/Illbackends.pm b/Koha/REST/V1/Illbackends.pm
new file mode 100644 (file)
index 0000000..01cdd9e
--- /dev/null
@@ -0,0 +1,54 @@
+package Koha::REST::V1::Illbackends;
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use Modern::Perl;
+
+use Mojo::Base 'Mojolicious::Controller';
+
+use Koha::Illrequest::Config;
+use Koha::Illrequests;
+
+=head1 NAME
+
+Koha::REST::V1::Illbackends
+
+=head2 Operations
+
+=head3 list
+
+Return a list of available ILL backends and its capabilities
+
+=cut
+
+sub list {
+    my $c = shift->openapi->valid_input;
+
+    my $config = Koha::Illrequest::Config->new;
+    my $backends = $config->available_backends;
+
+    my @data;
+    foreach $b ( @$backends ) {
+        my $backend = Koha::Illrequest->new->load_backend( $b );
+        push @data, {
+            ill_backend_id => $b,
+            capabilities => $backend->capabilities,
+        };
+    }
+    return $c->render( status => 200, openapi => \@data );
+}
+
+1;
index a27fa0d..2676538 100644 (file)
@@ -32,6 +32,9 @@
   "holds": {
     "$ref": "definitions/holds.json"
   },
+  "ill_backends": {
+    "$ref": "definitions/ill_backends.json"
+  },
   "library": {
     "$ref": "definitions/library.json"
   },
diff --git a/api/v1/swagger/definitions/ill_backend.json b/api/v1/swagger/definitions/ill_backend.json
new file mode 100644 (file)
index 0000000..f67dc47
--- /dev/null
@@ -0,0 +1,13 @@
+{
+  "type": "object",
+  "properties": {
+    "ill_backend_id": {
+      "type": "string",
+      "description": "Internal ILL backend identifier"
+    },
+    "capabilities": {
+      "type": "object",
+      "description": "List of capabilities"
+    }
+  }
+}
diff --git a/api/v1/swagger/definitions/ill_backends.json b/api/v1/swagger/definitions/ill_backends.json
new file mode 100644 (file)
index 0000000..fc68c50
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "type": "array",
+  "items": {
+    "$ref": "ill_backend.json"
+  }
+}
index ed9ed06..c4a16f8 100644 (file)
@@ -83,6 +83,9 @@
   "/patrons/{patron_id}/password": {
     "$ref": "paths/patrons_password.json#/~1patrons~1{patron_id}~1password"
   },
+  "/ill_backends": {
+    "$ref": "paths/ill_backends.json#/~1ill_backends"
+  },
   "/illrequests": {
     "$ref": "paths/illrequests.json#/~1illrequests"
   },
diff --git a/api/v1/swagger/paths/ill_backends.json b/api/v1/swagger/paths/ill_backends.json
new file mode 100644 (file)
index 0000000..a14c3d6
--- /dev/null
@@ -0,0 +1,56 @@
+{
+    "/ill_backends": {
+        "get": {
+            "x-mojo-to": "Illbackends#list",
+            "operationId": "listIllbackends",
+            "tags": ["illbackends"],
+            "parameters": [],
+            "produces": [
+                "application/json"
+            ],
+            "responses": {
+                "200": {
+                    "description": "A list of ILL backends",
+                    "schema": {
+                        "$ref": "../definitions.json#/ill_backends"
+                    }
+                },
+                "401": {
+                  "description": "Authentication required",
+                  "schema": {
+                    "$ref": "../definitions.json#/error"
+                  }
+                },
+                "403": {
+                  "description": "Access forbidden",
+                  "schema": {
+                    "$ref": "../definitions.json#/error"
+                  }
+                },
+                "404": {
+                  "description": "ILL backends not found",
+                  "schema": {
+                    "$ref": "../definitions.json#/error"
+                  }
+                },
+                "500": {
+                  "description": "Internal server error",
+                  "schema": {
+                    "$ref": "../definitions.json#/error"
+                  }
+                },
+                "503": {
+                  "description": "Under maintenance",
+                  "schema": {
+                    "$ref": "../definitions.json#/error"
+                  }
+                }
+            },
+            "x-koha-authorization": {
+                "permissions": {
+                    "ill": "1"
+                }
+            }
+        }
+    }
+}