swagger: "2.0"
info:
  title: Mainflux reader service
  description: HTTP API for reading messages.
  version: "1.0.0"
consumes:
  - "application/json"
produces:
  - "application/json"
paths:
  /channels/{chanId}/messages:
    get:
      summary: Retrieves messages sent to single channel
      description: |
        Retrieves a list of messages sent to specific channel. Due to
        performance concerns, data is retrieved in subsets. The API readers must
        ensure that the entire dataset is consumed either by making subsequent
        requests, or by increasing the subset size of the initial request.
      tags:
        - messages
      parameters:
        - $ref: "#/parameters/Authorization"
        - $ref: "#/parameters/Limit"
        - $ref: "#/parameters/Offset"
        - $ref: "#/parameters/ChanId"
      responses:
        200:
          description: Data retrieved.
          schema:
            $ref: "#/definitions/MessagesPage"
        400:
          description: Failed due to malformed query parameters.
        403:
          description: Missing or invalid access token provided.
        500:
          $ref: "#/responses/ServiceError"

responses:
  ServiceError:
    description: Unexpected server-side error occured.

definitions:
  MessagePage:
    type: object
    properties:
      total:
        type: number
        description: Total number of items that are present on the system.
      offset:
        type: number
        description: Number of items that were skipped during retrieval.
      limit:
        type: number
        description: Size of the subset that was retrieved.
      messages:
        type: array
        minItems: 0
        uniqueItems: true
        items:
          type: object
          properties:
            channel:
              type: integer
              description: Unique channel id.
            publisher:
              type: integer
              description: Unique publisher id.
            protocol:
              type: string
              description: Protocol name.
            name:
              type: string
              description: Measured parameter name.
            unit:
              type: string
              description: Value unit.
            value:
              type: number
              description: Measured value in number.
            stringValue:
              type: string
              description: Measured value in string format.
            boolValue:
              type: boolean
              description: Measured value in boolean format.
            dataValue:
              type: string
              description: Measured value in binary format.
            valueSum:
              type: number
              description: Sum value.
            time:
              type: number
              description: Time of measurement.
            updateTime:
              type: number
              description: Time of updating measurement.

parameters:
  Authorization:
    name: Authorization
    description: Thing access token.
    in: header
    type: string
    required: true
  ChanId:
    name: chanId
    description: Unique channel identifier.
    in: path
    type: integer
    minimum: 1
    required: true
  Limit:
    name: limit
    description: Size of the subset to retrieve.
    in: query
    type: integer
    default: 10
    maximum: 100
    minimum: 1
    required: false
  Offset:
    name: offset
    description: Number of items to skip during retrieval.
    in: query
    type: integer
    default: 0
    minimum: 0
    required: false
