#%RAML 1.0

title: API-Vitam Version Alpha - Worker interne
version: v1
baseUri: http://worker.internal.vitam.gouv.fr/{version}
protocols: [ HTTP ]

uses:
  StandardTypes: libraries/StandardTypes.raml
  StandardTraits: libraries/StandardTraits.raml
  AccessTypes: libraries/AccessTypes.raml
  AccessTraits: libraries/AccessTraits.raml
  DslTypes: libraries/DslTypes.raml

securitySchemes:
  VitamPlatform: !include securitySchemes/SecuritySchemeVitamInternal.raml

securedBy: [ VitamPlatform ]

mediaType: application/json

types:
  _reserved:
    type: string

documentation:
  - title: Avertissements
    content: !include docs-fr/avertissement.md

  - title: Licence
    content: !include docs-fr/license.md

  - title: Tasks
    content: |
      Le principe proposé serait le suivant:
        - Affectation par le Moteur d'exécution (Distribution):
          - POST /tasks
        - Suivi pour un worker pour une tâche:
          - GET / tasks/id_async
        - Possibilité future d'agir sur une tâche en cours d'exécution (ou plusieurs):
          - PATCH /tasks
          - PATCH /tasks/id_async

      Questions ou remarques:
        - Le /status pourrait être étendu pour avoir des informations statistiques sur le Worker.

/tasks:
  # root endpoint request
  displayName: Tasks
  description: Administration des Tâches Asynchrones (Steps).
  is: [ StandardTraits.StandardOptionalHeader,
  StandardTraits.StandardHeader401, StandardTraits.StandardHeader404,
  StandardTraits.StandardHeader409, StandardTraits.StandardHeader412 ]
  get:
    description: Permet de lister les tâches en cours
    body:
      application/json:
        type: object
        example: !include libraries/samples/collectionQuery.sample
    responses:
      200:
        body:
          application/json:
            type: object
            example: !include libraries/samples/collectionList.sample
  post:
    description: Permet de soumettre une tâche (steps + contexte + item)
    body:
      application/json:
        type: object
        example: !include libraries/samples/workflow-worker.sample
    responses:
      201:
        body:
          application/json:
            type: object
            example: !include libraries/samples/async_status.sample
  put:
    description: Permet si nécessaire d'interagir avec une tâche (cancel)
    body:
      application/json:
        type: object
        example: !include libraries/samples/genericSample.sample
    responses:
      200:
        body:
          application/json:
            type: object
            example: !include libraries/samples/async_status.sample

  /{id_async}:
    displayName: Task
    is: [ StandardTraits.StandardOptionalHeader,
    StandardTraits.StandardHeader401, StandardTraits.StandardHeader404,
    StandardTraits.StandardHeader409, StandardTraits.StandardHeader412 ]
    get:
      description: Permet de récupérer le statut d'une Tâche en cours
      responses:
        200:
          body:
            application/json:
              type: object
              example: !include libraries/samples/async_status.sample
    put:
      description: Permet si nécessaire d'interagir avec une Tâche (cancel)
      body:
        application/json:
          type: object
          example: !include libraries/samples/genericSample.sample
      responses:
        200:
          body:
            application/json:
              type: object
              example: !include libraries/samples/async_status.sample

/status:
  get:
  is: [ StandardTraits.Status, StandardTraits.StandardHeader200,
  StandardTraits.StandardHeader401, StandardTraits.StandardHeader404, StandardTraits.StandardHeader503 ]
