# ============LICENSE_START=======================================================
# Copyright (c) 2021-2022 Bell Canada.
# Modifications Copyright (C) 2021-2022 Nordix Foundation
# Modifications Copyright (C) 2022 TechMahindra Ltd.
# Modifications Copyright (C) 2022 Deutsche Telekom AG
# ================================================================================
# 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=========================================================

nodeByDataspaceAndAnchor:
  get:
    description: Get a node with an option to retrieve all the children for a given anchor and dataspace
    tags:
      - cps-data
    summary: Get a node
    operationId: getNodeByDataspaceAndAnchor
    parameters:
      - $ref: 'components.yml#/components/parameters/apiVersionInPath'
      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
      - $ref: 'components.yml#/components/parameters/anchorNameInPath'
      - $ref: 'components.yml#/components/parameters/xpathInQuery'
      - $ref: 'components.yml#/components/parameters/includeDescendantsOptionInQuery'
    responses:
      '200':
        description: OK
        content:
          application/json:
            schema:
              type: object
            examples:
              dataSample:
                $ref: 'components.yml#/components/examples/dataSample'
      '400':
        $ref: 'components.yml#/components/responses/BadRequest'
      '401':
        $ref: 'components.yml#/components/responses/Unauthorized'
      '403':
        $ref: 'components.yml#/components/responses/Forbidden'
      '500':
        $ref: 'components.yml#/components/responses/InternalServerError'
    x-codegen-request-body-name: xpath

listElementByDataspaceAndAnchor:
  post:
    description: Add list element(s) to a list for a given anchor and dataspace
    tags:
      - cps-data
    summary: Add list element(s)
    operationId: addListElements
    parameters:
      - $ref: 'components.yml#/components/parameters/apiVersionInPath'
      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
      - $ref: 'components.yml#/components/parameters/anchorNameInPath'
      - $ref: 'components.yml#/components/parameters/requiredXpathInQuery'
      - $ref: 'components.yml#/components/parameters/observedTimestampInQuery'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: object
          examples:
            dataSample:
              $ref: 'components.yml#/components/examples/dataSample'
    responses:
      '201':
        $ref: 'components.yml#/components/responses/Created'
      '400':
        $ref: 'components.yml#/components/responses/BadRequest'
      '401':
        $ref: 'components.yml#/components/responses/Unauthorized'
      '403':
        $ref: 'components.yml#/components/responses/Forbidden'
      '500':
        $ref: 'components.yml#/components/responses/InternalServerError'
  put:
    description: Replace list content under a given parent, anchor and dataspace
    tags:
      - cps-data
    summary: Replace list content
    operationId: replaceListContent
    parameters:
      - $ref: 'components.yml#/components/parameters/apiVersionInPath'
      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
      - $ref: 'components.yml#/components/parameters/anchorNameInPath'
      - $ref: 'components.yml#/components/parameters/requiredXpathInQuery'
      - $ref: 'components.yml#/components/parameters/observedTimestampInQuery'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: object
          examples:
            dataSample:
              $ref: 'components.yml#/components/examples/dataSample'
    responses:
      '200':
        $ref: 'components.yml#/components/responses/Ok'
      '400':
        $ref: 'components.yml#/components/responses/BadRequest'
      '401':
        $ref: 'components.yml#/components/responses/Unauthorized'
      '403':
        $ref: 'components.yml#/components/responses/Forbidden'
      '500':
        $ref: 'components.yml#/components/responses/InternalServerError'

nodesByDataspaceAndAnchor:
  post:
    description: Create a node for a given anchor and dataspace
    tags:
      - cps-data
    summary: Create a node
    operationId: createNode
    parameters:
      - $ref: 'components.yml#/components/parameters/apiVersionInPath'
      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
      - $ref: 'components.yml#/components/parameters/anchorNameInPath'
      - $ref: 'components.yml#/components/parameters/xpathInQuery'
      - $ref: 'components.yml#/components/parameters/observedTimestampInQuery'
      - $ref: 'components.yml#/components/parameters/contentTypeHeader'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: string
          examples:
            dataSample:
              $ref: 'components.yml#/components/examples/dataSample'
        application/xml:
          schema:
            type: object   # Workaround to show example
            xml:
              name: stores
          examples:
            dataSample:
              $ref: 'components.yml#/components/examples/dataSampleXml'

    responses:
      '201':
        $ref: 'components.yml#/components/responses/Created'
      '400':
        $ref: 'components.yml#/components/responses/BadRequest'
      '401':
        $ref: 'components.yml#/components/responses/Unauthorized'
      '403':
        $ref: 'components.yml#/components/responses/Forbidden'
      '409':
        $ref: 'components.yml#/components/responses/Conflict'
      '500':
        $ref: 'components.yml#/components/responses/InternalServerError'
  patch:
    description: Update a data node leaves for a given dataspace and anchor and a parent node xpath
    tags:
      - cps-data
    summary: Update node leaves
    operationId: updateNodeLeaves
    parameters:
      - $ref: 'components.yml#/components/parameters/apiVersionInPath'
      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
      - $ref: 'components.yml#/components/parameters/anchorNameInPath'
      - $ref: 'components.yml#/components/parameters/xpathInQuery'
      - $ref: 'components.yml#/components/parameters/observedTimestampInQuery'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: object
          examples:
            dataSample:
              $ref: 'components.yml#/components/examples/dataSample'
    responses:
      '200':
        $ref: 'components.yml#/components/responses/Ok'
      '400':
        $ref: 'components.yml#/components/responses/BadRequest'
      '401':
        $ref: 'components.yml#/components/responses/Unauthorized'
      '403':
        $ref: 'components.yml#/components/responses/Forbidden'
      '500':
        $ref: 'components.yml#/components/responses/InternalServerError'
  delete:
    description: Delete a datanode for a given dataspace and anchor given a node xpath.
    tags:
      - cps-data
    summary: Delete a data node
    operationId: deleteDataNode
    parameters:
      - $ref: 'components.yml#/components/parameters/apiVersionInPath'
      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
      - $ref: 'components.yml#/components/parameters/anchorNameInPath'
      - $ref: 'components.yml#/components/parameters/xpathInQuery'
      - $ref: 'components.yml#/components/parameters/observedTimestampInQuery'
    responses:
      '204':
        $ref: 'components.yml#/components/responses/NoContent'
      '400':
        $ref: 'components.yml#/components/responses/BadRequest'
      '401':
        $ref: 'components.yml#/components/responses/Unauthorized'
      '403':
        $ref: 'components.yml#/components/responses/Forbidden'
      '500':
        $ref: 'components.yml#/components/responses/InternalServerError'
  put:
    description: Replace a node with descendants for a given dataspace, anchor and a parent node xpath
    tags:
      - cps-data
    summary: Replace a node with descendants
    operationId: replaceNode
    parameters:
      - $ref: 'components.yml#/components/parameters/apiVersionInPath'
      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
      - $ref: 'components.yml#/components/parameters/anchorNameInPath'
      - $ref: 'components.yml#/components/parameters/xpathInQuery'
      - $ref: 'components.yml#/components/parameters/observedTimestampInQuery'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: object
          examples:
            dataSample:
              $ref: 'components.yml#/components/examples/dataSample'
    responses:
      '200':
        $ref: 'components.yml#/components/responses/Ok'
      '400':
        $ref: 'components.yml#/components/responses/BadRequest'
      '401':
        $ref: 'components.yml#/components/responses/Unauthorized'
      '403':
        $ref: 'components.yml#/components/responses/Forbidden'
      '500':
        $ref: 'components.yml#/components/responses/InternalServerError'