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

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'
      '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'
      '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'
      '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. This operation
                  is currently supported for one top level data node only.
    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'
      '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'
      '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'
      '403':
        $ref: 'components.yml#/components/responses/Forbidden'
      '500':
        $ref: 'components.yml#/components/responses/InternalServerError'
