#%RAML 1.0

title: API-Vitam Version Alpha - Storage interne
version: v1
baseUri: http://storage.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
  CollectionTraits: libraries/CollectionTraits.raml
  StorageTypes: libraries/StorageTypes.raml
  StorageTraits: libraries/StorageTraits.raml
  StorageResourceTraits: libraries/StorageResourceTypes.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: Containers
    content: |
      Le principe proposé serait le suivant:
        - Accès principal au travers d'un Container = Tenant
        - 3 types sous-jacents:
          - Objects: pour les éléments binaires (non modifiable = WORM)
          - Logbooks: pour les journaux (tous) (non modifiable = WORM)
          - Metadatas: pour les Units et ObjectGroups (modifiable = WMRM => PUT)

      Questions ou remarques:
        - Le moteur de stockage est responsable de mettre le "Folder" sous-jacent nécessaire pour séparer les types.

/containers:
  displayName: Tenants as Containers
  description: Administration des Containers (Dossiers pour un Tenant)
  get:
    is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
  post:
    is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

  /{cid}:
    displayName: Single Container API
    description: API de gestion d'un Container (Tenant).
    get:
      description: Permet d'accéder aux informations d'un container
      is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
    post:
      description: Permet de créer un nouveau container (nouveau tenant)
      is: [CollectionTraits.collection-post, StorageTraits.StrategyStorage]
      body:
        application/json:
          type: StorageTypes.ContainerInfo
          example: !include libraries/samples/containerInfo.sample
      responses:
        201:
          body:
            application/json:
              type: StorageTypes.ContainerInfo
              example: !include libraries/samples/containerInfo.sample
    head:
      description: Permet de tester l'existence du Container
      is: [CollectionTraits.collection-head, StorageTraits.StrategyStorage]
    delete:
      description: Permet d'effacer un Container (si vide)
      is: [CollectionTraits.collection-delete, StorageTraits.StrategyStorage]

    /objects:
      # root endpoint request
      displayName: Objects operations
      description: Pour gérer la création de nouveaux Objects, sur la base d'une stratégie de stockage à appliquer
      get:
        description: Liste du contenu binaire pour ce tenant.
        is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
      post:
        is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

      /{id_object}:
        displayName: Object operations
        type: StorageResourceTraits.StoreWormItem

    /reports:
      # root endpoint request
      displayName: Reports on operations
      description: |
        Pour gérer la création de nouveaux Rapports (exemple : ArchiveTransferReply), sur la base d'une stratégie de stockage à appliquer
      get:
        description: Liste du contenu binaire pour ce tenant.
        is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
      post:
        is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

      /{id_logbook}:
        displayName: Reports on operations
        type: StorageResourceTraits.StoreWormItem

    /logbooks:
      # root endpoint request
      displayName: Logbooks operations
      description: Pour gérer la création de nouveaux Journaux, sur la base d'une stratégie de stockage à appliquer
      get:
        description: Liste du contenu binaire pour ce tenant.
        is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
      post:
        is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

      /{id_logbook}:
        displayName: Logbooks operations
        type: StorageResourceTraits.StoreWormItem

    /lifecycleunits:
      # root endpoint request
      displayName: Logbooks operations
      description: Pour gérer la création de nouveaux Journaux, sur la base d'une stratégie de stockage à appliquer
      get:
        description: Liste du contenu binaire pour ce tenant.
        is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
      post:
        is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

      /{id_logbook}:
        displayName: Logbooks operations
        type: StorageResourceTraits.StoreWmrmItem

    /lifecycleobjects:
      # root endpoint request
      displayName: Logbooks operations
      description: Pour gérer la création de nouveaux Journaux, sur la base d'une stratégie de stockage à appliquer
      get:
        description: Liste du contenu binaire pour ce tenant.
        is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
      post:
        is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

      /{id_logbook}:
        displayName: Logbooks operations
        type: StorageResourceTraits.StoreWmrmItem

    /units:
      # root endpoint request
      displayName: Unit Metadatas operations
      description: Pour gérer la création de nouvelles Units, sur la base d'une stratégie de stockage à appliquer
      get:
        description: Liste du contenu binaire pour ce tenant.
        is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
      post:
        is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

      /{id_md}:
        displayName: Unit Metadata operations
        type: StorageResourceTraits.StoreWmrmItem

    /objectgroups:
      # root endpoint request
      displayName: ObjectGroup Metadatas operations
      description: Pour gérer la création de nouveaux ObjectGroup, sur la base d'une stratégie de stockage à appliquer
      get:
        description: Liste du contenu binaire pour ce tenant.
        is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
      post:
        is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

      /{id_md}:
        displayName: ObjectGroup Metadata operations
        type: StorageResourceTraits.StoreWmrmItem

    /manifests:
      # root endpoint request
      displayName: Manifests of Ingest operations
      description: Pour gérer la création de nouveaux fichiers manifest, sur la base d'une stratégie de stockage à appliquer
      get:
        description: Liste du contenu binaire pour ce tenant.
        is: [CollectionTraits.collection-get, StorageTraits.StrategyStorage]
      post:
        is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

      /{id_md}:
        displayName: Manifests of Ingest operations
        type: StorageResourceTraits.StoreWormItem

/storage/backup:
  displayName: Sauvegarde des logs du storage par tenant
  description: Sert à sauvegarder les logs d'accès au moteur de stokage
  post:
    description: Sauvegarder les fichiers de logs par tenant. Les logs sont archivés puis stockés à travers le moteur de stockage
    is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

/storage/traceability:
  displayName: Sécurisation (traçabilité) des logs du storage par tenant
  description: Sert à sécuriser les logs d'accès au moteur de stokage
  post:
    description: Sécuriser les fichiers de logs du storage archivés par tenant.
    is: [CollectionTraits.collection-get, StandardTraits.OverrideGet, StorageTraits.StrategyStorage]

/{type}/logs:
  displayName: Offer logs
  description: Accès au logs de l'offre de stockage référente d'une stratégie
  get:
    description: Recherche des logs de l'offre de stockage reférente pour la stratégie
    is: [StorageTraits.StorageLog, CollectionTraits.collection-get, StorageTraits.StrategyStorage]

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

/readReport
  displayName: Récupération du contenu d'un report
  description: Récupération du contenu d'un report
  get:
    description: Récupération du contenu d'un report.
    is: [CollectionTraits.collection-get]
