#  ============LICENSE_START=======================================================
#  Copyright (C) 2021 Nordix Foundation
#  ================================================================================
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#        http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
#  SPDX-License-Identifier: Apache-2.0
#  ============LICENSE_END=========================================================

openapi: 3.0.1
info:
  title: NCMP DMI Plugin
  description: Adds Data Model Inventory Registry capability for ONAP
  version: "1.0.0"
servers:
  - url: /dmi
tags:
  - name: dmi-plugin-internal
    description: DMI plugin internal rest apis
  - name: dmi-plugin
    description: DMI plugin rest apis


paths:
  /v1/ch/{cmHandle}/modules:
    post:
      tags:
        - dmi-plugin
      summary: Get all modules for cm handle
      description: Get all modules for given cm handle
      operationId: getModuleReferences
      parameters:
        - $ref: 'components.yml#/components/parameters/cmHandleInPath'
      requestBody:
        description: Operational body
        content:
          application/json:
            schema:
              $ref: 'components.yml#/components/schemas/ModuleReferencesRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: 'components.yml#/components/schemas/ModuleSet'
        '404':
          $ref: 'components.yml#/components/responses/NotFound'
        '500':
          $ref: 'components.yml#/components/responses/ServerError'


  /v1/ch/{cmHandle}/moduleResources:
    post:
      description: Retrieve module resources for one or more modules
      tags:
        - dmi-plugin
      summary: Retrieve module resources
      operationId: retrieveModuleResources
      parameters:
        - $ref: 'components.yml#/components/parameters/cmHandleInPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: 'components.yml#/components/schemas/ModuleResourcesReadRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: 'components.yml#/components/schemas/YangResources'
        '404':
          $ref: 'components.yml#/components/responses/NotFound'
        '500':
          $ref: 'components.yml#/components/responses/ServerError'

  /v1/inventory/cmHandles:
    post:
      tags:
        - dmi-plugin-internal
      summary: register given list of cm handles (internal use only)
      description: register given list of cm handles (internal use only)
      x-api-audience: component-internal
      operationId: registerCmHandles
      requestBody:
        description: list of cm handles
        content:
          application/json:
            schema:
                $ref: 'components.yml#/components/schemas/CmHandles'
        required: true
      responses:
        '201':
          description: Created
          content:
            text/plain:
              schema:
                type: string
                example: cm-handle registered successfully
        '400':
          $ref: 'components.yml#/components/responses/BadRequest'
        '500':
          $ref: 'components.yml#/components/responses/ServerError'

  /v1/ch/{cmHandle}/data/ds/ncmp-datastore:passthrough-operational:
    post:
      tags:
        - dmi-plugin
      summary: Get resource data from passthrough-operational for cm handle
      description: Get resource data from passthrough-operational for cm handle. Will support read operations only.
      operationId: dataAccessPassthroughOperational
      parameters:
        - $ref: 'components.yml#/components/parameters/cmHandleInPath'
        - $ref: 'components.yml#/components/parameters/resourceIdentifierInQuery'
        - $ref: 'components.yml#/components/parameters/acceptParamInHeader'
        - $ref: 'components.yml#/components/parameters/optionsParamInQuery'
      requestBody:
        description: Operational body
        content:
          application/json:
            schema:
              $ref: 'components.yml#/components/schemas/DataAccessRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                example:
                  - yangSource: my-yang-source
                    moduleName: my-module-name
                    revision: my-revision
        '400':
          $ref: 'components.yml#/components/responses/BadRequest'
        '500':
          $ref: 'components.yml#/components/responses/ServerError'

  /v1/ch/{cmHandle}/data/ds/ncmp-datastore:passthrough-running:
    post:
      tags:
        - dmi-plugin
      summary: Get, Create or Update request for data passthrough-running for a cm-handle
      description: Post request to Get, Create or to Update resource data for a cm-handle. Since all requests need to include additional information in a request body HTTP Post is used for all use cases and the actual operation is defined in the request body instead.
      operationId: dataAccessPassthroughRunning
      parameters:
        - $ref: 'components.yml#/components/parameters/cmHandleInPath'
        - $ref: 'components.yml#/components/parameters/resourceIdentifierInQuery'
        - $ref: 'components.yml#/components/parameters/acceptParamInHeader'
        - $ref: 'components.yml#/components/parameters/optionsParamInQuery'
      requestBody:
        content:
          application/json:
            schema:
              $ref: 'components.yml#/components/schemas/DataAccessRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                example:
                  - yangSource: my-yang-source
                    moduleName: my-module-name
                    revision: my-revision
        '201':
          description: Created
          content:
            text/plain:
              schema:
                type: string
                example: my-resource
        '204':
          $ref: 'components.yml#/components/responses/NoContent'
        '400':
          $ref: 'components.yml#/components/responses/BadRequest'
        '500':
          $ref: 'components.yml#/components/responses/ServerError'