From d26a7fb7ded2072199551ca77c1ab8e5a87d870f Mon Sep 17 00:00:00 2001
From: naturzukunft <naturzukunft@hauschel.de>
Date: Tue, 9 Jun 2020 13:34:07 +0200
Subject: [PATCH] As discussed in the meeting today

---
 specification/fairSyncApi.yml | 183 ++++++++++++++++++++--------------
 1 file changed, 107 insertions(+), 76 deletions(-)

diff --git a/specification/fairSyncApi.yml b/specification/fairSyncApi.yml
index 0bc0f78..973ffa2 100644
--- a/specification/fairSyncApi.yml
+++ b/specification/fairSyncApi.yml
@@ -1,7 +1,7 @@
 openapi: 3.0.3
 info:
-  title: FairSync API Organisations/Places
-  description: FairSync API for synchronizing Organisations/Places between maps and platforms. See also https://nlnet.nl/project/FairSync
+  title: FairSync API PointOfInterest
+  description: FairSync API for synchronizing PointOfInterest between maps and platforms. See also https://nlnet.nl/project/FairSync
   version: 0.0.1
   contact:
     name: FairSync API
@@ -13,9 +13,9 @@ security:
   - basicAuth: []
   - bearerAuth: []
 paths:
-  /places:
+  /poi:
     get:
-      summary: Search for places
+      summary: Search for POIs
       tags:
         - Places
       parameters:
@@ -91,56 +91,76 @@ components:
           type: string
           description: "Country code according to ISO 3166-1 Alpha-2"
     Contact:
+      type: object
+      properties:
+        emailaddress:
+          $ref: "#/components/schemas/Emailaddress"
+        phoneNumber:          
+          $ref: "#/components/schemas/PhoneNumber"
+        website:
+          $ref: "#/components/schemas/Website"
+    Emailaddress:
       type: object
       required:
-        - emailAddresses
+        - email
       properties:
-        emailAddresses:
-          type: array
-          items:
-            type: object
-            required:
-              - primary
-              - email
-            properties:
-              primary:
-                type: boolean
-              description:
-                type: string
-              email:
-                type: string
-                format: email
-        phoneNumbers:
-          type: array
-          items:
-            type: object
-            required:
-              - primary
-              - phone
-            properties:
-              primary:
-                type: boolean
-              description:
-                type: string
-              phone:
-                type: string
-                format: phone
-        websites:
-          type: array
-          items:
-            type: object
-            required:
-              - primary
-              - url
-            properties:
-              primary:
-                type: boolean
-              description:
-                type: string
-              url:
-                type: string
-                format: url
-    Place:
+        description:
+          type: string
+        email:
+          type: string
+          format: email
+    PhoneNumber:
+      type: object
+      required:
+        - phone
+      properties:
+        description:
+          type: string
+        phone:
+          type: string
+          format: phone
+    Website:
+      type: object
+      required:
+        - url
+      properties:
+        description:
+          type: string
+        url:
+          type: string
+          format: url
+    Owner:
+      type: object
+      description: The owner of a POI. This is not a plattform, its more a person or a organisation, that is responsible for a concrete entry. 
+      required:
+        - contacturl
+      properties:
+        contact:
+          $ref: '#/components/schemas/Contact'
+    Plattform:
+      type: object
+      description: The plattform that owns a POI. 
+      required:
+        - url
+      properties:
+        url:
+          type: string
+          format: url
+    VerifiedTag:
+      type: object
+      description: Tags that are verified by the maintainer (a.k.a. plattform). Some platforms have service employees who validate entries and check whether tags have been allocated correctly. 
+      required:
+        - url
+      properties:
+        tag:
+          type: string
+        verified:
+          type: string
+          enum: [verified, rejected]
+        verifiedBy:
+          $ref: '#/components/schemas/Contact'
+
+    PointOfInterest:
       required:
         - address
         - contact
@@ -148,7 +168,6 @@ components:
         - language
         - license
         - source
-#        - status
         - title
       properties:
         id:
@@ -158,10 +177,26 @@ components:
           example: 'https://kartevonmorgen.org/#/?entry=e58b14c1aa4e446bb1700b03dcac3069'
         version:
           type: integer
-        createdAt:
-          $ref: '#/components/schemas/DateTime'
         language:
           $ref: '#/components/schemas/Language'
+        createdAt:
+          $ref: '#/components/schemas/DateTime'
+        deleted:
+          type: boolean
+          description: If true, this POI was deleted on the plattform you requested POIs
+        license:
+          type: string
+        source:
+          type: object
+          description: Origin of the dataset
+          required:
+            - providerId
+            - entryId
+          properties:
+            owner:
+              $ref: '#/components/schemas/Owner'
+            plattform:
+              $ref: '#/components/schemas/Plattform'
         title:
           type: string
         description:
@@ -170,6 +205,10 @@ components:
           type: array
           items:
             type: string
+        verifiedTags:
+          type: array
+          items:
+            $ref: '#/components/schemas/VerifiedTag'
         images:
           type: array
           items:
@@ -184,8 +223,11 @@ components:
         address:
           # This is the Place adress. It may be the same as the legalAddress. This address is mandatory.
           $ref: '#/components/schemas/Address'
-        contact:
-          $ref: '#/components/schemas/Contact'
+        contacts:
+          type: array
+          items:
+            $ref: '#/components/schemas/Contact'
+          
         openingHours:
           type: object
           description: |
@@ -228,26 +270,15 @@ components:
                       oneOf:
                         - type: number
                         - type: string
-        license:
-          type: string
-        source:
-          type: object
-          description: Origin of the dataset
-          required:
-            - providerId
-            - entryId
-          properties:
-            providerId:
-              type: string
-            entryId:
-              type: string
-              description: Original id of the entry
-            url:
-              type: string
-              format: url
-        #status:
-          #To be discussed. Fredy is not happy with providing a kind of process!
-          #$ref: '#/components/schemas/PublicationStatus'
+        additionalProperties:
+          type: array
+          items:
+            type: object
+            properties:
+              key:
+                type: string
+              value:
+                type: string    
   parameters:
     BoundingBox:
       name: boundingBox
-- 
GitLab