From d1e7741d5221db2976455417cc3eb4da67fc48cd Mon Sep 17 00:00:00 2001
From: Hauschel Fred <naturzukunft@hauschel.de>
Date: Thu, 4 Jun 2020 16:30:29 +0200
Subject: [PATCH] first shot fairSyncApi.yml

---
 specification/fairSyncApi.yml | 215 ++++++++++++++++++++++++++++++++++
 1 file changed, 215 insertions(+)

diff --git a/specification/fairSyncApi.yml b/specification/fairSyncApi.yml
index e69de29..93c7621 100644
--- a/specification/fairSyncApi.yml
+++ b/specification/fairSyncApi.yml
@@ -0,0 +1,215 @@
+openapi: 3.0.2
+info:
+  title: GoodDB API
+  version: 0.1.8
+  contact:
+    name: GoodDB Consortium
+    url: 'https://github.com/goodmap'
+  license:
+    name: AGPLv3
+    url: 'https://github.com/goodmap/gooddb-backend/blob/master/LICENSE'
+servers:
+  - url: 'https://api.gooddb.io/v1/'
+    description: Public production server
+  - url: 'https://api-dev.gooddb.io/v1/'
+    description: Public unstable development server
+security:
+  - basicAuth: []
+  - bearerAuth: []
+paths:
+  /places:
+    get:
+      summary: Search for places
+      tags:
+        - Places
+      parameters:
+        - $ref: '#/components/parameters/BoundingBox'
+      responses:
+        '200':
+          description: List of places that match the passed search criterie
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/Place'
+
+components:
+  securitySchemes:
+    basicAuth:
+      type: http
+      scheme: basic
+    bearerAuth:
+      type: http
+      scheme: bearer
+      bearerFormat: JWT
+  schemas:
+    Place:
+      required:
+        - address
+        - contact
+        - coordinates
+        - language
+        - license
+        - placeType
+        - source
+        - status
+        - title
+      properties:
+        _id:
+          type: string
+          readOnly: true
+          description: Please use URL to original resource
+          example: 'https://kartevonmorgen.org/#/?entry=e58b14c1aa4e446bb1700b03dcac3069'
+        version:
+          type: integer
+        createdAt:
+          $ref: '#/components/schemas/DateTime'
+        language:
+          $ref: '#/components/schemas/Language'
+        title:
+          type: string
+        description:
+          type: string
+        placeType:
+          type: string
+          enum:
+            - Accomodation
+            - Company
+            - Food
+            - Group
+            - Initiative
+            - Organization
+            - Project
+            - Public Infrastructure
+            - Store
+        placeCategory:
+          description: Depending on chosen placeType (e.g. placeType "Food" > category "Restaurant")
+          type: string
+        images:
+          type: array
+          items:
+            $ref: '#/components/schemas/Image'
+        logo:
+          $ref: '#/components/schemas/Image'
+        coordinates:
+          $ref: '#/components/schemas/Coordinates'
+        address:
+          $ref: '#/components/schemas/Address'
+        contact:
+          $ref: '#/components/schemas/Contact'
+        references:
+          type: array
+          items:
+            $ref: '#/components/schemas/Place'
+        tags:
+          type: array
+          items:
+            type: string
+        rating:
+          type: number
+          format: float
+          description: |
+            contains the place’s rating, from 1.0 to 5.0, based on aggregated user reviews.
+        openingHours:
+          type: object
+          description: |
+            Check Google Place definition: https://developers.google.com/places/web-service/details
+            Monday open from 8-12am and 1-5pm:
+            [
+              {
+                open: [0, "0800"] // 0- Monday, ...6- Sunday
+                close: [0, "1200"]
+              },
+              {
+                open: [0, "1300"]
+                close: [0, "1700"]
+              },
+              ...
+            ]
+            Always open
+            [
+              { open: [0, "0000"] }
+            ]
+          required:
+            - periods
+          properties:
+            description:
+              type: string
+            periods:
+              type: array
+              items:
+                type: object
+                properties:
+                  open:
+                    type: array
+                    items:
+                      oneOf:
+                        - type: number
+                        - type: string
+                  close:
+                    type: array
+                    items:
+                      oneOf:
+                        - type: number
+                        - type: string
+        license:
+          type: string
+        priceLevel:
+          type: number
+          description: |
+            0 — Free
+            1 — Inexpensive
+            2 — Moderate
+            3 — Expensive
+            4 — Very Expensive
+        socialMedia:
+          $ref: '#/components/schemas/SocialMedia'
+        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:
+          $ref: '#/components/schemas/PublicationStatus'
+        sustainability:
+          type: object
+          nullable: true
+          properties:
+            firstRatedAt:
+              $ref: '#/components/schemas/DateTime'
+            updatedAt:
+              $ref: '#/components/schemas/DateTime'
+            rating:
+              type: string
+              enum:
+                - unclear
+                - not sustainable
+                - sustainable
+                - very sustainable
+        updatedBy:
+          type: string
+          description: User id
+        createdBy:
+          type: string
+          description: User id
+        additionalProperties:
+          type: object
+          description: Additional platform specific options
+          properties:
+            future:
+              type: object
+              properties:
+                isPartner:
+                  type: boolean
+                  description: Does the place hold an active future partnership?
-- 
GitLab