swagger: "2.0"

info:
  version: 1.0.0
  title: API Specifications

schemes:
  - https
consumes:
  - application/json
produces:
  - application/json
host: qa-ows-promo-player.theorchard.io
paths:
  /hello/:
    get:
      summary: Check the health of the application.
      responses:
        200:
          description: 200 OK
          examples:
            application/json: { "status": "ok" }
  /player:
    post:
      summary: Creates a new promo player
      parameters:
        - in: header
          name: Grass-Account-Type
          type: string
        - in: header
          name: Grass-Account-Id
          type: number
        - in: body
          name: data
          description: The data to create a promo player.
          schema:
            type: object
            required:
              - expiration_mode
              - skin
            properties:
              expiration_mode:
                type: string
              skin:
                type: string
      responses:
        200:
          description: 200 OK
          schema:
            $ref: "#/definitions/PromoPlayer"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
  /player/{promo_player_id}:
    put:
      summary: Updates a promo player
      parameters:
        - in: path
          name: promo_player_id
          required: true
          type: number
        - in: header
          name: Grass-Account-Type
          type: string
        - in: header
          name: Grass-Account-Id
          type: number
        - in: body
          name: data
          description: The data to update a promo player.
          schema:
            type: object
            properties:
              expiration_mode:
                type: string
              active:
                type: boolean
              skin:
                type: string
      responses:
        200:
          description: 200 OK
          schema:
            $ref: "#/definitions/PromoPlayer"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        404:
          description: 404 Not Found
          schema:
            $ref: "#/definitions/NotFoundError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
  /player/{promo_player_id}/track/{track_id}:
    post:
      summary: Creates a promo player track
      parameters:
        - in: path
          name: promo_player_id
          required: true
          type: number
        - in: path
          name: track_id
          required: true
          type: number
        - in: header
          name: Grass-Account-Type
          type: string
        - in: header
          name: Grass-Account-Id
          type: number
        - in: body
          name: data
          description: The data to create a promo player track.
          schema:
            type: object
            properties:
              sequence_order:
                type: number
      responses:
        200:
          description: 200 OK
          schema:
            $ref: "#/definitions/PromoPlayerTrack"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        404:
          description: 404 Not Found
          schema:
            $ref: "#/definitions/NotFoundError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
    put:
      summary: Updates a promo player track
      parameters:
        - in: path
          name: promo_player_id
          required: true
          type: number
        - in: path
          name: track_id
          required: true
          type: number
        - in: header
          name: Grass-Account-Type
          type: string
        - in: header
          name: Grass-Account-Id
          type: number
        - in: body
          name: data
          description: The data to update a promo player track.
          schema:
            type: object
            properties:
              sequence_order:
                type: number
      responses:
        200:
          description: 200 OK
          schema:
            $ref: "#/definitions/PromoPlayerTrack"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        404:
          description: 404 Not Found
          schema:
            $ref: "#/definitions/NotFoundError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
    delete:
      summary: Deletes a promo player track
      parameters:
        - in: path
          name: promo_player_id
          required: true
          type: number
        - in: path
          name: track_id
          required: true
          type: number
        - in: header
          name: Grass-Account-Type
          type: string
        - in: header
          name: Grass-Account-Id
          type: number
      responses:
        200:
          description: 200 OK
          schema:
            $ref: "#/definitions/PromoPlayerTrack"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        404:
          description: 404 Not Found
          schema:
            $ref: "#/definitions/NotFoundError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
  /product/{product_id}/player:
    post:
      summary: Creates a new promo player
      parameters:
        - in: path
          name: product_id
          required: true
          type: number
        - in: header
          name: Grass-Account-Type
          type: string
        - in: header
          name: Grass-Account-Id
          type: number
        - in: body
          name: data
          description: The data to create a promo player.
          schema:
            type: object
            required:
              - expiration_mode
              - skin
            properties:
              expiration_mode:
                type: string
              skin:
                type: string
      responses:
        200:
          description: 200 OK
          schema:
            $ref: "#/definitions/PromoPlayer"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
    get:
      summary: Gets the active promo player by product_id
      parameters:
        - in: path
          name: product_id
          required: true
          type: number
      responses:
        200:
          description: 200 OK
          schema:
            $ref: "#/definitions/PromoPlayerWithTracks"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        404:
          description: 404 Not Found
          schema:
            $ref: "#/definitions/NotFoundError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
  /product/{product_id}/player/{promo_player_id}:
    put:
      summary: Updates a promo player
      parameters:
        - in: path
          name: product_id
          required: true
          type: number
        - in: path
          name: promo_player_id
          required: true
          type: number
        - in: header
          name: Grass-Account-Type
          type: string
        - in: header
          name: Grass-Account-Id
          type: number
        - in: body
          name: data
          description: The data to update a promo player.
          schema:
            type: object
            properties:
              expiration_mode:
                type: string
              active:
                type: boolean
              skin:
                type: string
      responses:
        200:
          description: 200 OK
          schema:
            $ref: "#/definitions/PromoPlayer"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        404:
          description: 404 Not Found
          schema:
            $ref: "#/definitions/NotFoundError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
  /product/{product_id}/players:
    get:
      summary: Gets all the promo players for a product
      parameters:
        - in: path
          name: product_id
          required: true
          type: number
        - in: header
          name: Grass-Account-Type
          type: string
        - in: header
          name: Grass-Account-Id
          type: number
      responses:
        200:
          description: 200 OK
          schema:
            type: object
            properties:
              items:
                type: array
                items:
                  $ref: "#/definitions/PromoPlayer"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
  /players:
    get:
      summary: Gets all the promo players for a vendor
      parameters:
        - in: header
          name: Grass-Account-Type
          required: true
          type: string
        - in: header
          name: Grass-Account-Id
          required: true
          type: number
      responses:
        200:
          description: 200 OK
          schema:
            type: object
            properties:
              items:
                type: array
                items:
                  $ref: "#/definitions/PromoPlayer"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
  /player/code/{code}:
    get:
      summary: Gets a promo player by code
      parameters:
        - in: path
          name: code
          required: true
          type: string
      responses:
        200:
          description: 200 OK
          schema:
            $ref: "#/definitions/PromoPlayerWithTracks"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        404:
          description: 404 Not Found
          schema:
            $ref: "#/definitions/NotFoundError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
  /admin/product/{product_id}/players:
    delete:
      summary: Deletes all the promo players for a product
      parameters:
        - in: path
          name: product_id
          required: true
          type: number
        - in: header
          name: Grass-Account-Type
          type: string
        - in: header
          name: Grass-Account-Id
          type: number
      responses:
        200:
          description: 200 OK
          schema:
            type: object
            properties:
              items:
                type: array
                items:
                  $ref: "#/definitions/PromoPlayer"
        400:
          description: 400 Bad Parameters
          schema:
            $ref: "#/definitions/BadParametersError"
        500:
          description: 500 Internal server error
          schema:
            $ref: "#/definitions/InternalError"
definitions:
  PromoPlayer:
    type: object
    properties:
      promo_player_id:
        type: number
      vendor_id:
        type: number
      product_id:
        type: number
      code:
        type: string
      expiration_mode:
        type: string
      active:
        type: boolean
      skin:
        type: string
  PromoPlayerWithTracks:
    type: object
    properties:
      promo_player_id:
        type: number
      vendor_id:
        type: number
      product_id:
        type: number
      code:
        type: string
      expiration_mode:
        type: string
      active:
        type: boolean
      skin:
        type: string
      tracks:
        type: array
        items:
          $ref: "#/definitions/PromoPlayerTrack"
  PromoPlayerTrack:
    type: object
    properties:
      promo_player_id:
        type: number
      track_id:
        type: number
      sequence_order:
        type: number
  BadParametersError:
    type: object
    properties:
      code:
        type: string
      message:
        type: string
    example:
      {
        "code": "bad_parameters_error",
        "message": "Missing required parameters"
      }
  NotFoundError:
    type: object
    properties:
      code:
        type: string
      message:
        type: string
    example:
      {
        "code": "not_found_error",
        "message": "Promo Player not found"
      }
  InternalError:
    type: object
    properties:
      code:
        type: string
      message:
        type: string
    example:
      {
        "code": "internal_error",
        "message": "Internal server error"
      }
