openapi: 3.0.3
info:
  title: Command and Control Service
  description: This service s responsible for controlling and handling information
    about IoT devices in the Birbnetes system.
  contact:
    email: tormakristof@tormakristof.eu
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  version: 1.0.0
servers:
- url: https://birb.k8s.kmlabz.com
tags:
- name: cnc
  description: Command and Control Service interaction
paths:
  /devices:
    get:
      tags:
      - cnc
      summary: Get all device info
      operationId: getall
      responses:
        200:
          description: Array of devices
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOfDevices'
        404:
          description: No device found
          content: {}
  /devices/offline:
    post:
      tags:
      - cnc
      summary: Shut down all devices
      operationId: offlineall
      responses:
        200:
          description: Message sent
          content: {}
        500:
          description: Message sending unsuccessful
          content: {}
  /devices/online:
    post:
      tags:
      - cnc
      summary: Bring all devices online
      operationId: onlineall
      responses:
        200:
          description: Message sent
          content: {}
        500:
          description: Message sending unsuccessful
          content: {}
  /devices/{deviceID}:
    get:
      tags:
      - cnc
      summary: Get all device info
      operationId: getdevice
      parameters:
      - name: deviceID
        in: path
        description: ID of device to query
        required: true
        schema:
          type: string
          format: uuid
      responses:
        200:
          description: Information about a particular device
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Device'
        404:
          description: Device not found
          content: {}
  /devices/{deviceID}/offline:
    post:
      tags:
      - cnc
      summary: Shut down device
      operationId: offlinedevice
      parameters:
      - name: deviceID
        in: path
        description: ID of device to shut down
        required: true
        schema:
          type: string
          format: uuid
      responses:
        200:
          description: Message sent
          content: {}
        500:
          description: Message sending unsuccessful
          content: {}
  /devices/{deviceID}/online:
    post:
      tags:
      - cnc
      summary: Bring device online
      operationId: onlinedevice
      parameters:
      - name: deviceID
        in: path
        description: ID of device to bring online
        required: true
        schema:
          type: string
          format: uuid
      responses:
        200:
          description: Message sent
          content: {}
        500:
          description: Message sending unsuccessful
          content: {}
  /devices/{deviceID}/{sensorID}:
    get:
      tags:
      - cnc
      summary: Get info about a particular device's sensor
      operationId: getsensor
      parameters:
      - name: deviceID
        in: path
        description: ID of device to query
        required: true
        schema:
          type: string
          format: uuid
      - name: sensorID
        in: path
        description: ID of sensor to query
        required: true
        schema:
          type: string
          format: uuid
      responses:
        200:
          description: Information about a sensor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Sensor'
        404:
          description: Device or sensor not found
          content: {}
  /devices/{deviceID}/{sensorID}/offline:
    post:
      tags:
      - cnc
      summary: Shut down sensor
      operationId: offlinesensor
      parameters:
      - name: deviceID
        in: path
        description: ID of device to query
        required: true
        schema:
          type: string
          format: uuid
      - name: sensorID
        in: path
        description: ID of sensor to query
        required: true
        schema:
          type: string
          format: uuid
      responses:
        200:
          description: Message sent
          content: {}
        500:
          description: Message sending unsuccessful
          content: {}
  /devices/{deviceID}/{sensorID}/online:
    post:
      tags:
      - cnc
      summary: Bring sensor online
      operationId: onlinesensor
      parameters:
      - name: deviceID
        in: path
        description: ID of device to query
        required: true
        schema:
          type: string
          format: uuid
      - name: sensorID
        in: path
        description: ID of sensor to query
        required: true
        schema:
          type: string
          format: uuid
      responses:
        200:
          description: Message sent
          content: {}
        500:
          description: Message sending unsuccessful
          content: {}
components:
  schemas:
    ListOfDevices:
      type: array
      items:
        $ref: '#/components/schemas/Device'
    Device:
      required:
      - id
      - sensors
      - status
      - url
      - coordinates
      type: object
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
          - online
          - error
          - offline
        url:
          type: string
          format: url
        coordinates:
          required:
          - latitude
          - longitude
          type: object
          properties:
            latitude:
              type: number
              format: double
            longitude:
              type: number
              format: double
        sensors:
          $ref: '#/components/schemas/ArrayofSensors'
    ArrayofSensors:
      type: array
      items:
        $ref: '#/components/schemas/Sensor'
    Sensor:
      required:
      - id
      - status
      type: object
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
          - online
          - unknown
          - offline