#  ============LICENSE_START=======================================================
#  Copyright (C) 2021-2023 Nordix Foundation
#  Modifications Copyright (C) 2022 Bell Canada
#  ================================================================================
#  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/{datastore-name}:
    post:
      tags:
        - dmi-plugin
      summary: Get resource data from passthrough operational or running for a cm handle
      description: Get resource data from passthrough operational or running for a cm handle
      operationId: dataAccessPassthrough
      parameters:
        - $ref: 'components.yml#/components/parameters/datastoreName'
        - $ref: 'components.yml#/components/parameters/cmHandleInPath'
        - $ref: 'components.yml#/components/parameters/resourceIdentifierInQuery'
        - $ref: 'components.yml#/components/parameters/optionsParamInQuery'
        - $ref: 'components.yml#/components/parameters/topicParamInQuery'
      requestBody:
        description: Contains collection of cm handles with it's private properties and requestId
        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/data:
    post:
      tags:
        - dmi-plugin
      summary: Execute a data operation for group of cm handle ids.
      description: Execute a data operation for group of cm handle ids by supplied operation details
      operationId: getResourceDataForCmHandleDataOperation
      parameters:
        - $ref: 'components.yml#/components/parameters/requiredTopicParamInQuery'
        - $ref: 'components.yml#/components/parameters/requiredRequestIdParamInQuery'
      requestBody:
        description: list of operation details
        content:
          application/json:
            schema:
              $ref: 'components.yml#/components/schemas/ResourceDataOperationRequests'
      responses:
        '202':
          description: Accepted
        '400':
          $ref: 'components.yml#/components/responses/BadRequest'
        '500':
          $ref: 'components.yml#/components/responses/ServerError'
        '501':
          $ref: 'components.yml#/components/responses/NotImplemented'