swagger: '2.0'
info:
  title: Ows-transcoding API specifications
  version: 0.0.1
host: qa-ows-transcoding.theorchard.io
basePath: /
schemes:
  - https
paths:
  /hello/:
    get:
      responses:
        '200':
          description: 200 OK
      description: Check the health of the application.
  /transcoding-job/{transcoding_job_id}/status:
    post:
      parameters:
        - in: path
          name: transcoding_job_id
          required: true
          type: integer
          description: id of transcoding job.
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/StatusPostRequestBody'
      responses:
        '200':
          description: 200 OK
          schema:
            properties:
              status:
                type: string
            required:
              - status
            type: object
            example:
              {
                "status": "ok",
              }
        '400':
          description: 400 Bad request
          schema:
            properties:
              code:
                type: string
              description:
                type: string
              status:
                type: string
            required:
              - description
              - status
              - code
            type: object
            example:
              {
                "status": "Bad request",
                "code": "bad_request",
                "description": ""
              }
        '404':
          description: 404 Not found
          schema:
            example:
              {
                "code": "not_found_error",
                "message": "Transcoding order entry not found"
              }
        '500':
          description: 500 Internal server error
          schema:
            properties:
              code:
                type: string
              message:
                type: string
            required:
              - message
              - code
            type: object
            example:
              {
                "message": "Could not connect to MySQL",
                "code": "server_error"
              }
  /transcoding:
    post:
      parameters:
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/TranscodingPostRequestBody'
      responses:
        '200':
          description: 200 OK
          schema:
            properties:
              status:
                type: string
              transcoding_order_id:
                type: string
            required:
              - status
              - transcoding_order_id
            type: object
            example:
              {
                "status": "ok",
                "transcoding_order_id": 1
              }
        '400':
          description: 400 Bad request
          schema:
            properties:
              code:
                type: string
              description:
                type: string
              status:
                type: string
            required:
              - description
              - status
              - code
            type: object
            example:
              {
                "status": "Bad request",
                "code": "bad_request",
                "description": "Invalid input value(s): bit_rate, output_type."
              }
        '500':
          description: 500 Internal server error
          schema:
            properties:
              code:
                type: string
              message:
                type: string
            required:
              - message
              - code
            type: object
            example:
              {
                "message": "Could not connect to MySQL",
                "code": "server_error"
              }
  /transcoding/preset/{preset_alias}:
    post:
      parameters:
        - in: path
          name: preset_alias
          required: true
          type: string
          description: The alias for preset.
        - in: body
          name: body
          required: true
          schema:
            $ref: '#/definitions/TranscodingByPresetPostRequestBody'
      responses:
        '200':
          description: 200 OK
          schema:
            properties:
              status:
                type: string
              transcoding_order_id:
                type: string
            required:
              - status
              - transcoding_order_id
            type: object
            example:
              {
                "status": "ok",
                "transcoding_order_id": 1
              }
        '400':
          description: 400 Bad request
          schema:
            properties:
              code:
                type: string
              description:
                type: string
              status:
                type: string
            required:
              - description
              - status
              - code
            type: object
            example:
              {
                "status": "Bad request",
                "code": "bad_request",
                "description": ""
              }
        '404':
          description: 404 Not found
          schema:
            example:
              {
                "code": "not_found_error",
                "message": "Preset entry not found"
              }
        '500':
          description: 500 Internal server error
          schema:
            properties:
              code:
                type: string
              message:
                type: string
            required:
              - message
              - code
            type: object
            example:
              {
                "message": "Could not connect to MySQL",
                "code": "server_error"
              }
  /transcoding/presets:
    get:
      description: Returns the list of existing transcoding presets.
      responses:
        '200':
          description: 200 OK
          schema:
            $ref: '#/definitions/GetPresetsResponse'
        '400':
          description: 400 Bad request
          schema:
            properties:
              code:
                type: string
              description:
                type: string
              status:
                type: string
            required:
              - description
              - status
              - code
            type: object
            example:
              {
                "status": "Bad request",
                "code": "bad_request",
                "description": "Invalid input value(s): bit_rate, output_type."
              }
        '500':
          description: 500 Internal server error
          schema:
            properties:
              code:
                type: string
              message:
                type: string
            required:
              - message
              - code
            type: object
            example:
              {
                "message": "Could not connect to MySQL",
                "code": "server_error"
              }
  /transcoding-order/{transcoding_order_id}/status:
    get:
      parameters:
        - in: path
          name: transcoding_order_id
          required: true
          type: string
          description: The alias for preset.
      description: Returns the list of existing transcoding presets.
      responses:
        '200':
          description: 200 OK
          schema:
            $ref: '#/definitions/GetTranscodingOrderStatusResponse'
        '400':
          description: 400 Bad request
          schema:
            properties:
              code:
                type: string
              description:
                type: string
              status:
                type: string
            required:
              - description
              - status
              - code
            type: object
            example:
              {
                "status": "Bad request",
                "code": "bad_request",
                "description": "Invalid input value(s): bit_rate, output_type."
              }
        '404':
          description: 404 Not found
          schema:
            properties:
              code:
                type: string
              message:
                type: string
            required:
              - message
              - code
            type: object
            example:
              {
                "code": "not_found_error",
                "message": "Transcoding Order entry not found"
              }
        '500':
          description: 500 Internal server error
          schema:
            properties:
              code:
                type: string
              message:
                type: string
            required:
              - message
              - code
            type: object
            example:
              {
                "message": "Could not connect to MySQL",
                "code": "server_error"
              }
  /transcoding-job/{transcoding_job_id}:
    get:
      parameters:
        - in: path
          name: transcoding_job_id
          required: true
          type: string
          description: Transcoding job id.
      description: Return transcoding job entry
      responses:
        '200':
          description: 200 OK
          schema:
            $ref: '#/definitions/GetTranscodingJobResponse'
        '400':
          description: 400 Bad request
          schema:
            properties:
              code:
                type: string
              description:
                type: string
              status:
                type: string
            required:
              - description
              - status
              - code
            type: object
            example:
              {
                "status": "Bad request",
                "code": "bad_request",
                "description": "Invalid input value: transcoding_job_id."
              }
        '404':
          description: 404 Not found
          schema:
            properties:
              code:
                type: string
              message:
                type: string
            required:
              - message
              - code
            type: object
            example:
              {
                "code": "not_found_error",
                "message": "Transcoding Job entry not found"
              }
        '500':
          description: 500 Internal server error
          schema:
            properties:
              code:
                type: string
              message:
                type: string
            required:
              - message
              - code
            type: object
            example:
              {
                "message": "Could not connect to MySQL",
                "code": "server_error"
              }
definitions:
  GetTranscodingJobResponse:
    type: object
    properties:
      transcoding_job_id:
        type: integer
      transcoding_order_id:
        type: integer
      status:
        type: string
      description:
        type: string
      attempt:
        type: string
      output_bucket:
        type: string
      output_key:
        type: string
      preset_id:
        type: integer
      container:
        type: string
      codec:
        type: string
      sample_rate:
        type: integer
      bit_rate:
        type: integer
      bit_depth:
        type: integer
      channels:
        type: integer
      duration:
        type: integer
    example:
      {
        "transcoding_job_id": 1,
        "transcoding_order_id": 1,
        "status": "requested",
        "description": null,
        "attempt": 3,
        "output_bucket": null,
        "output_key": null,
        "container": "wave",
        "channels": 2,
        "codec": "pcm",
        "sample_rate": 44100,
        "bit_rate": 1411200,
        "bit_depth": 16,
        "preset_id": null,
      }
  StatusPostRequestBody:
    type: object
    properties:
      status:
        type: string
      description:
        type: string
    required:
      - status
      - description
    example:
      {
        "transcoding_order_id": 1,
        "status": "ok",
        "description": "completed"
      }
  GetTranscodingOrderStatusResponse:
    type: object
    properties:
      transcoding_order_id:
        type: integer
      status:
        type: string
        enum:
        - requested
        - completed
        - processing
        - error
      transcoding_jobs:
        type: array
        items:
          type: object
          properties:
            status:
              type: string
            transcoding_job_id:
              type: integer
            description:
              type: string
            duration:
              type: integer
          required:
          - transcoding_job_id
          - status
          - description
    required:
    - transcoding_order_id
    - status
    - transcoding_jobs
    example:
      {
        "transcoding_order_id": 1,
        "status": "processing",
        "transcoding_jobs": [
          {
            'status': 'completed',
            'transcoding_job_id': 10,
            'description': '',
            'duration': 10000
          },
          {
            'status': 'processing',
            'transcoding_job_id': 11,
            'description': '',
            'duration': 11000
          }
        ]
      }
  GetPresetsResponse:
    type: array
    items:
      type: object
      properties:
        preset_id:
          type: integer
        alias:
          type: string
        output_bucket:
          type: integer
        sns_topic:
          type: integer
      required:
        - preset_id
        - alias
        - output_bucket
        - sns_topic
    example:
      [
        {
          "preset_id": 1,
          "alias": "deezer_default",
          "output_bucket": "deezer",
          "sns_topic": null,
        },
        {
          "preset_id": 2,
          "alias": "google_music",
          "output_bucket": null,
          "sns_topic": null,
        },
        {
          "preset_id": 3,
          "alias": "apple_music",
          "output_bucket": "apple_music",
          "sns_topic": null,
        },
        {
          "preset_id": 4,
          "alias": "spotify",
          "output_bucket": "spotify",
          "sns_topic": "spotify-arn",
        },
        {
          "preset_id": 5,
          "alias": "youtube",
          "output_bucket": "youtube",
          "sns_topic": "youtube-arn",
        }
      ]
  TranscodingByPresetPostRequestBody:
    type: object
    properties:
      input:
        properties:
          bucket:
            type: string
          key:
            type: string
        required:
          - bucket
          - key
        type: object
      status_topic_alias:
        type: string
    required:
    - input
    example:
      {
        "input": {
          "bucket": "bucket_name",
          "key": "track.wav"
        },
        "status_topic_alias": "assets_topic"
      }
  TranscodingPostRequestBody:
    type: object
    properties:
      input:
        properties:
          bucket:
            type: string
          key:
            type: string
        required:
          - bucket
          - key
        type: object
      output:
        properties:
          bucket:
            type: string
          transcoding:
            items:
              properties:
                container:
                  type: string
                codec:
                  type: string
                sample_rate:
                  type: integer
                bit_rate:
                  type: integer
                channels:
                  type: integer
              type: object
            type: array
        required:
          - bucket
          - transcoding
        type: object
      status_topic_alias:
        type: string
    required:
    - input
    - output
    example:
      {
        "input": {
          "bucket": "bucket_name",
          "key": "track.wav"
        },
        "output": {
          "bucket": "output_bucket_name",
          "transcoding": [
              {
                "container": "flac",
                "codec": null,
                "sample_rate": 44100
              },
              {
                "container": "WAV",
                "codec": "ACM",
                "sample_rate": 44100,
                "bit_rate": 16,
                "channels": 2
              }
            ]
          },
        "status_topic_alias": "assets_topic"
      }
securityDefinitions: {}
