#  ============LICENSE_START=======================================================
#  Copyright (C) 2021-2024 Nordix Foundation
#  Modifications Copyright (C) 2021 Pantheon.tech
#  Modifications Copyright (C) 2021-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=========================================================

resourceDataForCmHandle:
  get:
    tags:
      - network-cm-proxy
    summary: Get resource data for cm handle
    description: Get resource data for given cm handle
    operationId: getResourceDataForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/datastoreName'
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
      - $ref: 'components.yaml#/components/parameters/optionsParamInQuery'
      - $ref: 'components.yaml#/components/parameters/topicParamInQuery'
      - $ref: 'components.yaml#/components/parameters/includeDescendantsOptionInQuery'
      - $ref: 'components.yaml#/components/parameters/authorizationParamInHeader'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              type: object
            examples:
              dataSampleResponse:
                $ref: 'components.yaml#/components/examples/dataSampleResponse'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'
      502:
        $ref: 'components.yaml#/components/responses/BadGateway'

  post:
    tags:
      - network-cm-proxy
    summary: create resource data from pass-through running for cm handle
    description: create resource data from pass-through running for given cm handle
    operationId: createResourceDataRunningForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/datastoreName'
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
      - $ref: 'components.yaml#/components/parameters/contentParamInHeader'
      - $ref: 'components.yaml#/components/parameters/authorizationParamInHeader'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: object
          examples:
            dataSampleRequest:
              $ref: 'components.yaml#/components/examples/dataSampleRequest'
        application/yang-data+json:
          schema:
            type: object
          examples:
            dataSampleRequest:
              $ref: 'components.yaml#/components/examples/dataSampleRequest'
    responses:
      201:
        $ref: 'components.yaml#/components/responses/Created'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'
      502:
        $ref: 'components.yaml#/components/responses/BadGateway'

  put:
    tags:
      - network-cm-proxy
    summary: Update resource data from pass-through running for a cm handle
    description: Update resource data from pass-through running for the given cm handle
    operationId: updateResourceDataRunningForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/datastoreName'
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
      - $ref: 'components.yaml#/components/parameters/contentParamInHeader'
      - $ref: 'components.yaml#/components/parameters/authorizationParamInHeader'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: object
          examples:
            dataSampleRequest:
              $ref: 'components.yaml#/components/examples/dataSampleRequest'
        application/yang-data+json:
          schema:
            type: object
          examples:
            dataSampleRequest:
              $ref: 'components.yaml#/components/examples/dataSampleRequest'
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'
      502:
        $ref: 'components.yaml#/components/responses/BadGateway'

  patch:
    tags:
      - network-cm-proxy
    summary: Patch resource data from pass-through running
    description: Patch resource data from pass-through running for the given cm handle
    operationId: patchResourceDataRunningForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/datastoreName'
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
      - $ref: 'components.yaml#/components/parameters/contentParamInHeader'
      - $ref: 'components.yaml#/components/parameters/authorizationParamInHeader'
    requestBody:
      required: true
      content:
        '*/*':
          schema:
            type: object
          examples:
            dataSampleRequest:
              $ref: 'components.yaml#/components/examples/dataSamplePatchRequest'
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'
      502:
        $ref: 'components.yaml#/components/responses/BadGateway'

  delete:
    tags:
      - network-cm-proxy
    summary: Delete resource data
    description: Delete resource data from pass-through running for a given cm handle
    operationId: deleteResourceDataRunningForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/datastoreName'
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
      - $ref: 'components.yaml#/components/parameters/contentParamInHeader'
      - $ref: 'components.yaml#/components/parameters/authorizationParamInHeader'
    responses:
      204:
        $ref: 'components.yaml#/components/responses/NoContent'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'
      502:
        $ref: 'components.yaml#/components/responses/BadGateway'

dataOperationForCmHandle:
  post:
    tags:
      - network-cm-proxy
    summary: Execute a data operation for group of cm handle ids
    description: This request will be handled asynchronously using messaging to the supplied topic. The rest response will be an acknowledge with a requestId to identify the relevant messages. A maximum of 200 cm handles per operation is supported.
    operationId: executeDataOperationForCmHandles
    parameters:
      - $ref: 'components.yaml#/components/parameters/requiredTopicParamInQuery'
      - $ref: 'components.yaml#/components/parameters/authorizationParamInHeader'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: 'components.yaml#/components/schemas/DataOperationRequest'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              type: object
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      413:
        $ref: 'components.yaml#/components/responses/PayloadTooLarge'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'
      502:
        $ref: 'components.yaml#/components/responses/BadGateway'

queryResourceDataForCmHandle:
  get:
    tags:
      - network-cm-proxy
    summary: Query resource data for a given cm handle
    description: Query resource data for a given cm handle
    operationId: queryResourceDataForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/datastoreName'
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/cpsPathInQuery'
      - $ref: 'components.yaml#/components/parameters/optionsParamInQuery'
      - $ref: 'components.yaml#/components/parameters/topicParamInQuery'
      - $ref: 'components.yaml#/components/parameters/includeDescendantsOptionInQuery'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              type: object
            examples:
              dataSampleResponse:
                $ref: 'components.yaml#/components/examples/dataSampleResponse'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'
      502:
        $ref: 'components.yaml#/components/responses/BadGateway'

fetchModuleReferencesByCmHandle:
  get:
    description: fetch all module references (name and revision) for a given cm handle
    tags:
      - network-cm-proxy
    summary: Fetch all module references (name and revision) for a given cm handle
    operationId: getModuleReferencesByCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: 'components.yaml#/components/schemas/RestModuleReference'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'

getModuleDefinitions:
  get:
    tags:
      - network-cm-proxy
    summary: Get module definitions
    description: Get module definitions (module name, revision, yang resource) with options to filter on module name and revision
    operationId: getModuleDefinitions
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/moduleNameInQuery'
      - $ref: 'components.yaml#/components/parameters/revisionInQuery'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: 'components.yaml#/components/schemas/RestModuleDefinition'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'

searchCmHandles:
  post:
    description: Execute cm handle query search and return a list of cm handle details. Any number of conditions can be applied. To be included in the result a cm-handle must fulfill ALL the conditions. An empty collection will be returned in the case that the cm handle does not match a condition. For more on cm handle query search please refer to <a href="https://docs.onap.org/projects/onap-cps/en/latest/ncmp-cmhandle-querying.html">cm handle query search Read the Docs</a>.<br/>By supplying a CPS Path it is possible to query on any data related to the cm handle. For more on CPS Path please refer to <a href="https://docs.onap.org/projects/onap-cps/en/latest/cps-path.html">CPS Path Read the Docs</a>. The cm handle ancestor is automatically returned for this query.
    tags:
      - network-cm-proxy
    summary: Execute cm handle search using the available conditions
    operationId: searchCmHandles
    requestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: 'components.yaml#/components/schemas/CmHandleQueryParameters'
          examples:
            Cm handle properties query:
              $ref: 'components.yaml#/components/examples/pubPropCmHandleQueryParameters'
            Cm handle modules query:
              $ref: 'components.yaml#/components/examples/modulesCmHandleQueryParameters'
            All cm handle query parameters:
              $ref: 'components.yaml#/components/examples/allCmHandleQueryParameters'
            Cm handle with CPS path state query:
              $ref: 'components.yaml#/components/examples/cpsPathCmHandleStateQueryParameters'
            Cm handle with data sync flag query:
              $ref: 'components.yaml#/components/examples/cpsPathCmHandleDataSyncQueryParameters'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: 'components.yaml#/components/schemas/RestOutputCmHandle'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'

retrieveCmHandleDetailsById:
  get:
    description: Retrieve CM handle details and properties by cm handle id
    tags:
      - network-cm-proxy
    summary: Retrieve CM handle details
    operationId: retrieveCmHandleDetailsById
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              $ref: 'components.yaml#/components/schemas/RestOutputCmHandle'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'

getCmHandlePropertiesById:
  get:
    description: Get CM handle properties by cm handle id
    tags:
      - network-cm-proxy
    summary: Get CM handle properties
    operationId: getCmHandlePublicPropertiesByCmHandleId
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              $ref: 'components.yaml#/components/schemas/RestOutputCmHandlePublicProperties'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'

getCmHandleStateById:
  get:
    description: Get CM handle state by cm handle id
    tags:
      - network-cm-proxy
    summary: Get CM handle state
    operationId: getCmHandleStateByCmHandleId
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              $ref: 'components.yaml#/components/schemas/RestOutputCmHandleCompositeState'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'

searchCmHandleIds:
  post:
    description: Execute cm handle query search and return a list of cm handle ids. Any number of conditions can be applied. To be included in the result a cm-handle must fulfill ALL the conditions. An empty collection will be returned in the case that the cm handle does not match a condition. For more on cm handle query search please refer to <a href="https://docs.onap.org/projects/onap-cps/en/latest/ncmp-cmhandle-querying.html">cm handle query search Read the Docs</a>.<br/>By supplying a CPS Path it is possible to query on any data related to the cm handle. For more on CPS Path please refer to <a href="https://docs.onap.org/projects/onap-cps/en/latest/cps-path.html">CPS Path Read the Docs</a>. The cm handle ancestor is automatically returned for this query.
    tags:
      - network-cm-proxy
    summary: Execute cm handle query upon a given set of query parameters
    operationId: searchCmHandleIds
    requestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: 'components.yaml#/components/schemas/CmHandleQueryParameters'
          examples:
            Cm handle properties query:
              $ref: 'components.yaml#/components/examples/pubPropCmHandleQueryParameters'
            Cm handle modules query:
              $ref: 'components.yaml#/components/examples/modulesCmHandleQueryParameters'
            All cm handle query parameters:
              $ref: 'components.yaml#/components/examples/allCmHandleQueryParameters'
            Cm handle with CPS path state query:
              $ref: 'components.yaml#/components/examples/cpsPathCmHandleStateQueryParameters'
            Cm handle with data sync flag query:
              $ref: 'components.yaml#/components/examples/cpsPathCmHandleDataSyncQueryParameters'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'

setDataSyncEnabledFlag:
  put:
    tags:
      - network-cm-proxy
    summary: Set the Data Sync Enabled Flag
    description: Set the data sync enabled flag to true or false for a specified Cm-Handle. This will in turn set the data sync state to UNSYNCHRONIZED and NONE_REQUESTED respectfully.
    operationId: setDataSyncEnabledFlagForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/dataSyncEnabled'
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'
      502:
        $ref: 'components.yaml#/components/responses/BadGateway'