# ============LICENSE_START=======================================================
# Copyright (C) 2022 TechMahindra Ltd.
# ================================================================================
# 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=========================================================

dataspaces:
  post:
    description: Create a new dataspace
    tags:
      - cps-admin
    summary: Create a dataspace
    operationId: createDataspaceV2
    parameters:
      - $ref: 'components.yml#/components/parameters/dataspaceNameInQuery'
    responses:
      '201':
        $ref: 'components.yml#/components/responses/CreatedV2'
      '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'

anchorsByDataspace:
  post:
    description: Create a new anchor in the given dataspace
    tags:
      - cps-admin
    summary: Create an anchor
    operationId: createAnchorV2
    parameters:
      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
      - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery'
      - $ref: 'components.yml#/components/parameters/anchorNameInQuery'
    responses:
      '201':
        $ref: 'components.yml#/components/responses/CreatedV2'
      '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'

schemaSet:
  post:
    description: Create a new schema set in the given dataspace
    tags:
      - cps-admin
    summary: Create a schema set
    operationId: createSchemaSetV2
    parameters:
      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
      - $ref: 'components.yml#/components/parameters/schemaSetNameInQuery'
    requestBody:
      required: true
      content:
        multipart/form-data:
          schema:
            $ref: 'components.yml#/components/schemas/MultipartFile'
    responses:
      '201':
        $ref: 'components.yml#/components/responses/CreatedV2'
      '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'
