swagger: "2.0"
info: { version: "", title: "" }

paths:
  /currentuserdata:
    get:
      tags: [ "userdata" ]
      summary: "Get current user data"
      operationId: "currentUserData"
      responses:
        "200":
          description: "successful operation"
          schema: { $ref: "#/definitions/UserDataResponse" }
          examples:
            test: { id: bob, name: "Bob Bad", email: "bob@example.org" }
      security: [ { roles: [ "currentuserdata:read" ] } ]
    put:
      tags: [ "userdata" ]
      summary: "Update current user data"
      operationId: "updateCurrentUserData"
      parameters:
        - { name: "userdata", in: "body", description: "User data object that needs to be added", required: true, schema: { $ref: "#/definitions/UserData" }, x-example: { name: "Bob Bad", email: "bob@example.org" } }
      responses:
        "200":
          description: "successful operation"
          schema: { $ref: "#/definitions/UserDataResponse" }
          examples:
            test: { id: bob, name: "Bob Bad", email: "bob@example.org" }
      security: [ { roles: [ "currentuserdata:write" ] } ]

  /userdata:
    get:
      tags: [ "userdata" ]
      summary: "List userdata"
      operationId: "listUserData"
      responses:
        "200":
          description: "successful operation"
          schema: { type: array, items: { $ref: "#/definitions/UserDataResponse" } }
          examples:
            test:
              - { id: bob, name: "Bob Bad", email: "bob@example.org" }
      security: [ { roles: [ "userdata:read" ] } ]

  /userdata/{id}:
    get:
      tags: [ "userdata" ]
      summary: "Get a single user data"
      operationId: "getUserData"
      parameters:
        - { name: "id", in: "path", description: "User Data ID", required: true, type: string, x-example: "bob" }
      responses:
        "200":
          description: "successful operation"
          schema: { $ref: "#/definitions/UserDataResponse" }
          examples:
            test:
              id: bob
              name: "Bob Bad"
              email: "bob@example.org"
      security: [ { roles: [ "userdata:read" ] } ]
    put:
      tags: [ "userdata" ]
      summary: "Update an existing user data"
      operationId: "updateUserData"
      parameters:
        - { name: "id", in: "path", description: "User Data ID", required: true, type: string, x-example: "bob" }
        - { name: "userdata", in: "body", description: "User data object that needs to be added", required: true, schema: { $ref: "#/definitions/UserData" }, x-example: { name: "Bob Bad", email: "bob@example.org", blocked: false } }
      responses:
        "200":
          description: "successful operation"
          schema: { $ref: "#/definitions/UserDataResponse" }
          examples:
            test: { id: bob, name: "Bob Bad", email: "bob@example.org" }
      security: [ { roles: [ "userdata:write" ] } ]

definitions:
  UserData:
    type: object
    properties:
      name: { type: string, x-example: "Robert Smith" }
      email: { type: string, x-example: "bob@example.org" }
      image: { type: string, x-display: "custom-avatar" }
      timeformat: { title: "Time Format (https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens)", type: string }

  UserDataResponse:
    type: object
    required: [ id ]
    properties:
      id: { type: string }
      name: { type: string, x-example: "Robert Smith" }
      email: { type: string, x-example: "bob@example.org" }
      image: { type: string, x-display: "custom-avatar" }
      timeformat: { title: "Time Format (https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens)", type: string }
