From 7c6853e17452799577f5295bb70aca63942a1ed6 Mon Sep 17 00:00:00 2001
From: Tomas Cohen Arazi <tomascohen@theke.io>
Date: Thu, 4 Mar 2021 06:45:47 -0300
Subject: [PATCH] Bug 27855: Add 'extended_attributes' embedding to the spec

This patch just adds:
- The optional 'extended_attribute' attribute to the patron object
  OpenAPI definition. It consists of an array of extended_attribute
  objects.
- Add the x-koha-embed: [ 'extended_attributes' ] definition on the GET
  routes for patrons, allowing immedite availability of the
  'extended_attributes' embedding feature.

To test:
1. Apply this patchset
2. Restart Plack
3. Have some known patron_id/borrowernumber that has some extended
   attributes ('Patron attributes' on the UI).
4. Enable Basic authentication
5. Assuming the known patron_id is 1, point your favourite REST tool to http://kohadev-intra.myDNSname.org:8081/api/v1/patrons/1
   e.g.: if your user/pass is koha/koha
   curl --location --request GET 'http://kohadev-intra.myDNSname.org:8081/api/v1/patrons/1' \
        --header 'Content-Type: application/json' \
        --header 'Authorization: Basic a29oYTprb2hh'
=> SUCCESS: You get the patron object correctly, no extended_attributes
6. Repeat 5, adding the x-koha-embed header like this:
   curl --location --request GET 'http://kohadev-intra.myDNSname.org:8081/api/v1/patrons/1' \
        --header 'Content-Type: application/json' \
        --header 'x-koha-embed: extended_attributes' \
        --header 'Authorization: Basic a29oYTprb2hh'
=> SUCCESS: You get the patron, with the extended attributes inside!
7. Sign off :-D
---
 api/v1/swagger/definitions/patron.json |  7 +++++++
 api/v1/swagger/paths/patrons.json      | 10 ++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/api/v1/swagger/definitions/patron.json b/api/v1/swagger/definitions/patron.json
index 60488f5a4b9..2b4c9ceea25 100644
--- a/api/v1/swagger/definitions/patron.json
+++ b/api/v1/swagger/definitions/patron.json
@@ -281,6 +281,13 @@
       "type": "boolean",
       "readOnly": true,
       "description": "If the patron has been anonymized"
+    },
+    "extended_attributes": {
+      "type": "array",
+      "description": "patron's extended attributes",
+      "items": {
+        "$ref": "extended_attribute.json"
+      }
     }
   },
   "additionalProperties": false,
diff --git a/api/v1/swagger/paths/patrons.json b/api/v1/swagger/paths/patrons.json
index 3e4e7739a10..23d143b9180 100644
--- a/api/v1/swagger/paths/patrons.json
+++ b/api/v1/swagger/paths/patrons.json
@@ -451,7 +451,10 @@
         "permissions": {
           "borrowers": "1"
         }
-      }
+      },
+      "x-koha-embed": [
+        "extended_attributes"
+      ]
     },
     "post": {
       "x-mojo-to": "Patrons#add",
@@ -580,7 +583,10 @@
         "permissions": {
           "borrowers": "edit_borrowers"
         }
-      }
+      },
+      "x-koha-embed": [
+        "extended_attributes"
+      ]
     },
     "put": {
       "x-mojo-to": "Patrons#update",
-- 
2.30.1