diff --git a/.run/Commander Acceptance Tests.run.xml b/.run/Commander Acceptance Tests.run.xml new file mode 100644 index 00000000..139281d1 --- /dev/null +++ b/.run/Commander Acceptance Tests.run.xml @@ -0,0 +1,21 @@ + + + + \ No newline at end of file diff --git a/.run/Feature_ DataDictionary 1.7 - Local Metadata.run.xml b/.run/Feature_ DataDictionary 1.7 - Local Metadata.run.xml new file mode 100644 index 00000000..a8404c64 --- /dev/null +++ b/.run/Feature_ DataDictionary 1.7 - Local Metadata.run.xml @@ -0,0 +1,21 @@ + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 8474fcb7..89cb9bf5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM gradle:jdk8 AS builder +FROM gradle:6.2.1-jdk8 AS builder WORKDIR /home/gradle/project diff --git a/README.md b/README.md index ef08e9a5..9599ad32 100644 --- a/README.md +++ b/README.md @@ -1,358 +1,228 @@ + # RESO Web API Commander [![CodeFactor](https://www.codefactor.io/repository/github/resostandards/web-api-commander/badge)](https://www.codefactor.io/repository/github/resostandards/web-api-commander) ![Java CI with Gradle](https://github.com/RESOStandards/web-api-commander/workflows/Java%20CI%20with%20Gradle/badge.svg?branch=master) -The RESO Web API Commander is a command line Java application that uses -the Apache Olingo library to provide OData Client functionality as well as RESO Web API and Data Dictionary Certification. - -- [Getting Started](#getting-started) -- [Using the Commander as a Web API Client](#using-the-commander-as-a-web-api-client) -- [Display Help](#display-help) -- [Authentication](#authentication) -- [Getting Metadata](#getting-metadata) -- [Validating Metadata stored in an EDMX file](#validating-metadata-stored-in-an-edmx-file) -- [Getting results from a given `uri`](#getting-results-from-a-given-uri) -- [Getting raw results from a given `uri`](#getting-raw-results-from-a-given-uri) -- [Converting metadata to Open API 2 format](#converting-metadata-to-open-api-2-format) -- [Running RESOScript Files](#running-resoscript-files) -- [Automated Web API Testing (beta)](#automated-web-api-testing-beta) - * [Cucumber Feature Specifications](#cucumber-feature-specifications) - * [Testing Environment](#testing-environment) - * [Web API Usage](#web-api-usage) - * [Running Web API Tests with the Gradle Wrapper](#running-web-api-tests-with-the-gradle-wrapper) - * [Convenience Methods for Web API 1.0.2 Server Core Certification](#convenience-methods-for-web-api-102-server-core-certification) - * [Web API Program Output](#web-api-program-output) -- [Docker](#docker) -- [Logging](#logging) -- [Gradle Commands](#gradle-commands) -- [Coming Soon](#coming-soon) +The RESO Web API Commander is an OData client library and command-line client, as well as an automated RESO Certification testing tool. ## Getting Started +To begin using the Commander, choose one of the following topics: +* [Command-line Web API Tools](#command-line-web-api-tools) +* [RESO Certification](#reso-certification) +* [Commander as a Web API client library](#using-the-commander-as-a-web-api-client-library) + -There are essentially two ways to run the Commander: -* [As a Web API Client](#using-the-commander-as-a-web-api-client) -* As an automated testing tool for the [Web API](#web-api-usage) or [Data Dictionary](#data-dictionary-usage) +# Command-line Web API Tools +**Introduction** +* [Java Requirements](#java-requirements) +* [Display Help](#display-help) +* [Authentication](#authentication) +**Client Commands** +* [Getting Metadata](#getting-metadata) +* [Validating Metadata stored in an EDMX file](#validating-metadata-stored-in-an-edmx-file) +* [Saving Results from a Given `uri`](#saving-results-from-a-given-uri) +* [Running RESOScript Files](#running-resoscript-files) -### Using the Commander as a Web API Client -Your operating system probably already has Java installed, but you need 1.8.0 to run the Commander. +**Additional Commands** +* [Generating RESO Data Dictionary Acceptance Tests](#generating-reso-data-dictionary-acceptance-tests) +* [Generating RESO Data Dictionary Reference Metadata](#generating-reso-data-dictionary-reference-metadata) +* [Converting metadata to Open API 3 format](#converting-metadata-to-open-api-3-format) -To check your version, type: +## Java Requirements +Your operating system probably already has a Java Runtime Environment (JRE) installed. This is all you need to run the [Commander as a Web API Client](#using-the-commander-as-a-web-api-client). +To check your version of Java, type the following in a command line environment: ``` $ java -version ``` - -in your operating system's terminal and you will see something similar to the following: - +If you have the Java SE Runtime Environment installed, the output will look similar to the following: ``` $ java -version -openjdk version "1.8.0_242" -OpenJDK Runtime Environment (build 1.8.0_242-8u242-b08-0ubuntu3~19.10-b08) -OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode) +Java version "1.8.x" (or a higher version) +Java SE Runtime Environment ... ``` +If you don't see something like this, you need to install the [Java SE](https://www.oracle.com/java/technologies/javase-jre8-downloads.html) runtime. -If you don't see something similar to this, with 1.8.0, or an error, you may need to download a Java SDK Environment. - -[Open JDK is recommended](https://openjdk.java.net/install/index.html). - -[Oracle's SE Development kit may also be used](https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html), but there may be additional licensing terms to accept. - -Once you have done this, you can [download the Commander JAR file](https://github.com/RESOStandards/web-api-commander/tree/master/build/libs) -and use it for the operations which support using the Commander as a Web API client. -For automated testing, see [here](#automated-web-api-testing-beta) instead. +Once the Java SE Runtime is installed, you may [download the Commander JAR file](build/libs/web-api-commander.jar) ## Display Help -Assuming [you have downloaded `web-api-commander.jar`](https://github.com/RESOStandards/web-api-commander/tree/master/build/libs) at this point, help is available from the command line by passing `--help` OR just passing no arguments. - +Assuming [you've downloaded `web-api-commander.jar`](build/libs/web-api-commander.jar) at this point, help is available from the command line by passing `--help` or just passing no arguments, as follows: ``` -/path/to/web-api-commander$ java -jar web-api-commander.jar +$ java -jar path/to/web-api-commander.jar ``` Doing so displays the following information: - ``` usage: java -jar web-api-commander - --bearerToken Bearer token to be used with the request. - --contentType Results format: JSON (default), - JSON_NO_METADATA, JSON_FULL_METADATA, XML. - --convertEDMXtoOpenAPI Converts EDMX in to Open API, saving it - in .swagger.json - --entityName The name of the entity to fetch, e.g. - Property. - --getEntities Executes GET on using the given - and optional when - --useEdmEnabledClient is specified. Optionally - takes a , which will fetch that number - of results. Pass --limit -1 to fetch all - results. - --getMetadata Fetches metadata from using - and saves results in - . - --help print help - --inputFile Path to input file. - --limit The number of records to fetch, or -1 to fetch - all. - --outputFile Path to output file. - --runRESOScript Runs commands in RESOScript file given as - . - --saveRawGetRequest Performs GET from using the given - and saves output to - . - --serviceRoot Service root URL on the host. - --uri URI for raw request. Use 'single quotes' to - enclose. - --useEdmEnabledClient present if an EdmEnabledClient should be used. - --validateMetadata Validates previously-fetched metadata in the - path. - -``` - -When using commands, if arguments aren't provided, feedback will be displayed in the terminal, as well as the help screen, -which will show how to pass each required argument. + --bearerToken Bearer token to be used with the + request. + --contentType Results format: JSON (default), + JSON_NO_METADATA, JSON_FULL_METADATA, + XML. + --entityName The name of the entity to fetch, e.g. + Property. + --generateDDAcceptanceTests Generates acceptance tests in the + current directory. + --generateMetadataReport Generates metadata report from given + . + --generateReferenceEDMX Generates reference metadata in EDMX + format. + --getMetadata Fetches metadata from + using and saves results in + . + --help print help + --inputFile Path to input file. + --outputFile Path to output file. + --runRESOScript Runs commands in RESOScript file given + as . + --saveGetRequest Performs GET from using the + given and saves output to + . + --serviceRoot Service root URL on the host. + --uri URI for raw request. Use 'single quotes' + to enclose. + --validateMetadata Validates previously-fetched metadata in + the path. +``` +When using commands, if required arguments aren't provided, relevant feedback will be displayed in the terminal. ## Authentication -When using the RESO Commander from the terminal, bearer tokens are the currently-supported authentication mechanism. -Please see subsequent sections for how to use bearer tokens to accomplish tasks other than fully-automated testing, -[discussed elsewhere in this README](#automated-web-api-testing-beta). +The RESO Commander only supports passing OAuth2 "Bearer" tokens from the command line at this time. For those using OAuth2 Client Credentials, please see the section on _[Running RESOScript files](#running-resoscript-files)_. + ## Getting Metadata -To get metadata, use the `--getMetadata` argument with the following +To get metadata from a given server, use the `--getMetadata` argument with the following options: ``` -$ java -jar web-api-commander.jar --getMetadata --serviceRoot --bearerToken --outputFile +$ java -jar path/to/web-api-commander.jar --getMetadata --serviceRoot https://api.server.com/serviceRoot --outputFile metadata.xml --bearerToken abc123 ``` -where `serviceRoot` is the path to the root of the OData WebAPI server. +where `serviceRoot` is the path to the _root_ of the OData WebAPI server. Assuming everything goes well, metadata will be retrieved from the host -and written to the provided `--outputFile`. - -**Note**: additional validation is done after metadata have been received. -Errors in metadata won't cause the program to terminate, but validation -information will be displayed. Also, it's worth mentioning that some -of the validation error messages "out-of-the-box" from the Olingo -Library we're using to validate with can be pretty cryptic. Please -open an issue if you find things that need better explanations. - +and written to the provided `--outputFile`, and the following output will be displayed: +``` +Requesting metadata from: https://api.server.com/serviceRoot/$metadata +Metadata request succeeded. +``` ## Validating Metadata stored in an EDMX file -Sometimes it's useful to validate an already-downloaded EDMX file. +Sometimes it's useful to validate a local OData XML Metadata (EDMX) file. -Since parsing EDMX is an incremental process, validation terminates -_each time_ invalid items are encountered. Therefore, the workflow for -correcting an EDMX document that contains errors would be to run the +Since parsing EDMX is an incremental process, validation terminates _each time_ invalid items are encountered. Therefore, the workflow for correcting an EDMX document that contains errors would be to run the Commander repeatedly, fixing errors that are encountered along the way. -To validate metadata that's already been downloaded, call the Web API -Commander with the following options: - +To validate metadata that's already been downloaded, call Commander with the following options, +adjusting the `path/to/web-api-commander.jar` and `--inputFile` path for your environment accordingly: +``` +$ java -jar path/to/web-api-commander.jar --validateMetadata --inputFile '/src/main/resources/RESODataDictionary-1.7.edmx' ``` -$ java -jar web-api-commander.jar --validateMetadata --inputFile +XML or OData validation errors will be displayed if any issues were found. If successful, the following message +should appear: +``` +Checking Metadata for validity... +Valid Metadata! ``` -where `inputFile` is the path to your EDMX file. Errors will be logged -according to the `log4j.properties` file used at runtime. +## Saving Results from a Given `uri` +The `--saveGetRequest` action makes a request to a `--uri` using a given `--bearerToken`, and saves the response to the given `--outputFile`. -## Getting results from a given `uri` +For example: +``` +$ java -jar build/libs/web-api-commander.jar --saveGetRequest --uri 'https://api.server.com/OData/Property?$filter=ListPrice gt 100000&$top=100' --bearerToken abc123 --outputFile response.json +``` +If the response is successful, it will be written to the specified file and the following will be displayed on the console: +``` +JSON Data fetched from: https://api.server.com/OData/Property?$filter=ListPrice gt 100000&top=100" + with response code: 200 +JSON Response saved to: response.json +``` +Otherwise, errors will be displayed showing what went wrong during the request. -OData offers additional options for requesting data from a WebAPI server -beyond just receiving the raw server response (shown in the next example). -In this case, the appropriate action is: `--getEntities`, which can be -called as follows: +## Running RESOScript Files +The Web API Commander is able to run files written using RESO's XML-based scripting format, also known as a RESOScript. -``` -$ java -jar web-api-commander.jar --getEntities --uri --bearerToken --outputFile -``` +In order to run an RESOScript file, use a command similar to the following: -Make sure that any `uri` containing spaces or special characters is -wrapped in 'single quotes'. +``` +$ java -jar out/web-api-commander.jar --runRESOScript --inputFile /path/to/your/inputFile +``` -When using the `--useEdmEnabledClient` option, results will be verified -against Server metadata after being downloaded. If this option is chosen, -then `--serviceRoot` is required so that the Web API Commander can pull -the Server's metadata in addition to the results from the given `--uri` +A results directory will be created from the RESOScript name and timestamp when it was run, and output will be shown as the requests are made. -The `getEntitySet` action also supports the `--contentType` option, -which will change how results are written. Currently supported options -are: `JSON`, `JSON_NO_METADATA`, `JSON_FULL_METADATA`, and `XML`. +Results will be saved to the filenames specified in the given RESOScript, and error files will be created when there are exceptions, with an ".ERROR" extension appended to them. -Finally, there's an "experimental" auto-paging option which allows -all records to be pulled from the Server. In order to use this option, -pass `--limit -1` when using `--getEntities`. In the near future, -an auto-resume feature will be added so that if something happens -during transfer, the process will resume from the last record consumed. - +**RESOScript File Format** +For examples of files using the RESOScript format, see: +* [Data Dictionary 1.7 RESOScript Template](sample-data-dictionary.1.7.0.resoscript) +* [Web API Core 1.0.2 RESOScript Template](sample-web-api-server.core.1.0.2.resoscript) -## Getting raw results from a given `uri` -If additional processing using the OData Olingo library is not needed, -raw requests may be issued against the server instead. +## Generating RESO Data Dictionary Acceptance Tests +The RESO Commander can be used to generate Data Dictionary acceptance tests from the currently approved [Data Dictionary Spreadsheet](src/main/resources/RESODataDictionary-1.7.xlsx). -The `--saveRawGetRequest` action writes the raw response from a GET -request to the given `--uri` from the Web API server directly to the -given `--outputFile`. +The Commander project's copy of the sheet needs to be updated with a copy of the [DD Google Sheet](https://docs.google.com/spreadsheets/d/1SZ0b6T4_lz6ti6qB2Je7NSz_9iNOaV_v9dbfhPwWgXA/edit?usp=sharing) prior to generating reference metadata. ``` -$ java -jar web-api-commander.jar --saveRawGetRequest --uri --bearerToken --outputFile +$ java -jar path/to/web-api-commander.jar --generateDDAcceptanceTests ``` +New Cucumber BDD acceptance tests will be generated and placed in a timestamped directory relative to your current path. -Results are not checked against Server Metadata and are not written in -any specific OData format. - -Make sure that any `uri` containing spaces or special characters is -wrapped in 'single quotes'. - -Note: this option is currently being rolled into `--getEntities` with -`--contentType RAW`. Documentation will be updated once the change has -been made. - - -## Converting metadata to Open API 2 format - -The WebAPI Commander also supports converting files in EDMX format to -OpenAPI / Swagger 2.0 format. This gives servers an alternative -representation besides the OData-specific representation used by EDMX. - -It's worth mentioning that translation from EDMX to OpenAPI/Swagger is -*lossy*, meaning that some EDMX elements will not be translated. This -is due to the fact that EDMX is more specific than OpenAPI, for instance with type -representations like Integers. +To update the current tests, copy the newly generated ones into the [Data Dictionary BDD `.features` directory](src/main/java/org/reso/certification/features/data-dictionary/v1-7-0), run the `./gradlew build` task, and if everything works as expected, commit the newly generated tests. -The EDMX converter may be called as follows: +## Generating RESO Data Dictionary Reference Metadata +In addition to generating DD acceptance tests, the RESO Commander can generate reference metadata based on the current reference [Data Dictionary Spreadsheet](src/main/resources/RESODataDictionary-1.7.xlsx). ``` -$ java -jar web-api-commander.jar --convertEDMXtoOpenAPI --inputFile -``` +$ java -jar path/to/web-api-commander.jar --generateReferenceEDMX --inputFile=src/main/resources/RESODataDictionary-1.7.xlsx +``` +In order to update the Commander's version of the reference metadata, update the local copy of the [DD Google Sheet](https://docs.google.com/spreadsheets/d/1SZ0b6T4_lz6ti6qB2Je7NSz_9iNOaV_v9dbfhPwWgXA/edit?usp=sharing) _prior to_ generating metadata, replace [the local copy](src/main/resources/RESODataDictionary-1.7.edmx), and try running automated acceptance tests with `./gradlew build`. -Any errors will be displayed, and the output file is automatically created by appending `.swagger.json` to -the given EDMX `inputFile` name. +## Converting metadata to Open API 3 format +See documentation regarding running the [nodejs-based tools in odata-openapi/lib/README.md](odata-openapi/lib/README.md). -## Running RESOScript Files -The Web API Commander is able to run RESO's XML-based scripting format, otherwise known as a RESOScript. +--- -In order to run an RESOScript file, use a command similar to the following: +# RESO Certification +* [Java and the JDK](#java-and-the-jdk) +* [Cloning Commander Repository](#cloning-commander-repository) +* [Cucumber Feature Specifications](#cucumber-feature-specifications) +* [Testing Environment](#testing-environment) +* [Gradle Wrapper](#gradle-wrapper) +* [Automated RESO Web API Core Testing](#automated-reso-web-api-core-testing-in-development) +* [Automated RESO Data Dictionary Testing](#automated-reso-data-dictionary-testing) -``` -$ java -jar out/web-api-commander.jar --runRESOScript --i /path/to/your/inputFile --useEdmEnabledClient -``` - -Notice that the EDM Enabled client has been requested in the above command. This turns on strict OData checking, which -performs additional validation on query strings as well as schema validation on responses, among other things. -This feature is optional when using the `--runRESOScript` option, and may be omitted. The recommendation is to use it. - -When executing the Web API Commander, a results directory will be created as a sibling -to the RESOScript file being run, with the directory name being generated from the RESOScript filename -and the current timestamp. - -Within this directory will be a file for each RESOScript request that was run, -and those that generated errors will have ".ERROR" appended to them. Error files contain the request that -was made as well as the Java exception that was thrown, which most frequently comes from the underlying -OLingo library and provides a sufficient amount of information to determine what occurred with the query. - -For those wanting more information, a `log4j.properties` file may be created (as shown below), or you may -use the DEBUG build of the application located in `/build/libs/` identified by `-DEBUG` in the Commander jar's file name. - -RESOScript files contain zero or more Settings, Parameters, and Requests. For example: -```xml - - - - - - - - - - - - - - - - - - - - - - - -``` - -The XML DTD for this schema is as follows: - -```dtd - - - - - - - - - - - - - - - - - ]> -``` - -## Automated Web API Testing (beta) - -Currently in development is the ability for the Commander to be able to perform fully-automated Web API testing, -upon being provided a valid RESOScript file with parameters for the given server. -See [the generic Web API Core RESOScript template for more info](./web-api-server.core.1.0.2.resoscript). - -### Cucumber Feature Specifications - -[Cucumber](https://cucumber.io) is being used to describe acceptance criteria in a higher-level DSL -rather than encapsulating all of the test logic code. Cucumber's DSL is called [Gherkin](https://cucumber.io/docs/gherkin/) -and essentially allows backing test code to be organized in a logical manner that makes sense to analysts as well as -programmers. - -Testing output during runtime has been designed to be easy to read and during each step, the relevant -output for the step will be displayed in the terminal or in an IDE if you have chosen to use the testing tool -there. This can often be useful if debugging tests as a developer can step through backing test code as it's running -and inspect requests and responses in a controlled manner. - -### Testing Environment - -Under the hood, [Gradle](https://gradle.org/) is being used for automation. It works across multiple platforms -and is friendly with both Docker and Cucumber so that tests may be automated on CI/CD platforms such as Jenkins, -Circle CI, Travis, or similar, and emit standard system codes during regression testing. - -It also provides pleasing command line interaction, and plays well with Cucumber by supporting the -ability to run individual or multiple tests using tags. -### Web API Usage +## Java and the JDK +To run the Commander as an _automated testing tool_, the Java JDK must be installed. The Commander has been tested with JDK 1.8 and 10 at this point. Those using JDK 11+, please [report issues](https://github.com/RESOStandards/web-api-commander/issues) if they arise. -The Commander may be run in automated testing mode for a Web API 1.0.2 Server Certification using a terminal. -You do not need to use the Commander JAR file mentioned elsewhere in this step. -Instead, you will run the tests using Gradle for automation against a clean copy of the latest Commander code. +To see whether you have the JDK installed, type the following using your local command line environment: +``` +$ java -version +``` +If you have a Java JDK installed, your output will look something like: +``` +$ java -version +openjdk version "1.8.0_275" +OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~20.10-b01) +OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode) +``` +If you don't see something like this, you need to install the JDK: +* [Open JDK is recommended](https://openjdk.java.net/install/index.html). +* [Oracle's SE Development kit may also be used](https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html), but there may be additional licensing terms to accept. -You will need to download the source code so you can run Gradle in the root of the directory. -This assumes that you also have Java 8 (1.8.0) installed, as mentioned elsewhere in this [`README`](#getting-started). +## Cloning Commander Repository +The Commander may be run in automated testing mode using a terminal. Automated testing assumes that you have a Java 1.8+ JDK installed, as mentioned elsewhere in this [`README`](#java-and-the-jdk). First, change into the directory you want to work in and clone the Commander repository. -You will need to have Git installed. -Chances are you already do, to check, open a command line and type `git` and if it's present, -it will print some info about the app. If not, [there are instructions here](https://git-scm.com/downloads). + +You will need to have Git installed. Chances are you already do, to check, open a command line and type `git` and if it's present, it will print some info about the app. If not, [there are installation instructions here](https://git-scm.com/downloads). ##### MacOS or Linux ``` @@ -364,22 +234,77 @@ $ git clone https://github.com/RESOStandards/web-api-commander.git C:\> git clone https://github.com/RESOStandards/web-api-commander.git ``` -This will clone the repository into a directory called web-api-commander relative to whatever directory you're currently in, -which also means you'll have a fresh copy of the latest code to execute. +This will clone the repository into a directory called web-api-commander relative to whatever directory you're currently in, which also means you'll have a fresh copy of the latest code to execute. To refresh the code after you have downloaded it, issue the command `$ git pull` in the root of the directory that was just created. - -### Running Web API Tests with the Gradle Wrapper -The [Gradle wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html) provides a convenient way to automatically install Gradle when running tests. -After you have cloned the repository, as shown in the previous step, change into the directory containing -the source code from GitHub. Convenience methods have been provided for the various certification tasks. +## Cucumber Feature Specifications + +[Cucumber](https://cucumber.io) is being used to describe acceptance criteria in a higher-level DSL rather than encapsulating all of the test logic code. Cucumber's DSL is called [Gherkin](https://cucumber.io/docs/gherkin/) and essentially allows backing test code to be organized in a logical manner that makes sense to analysts as well as programmers. + +## Testing Environment -Prior to using the Commander for automated testing, you need to ensure your RESOScript has been created. -For Web API 1.0.2 Server Core Certification, use [this resoscript](web-api-server.core.1.0.2.resoscript) as a template. +Under the hood, [Gradle](https://gradle.org/) is being used for automation. It works across multiple platforms and is friendly with both Docker and Cucumber so that tests may be automated on CI/CD platforms such as Jenkins, Circle CI, Travis, or similar, and emit standard system codes during regression testing. + +## Gradle Wrapper +The [Gradle wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html) provides a convenient way to automatically download Gradle when running tests. + +After you have cloned the repository, as shown in [a previous step](#cloning-commander-repository), change into the directory containing the source code from GitHub. Convenience methods have been provided for the various certification tasks. + +## Gradle Tasks +Once the Gradle Wrapper is set up, you should be able to run the `./gradlew tasks` command in from the root of the Commander source directory in a terminal window and see the list of available tasks. +``` +$ ./gradlew tasks + +> Task :tasks + +------------------------------------------------------------ +Tasks runnable from root project +------------------------------------------------------------ +... +``` +There are both _built-in tasks_ and _RESO tasks_. +The following section is what's of interest here: +``` +RESO Certification tasks +------------------------ +generateCertificationReport_DD_1_7 - Runs Data Dictionary 1.7 tests and creates a certification report + RESOScript Example: + ./gradlew generateCertificationReport_DD_1_7 -DpathToRESOScript=/path/to/dd17.resoscript -Dminimal=true -Dstrict=true + Metadata File Example: + ./gradlew generateCertificationReport_DD_1_7 -DpathToMetadata=/path/to/RESODataDictionary-1.7.edmx -Dminimal=true -Dstrict=true + To enable strict mode, pass -Dstrict=true. All applicants MUST pass strict mode tests to be certified. + +testDataDictionary_1_7 - Runs Data Dictionary 1.7 Automated Acceptance Tests and generates a "raw" report. + RESOScript Example: + ./gradlew testDataDictionary_1_7 -DpathToRESOScript=/path/to/dd17.resoscript -DshowResponses=true -Dcucumber.filter.tags="" + Metadata File Example: + ./gradlew testDataDictionary_1_7 -DpathToMetadata=/path/to/RESODataDictionary-1.7.edmx -Dcucumber.filter.tags="" + To enable strict mode, pass -Dstrict=true. All applicants MUST pass strict mode tests to be certified. + +testDataDictionaryReferenceMetadata_1_7 - Runs Data Dictionary tests against reference metadata + +testWebApiServer_1_0_2_Core - Runs Web API Core 1.0.2 Automated Acceptance Tests. + Example: + $ ./gradlew testWebApiServer_1_0_2_Core -DpathToRESOScript=/path/to/web-api-core-1.0.2.resoscript -DshowResponses=true +``` +## Automated RESO Web API Core Testing (in-development) +Automated Web API Core automated testing tools are currently in development. See [Issue 34](https://github.com/RESOStandards/web-api-commander/issues/34) for progress. + +To use the automated RESO testing tools, you must have a [JDK installed](#java-and-the-jdk). + +### Web API Core RESOScript Template +To use the Commander for automated Web API Core testing, you need a RESOScript. + +For Web API 1.0.2 Server Core Certification, use [this resoscript](sample-web-api-server.core.1.0.2.resoscript) as a template. + +For more information regarding Parameters and Client Settings, see the [Web API Walkthrough](https://github.com/RESOStandards/web-api-commander/wiki/Walkthrough:-Automated-Web-API-Certification-Using-the-RESO-Commander#configuring-the-resoscript-file) (in-progress). -### Convenience Methods for Web API 1.0.2 Server Certification +### Web API Cucumber Acceptance Tests +The Cucumber BDD acceptance tests for Web API 1.0.2 Core certification are [here](https://github.com/RESOStandards/web-api-commander/blob/issue-37-data-dictionary-testing/src/main/java/org/reso/certification/features/web-api/web-api-server.core.1.0.2.feature). If you have any questions, please [send us an email](mailto:dev@reso.org). + +### Gradle Tasks for Web API 1.0.2 Server Certification While you may use tags to filter tests as you choose, explained in the next section, it's convenient to be able to run a predefined set of tests Web API Core Certification. @@ -399,40 +324,7 @@ $ ./gradlew testWebAPIServerCore_1_0_2 -DpathToRESOScript=/path/to/your.web-api- C:\path\to\web-api-commander> gradlew testWebAPIServerCore_1_0_2 -DpathToRESOScript=C:\path\to\your.web-api-server.core.1.0.2.resoscript -DshowResponses=true ``` -*Note: the first time you run these tasks, they will take some time as the environment must be configured and -code is being compiled from the contents of the source directory downloaded in the previous step. - -#### Advanced feature: Tag Filtering -You may also filter by tags. These are the items in the Cucumber .feature files prefixed by an `@` symbol. Expressions -may also be used with tags. See the [Cucumber Documentation](https://cucumber.io/docs/cucumber/api/#tags) for more information. - -##### MacOS or Linux -``` -$ gradle testWebAPIServerCore_1_0_2 -DpathToRESOScript=/path/to/your.web-api-server.core.1.0.2.resoscript -Dcucumber.filter.tags="@metadata" -``` - -##### Windows -``` -C:\path\to\web-api-commander> gradlew.bat testWebAPIServerCore_1_0_2 -DpathToRESOScript=C:\path\to\your.web-api-server.core.1.0.2.resoscript -Dcucumber.filter.tags="@metadata" -``` - -This would run only the tests marked as `@metadata` in the -[Web API Server 1.0.2 `.feature` file](./src/main/java/org/reso/certification/features/web-api/web-api-server.core.1.0.2.feature). - - -There is still some "glue code" to back the [test descriptions -in `.feature` files](./src/main/java/org/reso/certification/features), but it is greatly optimized by the use -of [cucumber-jvm](https://github.com/cucumber/cucumber-jvm), which has support for the reuse of backing Java -code to cut down on copypasta test development. - -The backing test code is done using [JUnit5](https://junit.org/junit5/). Normally, only those who are contributing -test code should need to know about the implementation details of how tests are run. - -Libraries necessary for the Commander to run are included in the [`web-api-commander.jar`](https://github.com/RESOStandards/web-api-commander/blob/master/build/libs/web-api-commander.jar) file, aside from Gradle, which may either be installed on the local machine, or used within a Docker container (coming soon). - -*Note*: tests are currently tagged with their Web API version implicitly being 1.0.3, such as `@REQ-WA103-END3`, -but the tests currently being run on the server for Web API 1.0.2 is the backwards-compatible subset of -Web API 1.0.3 tests. +*Note: the first time you run these tasks, they will take some time as the environment must be configured and code is being compiled from the contents of the source directory downloaded in the previous step. ### Web API Program Output @@ -502,31 +394,123 @@ Standard Resource Names requirement met! 0m4.093s ``` -This shows configuration parameters, requests, and responses in a lightweight-manner. +Detailed information will be added to a local `commander.log` file at runtime. + +--- +## Automated RESO Data Dictionary Testing +The Commander provides automated Data Dictionary 1.7 acceptance testing for RESO Certification. The DD 1.7 testing specification is available [here](https://docs.google.com/document/d/15DFf9kDX_mlGCJVOch2fztl8W5h-yd18N0_03Sb4HwM/edit?usp=sharing). + +* [Data Dictionary RESOScript Template](#data-dictionary-resoscript-template) +* [Data Dictionary Acceptance Tests](#data-dictionary-acceptance-tests) +* [Gradle Tasks for Data Dictionary Certification](#gradle-tasks-for-data-dictionary-certification) + * [Test Data Dictionary](#test-data-dictionary) + * [Generate Data Dictionary Certification Report](#generate-data-dictionary-certification-report) + +To use the RESO Commander for Data Dictionary testing, you must have the JDK installed and a local copy of the Commander repository. See [RESO Certification](#reso-certification) before proceeding. + +### Data Dictionary RESOScript Template +To use the Commander for automated Data Dictionary testing, you need a RESOScript. + +For Data Dictionary 1.7 Certification, use [this resoscript](sample-data-dictionary.1.7.0.resoscript) as a template. + +### Data Dictionary Acceptance Tests +RESO Data Dictionary Certification is driven off of the official Data Dictionary spreadsheet for each version of the dictionary, [currently DD 1.7](https://docs.google.com/spreadsheets/d/1SZ0b6T4_lz6ti6qB2Je7NSz_9iNOaV_v9dbfhPwWgXA/edit?usp=sharing). + +Cucumber BDD acceptance tests are [automatically generated](#generating-reso-data-dictionary-acceptance-tests) from the [local copy of the approved spreadsheet](src/main/resources/RESODataDictionary-1.7.xlsx). + +The generated Data Dictionary 1.7 Cucumber BDD tests are [located in this directory](https://github.com/RESOStandards/web-api-commander/tree/issue-37-data-dictionary-testing/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0). See the [property.feature file](src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/property.feature), for example, for the RESO Property Resource acceptance tests. + +If you have any questions, please [send us an email](mailto:dev@reso.org). + +### Gradle Tasks for Data Dictionary Certification +There are predefined tasks for automated RESO Data Dictionary Certification using the Commander. These can be displayed using [Gradle Tasks](#gradle-tasks) as well. + +* [Test Data Dictionary 1.7](#test-data-dictionary) +* [Generate Data Dictionary 1.7 Certification Report](#generate-data-dictionary-certification-report) + +_Note: the first time you run these tasks, they will take some time as the environment must be configured and code is being compiled from the contents of the source directory downloaded in the previous step._ + +#### Test Data Dictionary +This task tests for Data Dictionary compliance and generates a raw report in a timestamped local directory. + +There are two ways to run automated testing to check for RESO compliant Web API metadata: +* using a local metadata file +* using a RESOScript file to fetch metadata from a given server + +While RESOScript files and the use of strict mode are required for RESO Certification. In both cases, metadata are validated and then processed for RESO compliance. + +##### Data Dictionary Testing using Local Metadata +The Commander allows for a local metadata file to be specified. Not only is this used for internal acceptance testing, but is useful for developers to troubleshoot metadata locally while working on compliance. + +The Gradle task to validate local metadata can be run using the following command: + +``` +$ ./gradlew testDataDictionary_1_7 -DpathToMetadata=/path/to/RESODataDictionary-1.7.edmx +``` +You may also pass a `-Dstrict=true` flag to see whether the given metadata file would pass Certification. + +A raw report will be generated in a timestamped directory, and a `commander.log` will be generated during runtime. + +##### Data Dictionary Testing using a Data Dictionary RESOScript +During Certification, metadata are retrieved directly from an applicant's Web API server using either OAuth2 Bearer Tokens or Client Credentials. Either authentication option is currently available for RESO Certification, depending on configuration, and the applicant will provide working RESOScripts when they apply for certification. + +An example Data Dictionary RESOScript template can be found [here](sample-data-dictionary.1.7.0.resoscript). + +Once a RESOScript file has been created, it may be used with the following command: + +``` +$ ./gradlew testDataDictionary_1_7 -DpathToRESOScript=/path/to/dd17.resoscript -DshowResponses=true +``` +You may also pass a `-Dstrict=true` flag to see whether the given metadata file would pass Certification. + +A raw report will be generated in a timestamped directory, and a `commander.log` will be generated during runtime. -Detailed information will be added to a local `./commander.log` file at runtime. +#### Generate Data Dictionary Certification Report +This task tests for Data Dictionary compliance and generates both a raw report and a RESO Certification report in a timestamped directory. -## Automated Data Dictionary Testing (In Development) -Note that this feature is in development and not ready for use. Please contact josh@reso.org if you'd like to help -with the development process. +Similar to the [Test Data Dictionary 1.7](#test-data-dictionary-1.7) task, the report generator can be run for both local metadata or used with a RESOScript. ----- +For the purposes of Certification, a Certification Report MUST be generated using a RESOScript using strict mode. But it's useful to be able to produce certification reports with any local files as well. + +##### Certification Reports using Local Metadata +A RESO Certification report can be generated for local metadata by using the following commmand: +``` +$ ./gradlew generateCertificationReport_DD_1_7 -DpathToMetadata=src/main/resources/RESODataDictionary-1.7.edmx -Dminimal=true -Dstrict=true --continue +``` +Note the use of the `--continue` argument. -### Gradle Commands +You may remove the `-Dstrict=true` flag, but it will be required for RESO Certification. -The list of available gradle commands can be shown by typing the following in the console: +A "pretty" Certification report will be generated in a timestamped directory in addition to the normal raw report. +##### Certification Reports using a Data Dictionary RESOScript +A RESO Certification report can be generated using a RESOScript by using the following command: ``` -$ gradle --help +$ ./gradlew generateCertificationReport_DD_1_7 -DpathToRESOScript=/path/to/dd1.7.resoscript -Dminimal=true -Dstrict=true --continue ``` +You may remove the `-Dstrict=true` flag, but it will be required for RESO Certification. + +A "pretty" Certification report will be generated in a timestamped directory in addition to the normal raw report. + +### Data Dictionary Testing Output +To see examples of Data Dictionary testing output, you may use the `./gradlew testDataDictionaryReferenceMetadata_1_7` command to run the Data Dictionary acceptance tests on the RESO reference metadata. + +There is additional documentation about how Data Dictionary testing works, including sample output, in the [RESO Data Dictionary 1.7 Testing Specification](https://docs.google.com/document/d/15DFf9kDX_mlGCJVOch2fztl8W5h-yd18N0_03Sb4HwM/edit#heading=h.rib4osorsdcx). -These commands should not be necessary for the normal use of the Commander. There are a handful that are, however, +## Advanced feature: Tag Filtering +You may filter by tags in any of the Web API or Data Dictionary tests. These are the items in the Cucumber .feature files prefixed by an `@` symbol. Expressions may also be used with tags. This README doen't cover how to use tags, but the Commander supports them. For more information, see the [Cucumber Documentation](https://cucumber.io/docs/cucumber/api/#tags). -* `--continue Continue task execution after a task failure.` -* `-S, --full-stacktrace Print out the full (very verbose) stacktrace for all exceptions.` -* `-s, --stacktrace Print out the stacktrace for all exceptions.` -* `-t, --continuous Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change. [incubating]` +#### Examples + +**Run Web API Core Metadata Tests Only** +``` +$ gradle testWebAPIServerCore_1_0_2 -DpathToRESOScript=/path/to/your.web-api-server.core.1.0.2.resoscript -Dcucumber.filter.tags="@metadata" +``` +**Run Data Dictionary Tests on IDX Fields Only** +``` +$ ./gradlew testDataDictionary_1_7 -DpathToRESOScript=/path/to/your/dd1.7.resoscript -DshowResponses=true -Dcucumber.filter.tags="@IDX" +``` ## Docker @@ -557,9 +541,6 @@ You may also run the tests in a Docker container locally by issuing one of the f Docker must be running on your local machine. #### MacOS or Linux All-In-One Commands - - -##### Core ``` cd ~; \ rm -rf commander-tmp/; \ @@ -575,13 +556,14 @@ which is also where you will end up after runtime. #### Windows All-In-One WIP - -##### Core - ``` cd C:\;mkdir commander-tmp;cd commander-tmp;git clone https://github.com/RESOStandards/web-api-commander.git;cd web-api-commander; docker run --rm -u gradle -v C:\current\path\web-api-commander:/home/gradle/project -v C:\path\to\your\resoscripts:/home/gradle/project/resoscripts -w /home/gradle/project gradle gradle testWebAPIServer_1_0_2_Core -DpathToRESOScript=/home/gradle/project/resoscripts/your.web-api-server.core.1.0.2.resoscript -DshowResponses=true ``` +--- +## Using the Commander as a Web API Client Library +Java or Scala developers may also use the Commander as a client library, which uses the Apache Olingo library under the hood but adds things like OAuth2 support and data retrieval, validation, and serialization methods. To do so, include the [standalone Web API Commander Jar](build/libs/web-api-commander.jar) in your projects. Feel free to open issues or feature requests in the [Commander GitHub project](https://github.com/RESOStandards/web-api-commander/issues). + --- ## Logging @@ -593,11 +575,7 @@ Gradle may be debugged as well, and additional gradle commands such as turning o --- -Please contact [josh@reso.org](mailto:josh@reso.org) with any questions, bug reports, or feature requests. +## Support +Please contact [Josh](mailto:josh@reso.org) with any questions, bug reports, or feature requests. Contributions to code or documentation are welcome. -## Coming Soon -* Fully-automated Data Dictionary certification (in-progress) -* Support for authentication options in addition to Bearer tokens (Client Credentials in beta, please email for more info). -* Parallel fetch for replication -* Job Scheduling -* Excel export +You may also [open a ticket](https://github.com/RESOStandards/web-api-commander/issues). diff --git a/V4-CSDL-to-OpenAPI.xslt b/V4-CSDL-to-OpenAPI.xslt deleted file mode 100644 index 658581f7..00000000 --- a/V4-CSDL-to-OpenAPI.xslt +++ /dev/null @@ -1,5155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $ - - - - - - - - - - - #/definitions/ - - - #/components/schemas/ - - - - - - - - #/parameters/ - - - #/components/parameters/ - - - - - - - - - - - - Core - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " - - - 4XX - - - 400 - - - ":{"$ref":"#/ - - components/ - - responses/error"} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ( - - - , - - - - ) - - - - - ( - - - , - - - - )/$ReturnType - - - - - ( - - - , - - - - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { - - - "swagger":"2.0" - - - "openapi":"3.0.0" - - - - ,"info":{"title":" - - - - - - - - - - - - - - - - - - - - - - Service for namespace - - - - OData CSDL Document for namespace - - - - - ","version":" - - - - - - - - - - - - - - ","description":" - - - - - - - - - - - - - - - - - - - - - - This service is located at [ - - :// - - - /]( - - :// - - - - - - - - - - - - - /) - - - - - - \n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/ - - ) - \n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/ - [External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}]) - - - - - - "} - - - ,"externalDocs":{ - - "description":" - - ", - - "url":" - - "} - - - - , - - - - - - - ,"schemes":[" - - "],"host":" - - ","basePath":" - - " - - - ,"consumes":["application/json"] - ,"produces":["application/json"] - - - ,"servers":[{"url":" - - :// - - - "}] - - - - - - - - - ,"paths":{ - - } - - - ,"components":{ - - - - - - - definitions - - - schemas - - - - - - - - ,"parameters":{ - "top":{"name":" - - top","in":"query","description":"Show only the first n items, see [Paging - Top]( - - - https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=66 - - - http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop - - - )", - - - - - - ,"example": - - - }, - "skip":{"name":" - - skip","in":"query","description":"Skip the first n items, see [Paging - Skip]( - - - https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65 - - - http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip - - - )", - - - - - }, - - - "count":{"name": "$inlinecount","in":"query","description":"Include count of items - , see [Inlinecount](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=67)", - - - - ,"enum":["allpages","none"] - - - - - "count":{"name":" - - count","in":"query","description":"Include count of items - , see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", - - - - - - } - - - ,"search":{"name":" - - search","in":"query","description":"Search items by search phrases - , see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", - - - - } - - - ,"search":{"name":"search","in":"query","description":"Search items by search phrases - , see [Searching](https://wiki.scn.sap.com/wiki/display/EmTech/SAP+Annotations+for+OData+Version+2.0#SAPAnnotationsforODataVersion2.0-Query_Option_searchQueryOptionsearch)", - - - - } - - - } - - ,"responses":{"error":{"description":"Error", - - "content":{"application/json":{ - - "schema":{"$ref":" - - error"} - - }} - - }} - - - - - - } - - - - - } - - - - - - - - - - ," - - - securitySchemes - - - securityDefinitions - - - ":{ - - } - - - - - - , - - " - - ":{ - - - - - - - - - "type":"apiKey" - ,"name":" - - ","in":" - - - - header - - - query - - - cookie - - - " - - - - - - "type":"http" - - - - - - - - - - - - "type":"basic" - - - - - - - ,"description":" - - scheme not supported by Swagger 2.0" - - - - - - - "type":"oauth2" - - - - - - authorizationCode - - - accessCode - - - - - - - clientCredentials - - - application - - - - - implicit - - - password - - - - - - ,"flows":{" - - ":{"scopes":{ - - } - - - - - - - - - - - - - }} - - - ,"flow":" - - ","scopes":{ - - } - - - - - - - - - - - - - - - - "type":"openIdConnect" - - - - - - - - "type":"basic","description":"openIdConnect not supported by Swagger 2.0" - - - - - "type":"TODO: - - " - - Unknown Authorization type - - - - - - } - - - - - - - - ," - - ":" - - " - - - - - - - ,"description":" - - " - - - - - - , - - " - - ":" - - " - - - - - - - - - - ,"security":[ - - ] - - - - - - , - - {" - - ":[ - - ]} - - - - - , - - " - - " - - - - - - - - "schema":{ - - "type":" - - " - - - - - - - } - - - - - - - "geoPoint":{"type":"object","properties":{"type":{"type":"string","enum":["Point"],"default":"Point"},"coordinates":{"$ref":" - - geoPosition"}},"required":["type","coordinates"]}, - - - "geoPosition":{"type":"array","items":{"type":"number"},"minItems":2}, - - "error":{"type":"object","required":["error"],"properties":{"error": - {"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message": - - - {"type":"string"},"target":{"type":"string"},"details": - {"type":"array","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"target":{"type":"string"}}}} - - - {"type":"object","required":["lang","value"],"properties":{"lang":{"type":"string"},"value":{"type":"string"}}} - - - ,"innererror":{"type":"object","description":"The structure of this object is service-specific"}}}}} - - - - - - - - - - - - , - - [ - - {bg:dodgerblue} - ]++- - - - * - - - 0..1 - - - >[ - - ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - [ - - {bg:dodgerblue} - ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - [ - - {bg:dodgerblue} - ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * - - - 0..1 - - - >[ - - ] - - - - - - , - - - [ - - - {bg:orange} - - ] - - - - - - - - - - - - - - - - - [ - - - - - - - - - {bg:whitesmoke} - - - ]^ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ,[ - - ] - - ++ - - - - - - * - - - 0..1 - - - - > - - [ - - - - - - - - - {bg:whitesmoke} - - - ] - - - - - - \n\n## References - - \n- [ - - ]( - ?url= - - - - - - - - - - - ) - - - - " - - . - - ":{"type":"string", - "enum":[ - - ] - - - - } - - - - - , - - " - - " - - - - " - - . - - ":{ - - - - - - - - } - - - - - - - - - - - - , - - - - - - - - , - - - - - - - - - - - - - - " - - - ":{"type":"object" - - - - - - - - - - - - - - - - - - - - - - } - - - - - - - - - - ,"anyOf":[ - - - - - ,{} - - ] - - - - - - - - , - - { - - - - - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ,"properties":{ - - - - - - - - , - - - - | - - - - - - - - - - - , - - - - - } - - - - - - ,"required":[ - - - , - - - ] - - - - - - - , - - " - - " - - - - - - - - - - - - - - - - , - - " - - ":{ - - "anyOf":[{ - - - - }] - - - - - } - - - - - - - - - - - - - - - - "anyOf":[{ - - - - }] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "title":"Collection of - - ", - - "type":"object","properties":{"results":{ - - "type":"array","items":{ - - - - - - - - - - - - - - - ,"pattern":"^'[^']*(''[^']*)*'$" - - - - - - - - - - - - "string" - - - - - - - - - - - - - - - - - - - "example":{} - - - - - - - - - - ,"format":"base64url" - - - - - - - - - - - - ,"pattern":"^X'([0-9a-fA-F][0-9a-fA-F])*'$" - - - ,"format":"base64url" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ,"pattern":"^[-]?[0-9]+(\\.[0-9]+)?[mM]$" - - - ,"format":"decimal" - - - - - ,"multipleOf":1 - - - ,"multipleOf":1.0e- - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - . - - - - - - - - - - - - - - - - - - - - - - ,"minimum":- - - - - - - - - - ,"maximum": - - - - - - - - - " - - 0 - - " - - - - - - - - - - - - ,"format":"uint8" - - - - - - - - - - - - - - ,"format":"int8" - - - - - - - - - - - - - - ,"format":"int16" - - - - - - - - - - - - - - ,"format":"int32" - - - - - - - - - - - - - - - - - - - - - - - - - ,"pattern":"^[-]?[0-9]+[lL]$" - - - ,"format":"int64" - - - - - ,"example":"42" - - - - - - - - - - - ,"pattern":"^datetime'[0-9]{4}-[0-9]{2}-[0-9]{2}T00:00'$" - - - ,"example":"/Date(1492041600000)/" - - - ,"format":"date" - - ,"example":"2017-04-13" - - - - - - - - - - - ,"format":"double" - - - - - - - - ,"example":3.14 - - - - - - - - - ,"format":"float" - - - - - - - - ,"example":3.14 - - - - - - - - - - - ,"pattern":"^guid'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'$" - - - ,"format":"uuid" - - - - ,"example":"01234567-89ab-cdef-0123-456789abcdef" - - - - - - - - - - - ,"pattern":"^datetime'[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9](\\.[0-9]+)?)?'$" - - - ,"example":"/Date(1492098664000)/" - - - ,"format":"date-time" - - ,"example":"2017-04-13T15:51:04Z" - - - - - - - - - - - - - ,"pattern":"^time'PT(([01]?[0-9]|2[0-3])H)?([0-5]?[0-9]M)?([0-5]?[0-9](\\.[0-9]+)?S)?'$" - - - ,"example":"PT15H51M04S" - - - ,"format":"time" - - ,"example":"15:51:04" - - - - - - - - - - - ,"format":"duration" - - ,"example":"P4DT15H51M04S" - - - - - - - - - - - "type":"string" - - - - - "nullable":true, - - "anyOf":[{ - - "$ref":" - - geoPoint" - - }] - - - - - "example":{} - - - - - TODO: inline - - - - - "nullable":true, - - "anyOf":[{ - - "$ref":" - - #/definitions/ - - " - - }] - - - - - - "nullable":true, - - "anyOf":[{ - - - - - - - - }] - - - - - - - - - - - - - - - - }} - - } - - - - - - - - - - - - - - - - - - - - - - - - ,"example": - - - " - - " - - - - " - - - - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ,"enum":[ - - ] - - - - - - - - - - - - - - - - - - - ,"minimum": - - - - ,"exclusiveMinimum":true - - - - - - - - - - - - - - - - - - - - ,"maximum": - - - - - ,"exclusiveMaximum":true - - - - - - - - - - - - - - ,"pattern":" - - " - - - - - - , - - " - - " - - - - - - - - - - "$ref":" - - - - - Unknown type: - - . - - - - - - "$ref":" - - - - - - - - - Unknown qualifier: - - Node: - - - - - - . - - - - - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "type": - - [ - - " - - - - - - - - - - - - - " - - ,"null" - - - ] - - - - - - "anyOf":[{"type":" - - - - - - "}] - - - "type":" - - " - - - - ,"nullable":true - - - - - - - - ,"maxLength": - - - - - - - - - - - - - - ,"default": - - - - - - - - - - - - - - - - " - - - - " - - - - - - - - - - - - - - - - - - - - - , - - "/$batch":{"post":{"summary": "Send a group of requests","description": "Group multiple requests into a single request payload, see [Batch Requests]( - - - https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=152 - - - http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests - - - ). - - \n\n*Please note that \"Try it out\" is not supported for this request.* - - ","tags":["Batch Requests"], - - "consumes":["multipart/mixed;boundary=request-separator"],"produces":["multipart/mixed"], - - - - - "parameters":[{"name":"requestBody","in":"body", - - - "requestBody":{"required":true, - - - "description":"Batch request", - - "content":{"multipart/mixed;boundary=request-separator":{ - - "schema":{"type":"string" - - } - - ,"example":"--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET - - HTTP/1.1\nAccept: application/json\n\n\n--request-separator--"} - - } - - - - }] - - - } - - - - ,"responses":{" - - - 202 - - - 200 - - - ":{"description":"Batch response", - - - "content":{"multipart/mixed":{ - - "schema":{"type":"string" - - } - - ,"example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--"} - - } - - }, - - }}} - - - - - ,"tags":[ - - - , - - - {"name":" - - - - - - - - - - - ","description":" - - - "} - - - ] - - - - - - - - ,"tags":[" - - - - - - - - - - - - "," - - - - - "] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\nRequired filter properties: - - \n- - - - - - - - - , - - {"name":" - - orderby","in":"query","description":"Order items by property values, see [Sorting]( - - - https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65 - - - http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby - - - )", - - "explode":false,"schema":{ - - "type":"array","uniqueItems":true,"items":{"type":"string","enum":[ - - - , - - " - - "," - - desc" - - ]}} - - } - - - - - - - - - , - - {"name":" - - select","in":"query","description":"Select properties to be returned, see [Select]( - - - https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68 - - - http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect - - - )", - - "explode":false,"schema":{ - - "type":"array","uniqueItems":true,"items":{"type":"string","enum":[ - - - , - - " - - " - - ]}} - - } - - - - - - - - - , - - {"name":" - - expand","in":"query","description":"Expand related entities, see [Expand]( - - - https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63 - - - http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand - - - )", - - "explode":false,"schema":{ - - "type":"array","uniqueItems":true,"items":{"type":"string","enum":[ - - "*", - - - - , - - " - - " - - ]}} - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - . - - - - - - - Collection( - - - - ) - - - - - Collection( - - - - ) - - - - "/ - - ":{ - - - "parameters":[ - - ] - - - - - , - - "get":{ - - - - - Get - - entities from - - - related - - - - - - - - - - - ,"parameters":[ - - - - - - - ] - - - - - - - - - - - - - - - - Retrieved entity - - - Retrieved entities - - - - - - } - - - - - , - - - "post":{ - - - - - Add new entity to - - related - - - - - - - - - - - - - ,"parameters":[{"name":" - - ","in":"body", - - - ,"requestBody":{"required":true, - - - - - - - - - "content":{"application/json":{ - - "schema":{ - - - - - } - - }} - - } - - ] - - - - - - - - - } - - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - . - - - - - - - - , - - - - - - - - - - - - - - , - - - - - - - - - "/ - - ":{ - - - "parameters":[ - - ] - - - - - - - - - - - - - - - - - - - - - , - - "get":{ - - - - - Get - - entity from - - - related - - - - by key - - - - - - - - - ,"parameters":[ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] - - - - - - - } - - - - - - - - , - - " - - ":{ - - - - - Update - - entity in - - - related - - - - - - - - - - , - - - "parameters":[{"name":" - - ","in":"body", - - - "requestBody":{"required":true, - - - - - - - - "content":{"application/json":{ - - "schema":{ - - "title":"Modified - - ","type":"object","properties":{"d":{ - - - - - - - }} - - - - }}] - - - }}}} - - - - - - } - - - - - - - - - , - - "delete":{ - - - - - Delete - - entity from - - - related - - - - - - - - - - - } - - - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - {"name":"If-Match","in":"header","description":"ETag", - - "schema":{ - - "type":"string" - - } - - } - - - - - - "description":" - - - - - - - - - - - - - - ", - - - - - - - - - / - - - ( - - - - - - - - - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ERROR: Entity type without key and without base type: - - . - - - - - ERROR: neither key nor base type - - - - - - - - - - - - / - - - , - - - - - - - - - - - - - = - - - - - { - - - - - - - - - - - - - - } - - - - - - - - - - binary' - - - datetime' - - - datetimeoffset' - - - guid' - - - time' - - - - - - ' - - - - - - - - - - ' - - - - - - ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "ERROR: entity type with neither key nor base type" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - {"name":" - - - - - - - - - - - - - - ","in":"path","required":true,"description":" - - - - - - - - - - - key: - - - - - - - - - - - ", - - - - "x-error":"key property not found" - - Key property - - not found for entity type - - - - - "type": - - - "integer","format":"int64" - - - "integer","format":"int32" - - - - "string" - - - - - "schema":{ - - - - - - } - - - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "/ - - ":{"post":{ - - - - - Invoke action - - - - - - - - - - - - - - - - - - - - - - - - ,"parameters":[ - - ] - - - - - ,"parameters":[{"name":"body","in":"body", - - - ,"requestBody":{ - - - "description":"Action parameters", - - "content":{"application/json":{ - - "schema":{"type":"object" - - - - - - }}] - - - }}}} - - - - - - - - - - - - - }} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "/ - - - ( - - ) - - ":{"get":{ - - - - - Invoke function - - - - - - - - - - - - - - - - - - - - - ,"parameters":[ - - ] - - - - - - - - }} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {"$ref":" - - top"} - - - - - , - - {"$ref":" - - skip"} - - - - - , - - {"$ref":" - - search"} - - - - - , - - {"name":" - - filter","in":"query","description":"Filter items by property values, see [Filtering]( - - - https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64 - - - http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter - - - ) - - - - ", - - - - - - - ,"required":true - - } - - - - - , - - {"$ref":" - - count"} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ,"responses":{ - - - "204":{"description":" - - "} - - - " - - ":{"description":" - - ", - - "content":{"application/json":{ - - "schema":{ - - "title":" - - - Wrapper - - - Collection of - - - - - - - ","type":"object","properties":{" - - - d - - ":{"type":"object","properties":{" - - - - - value - - - ":{ - - - "allOf":[{ - - - - - - - - - - - - - - - - "anyOf":[{ - - - - }] - - - - }, - - {"properties":{ - - "@ - - - odata. - - deltaLink":{"type":"string","example":" - - / - - ?$deltatoken=opaque server-generated token for fetching the delta" - - }}}] - - - - }} - - - }} - - - }} - - }} - - - , - - } - - - - - - - - ,"/ - - / - - - - - . - - - - . - - - - ":{"post":{ - - - Invoke action - - - - - - - - - - ,"parameters":[ - - - - - - - - , - - {"name":"body","in":"body", - "description":"Action parameters", - "schema":{"type":"object" - - - - }} - - ] - - - - ] - - - ,"requestBody":{ - "description":"Action parameters", - "content":{"application/json":{ - "schema":{"type":"object" - - - - }}}} - - - - - - - - - - }} - - - - - - - - - - - - - - - - - - - ,"/ - - / - - - - - - . - - - - . - - - - ( - - )":{"get":{ - - - Invoke function - - - - - - - - - ,"parameters":[ - - - - - ] - - - - - - - }} - - - - - - - - - - - - - - "anyOf":[{ - - - - }] - - - - - - - - , - - {"name":" - - - - ","in":"query", - - - ","in":"path", - - - - - "required":true, - - - - - - - - - - - Value needs to be in hex-pair format, enclosed in single quotes, and prefixed with `X`, e.g. `X'4F44617461'` - - - - - - Value needs to be enclosed in single quotes and prefixed with `datetime`, e.g. `datetime'2017-12-31T00:00'` - - - Value needs to be enclosed in single quotes and prefixed with `datetimeoffset`, e.g. `datetimeoffset'2017-12-31T23:59:59Z'` - - - Value needs to be in duration format, enclosed in single quotes, and prefixed with `time`, e.g. `time'PT23H59M59.999S'` - - - Value needs to be suffixed with `M` - - - Value needs to be enclosed in single quotes and prefixed with `guid`, e.g. `guid'01234567-0123-0123-0123-0123456789ab'` - - - - - - Value needs to be suffixed with `L` - - - Value needs to be enclosed in single quotes - - - - Parameter of type - - - - - - - - "description":" - - - \n( - - - - ) - - ", - - - "schema":{ - - - - - - - - } - - } - - - - - ,"maxLength": - - - - - - - - - - - - - - - - - , - - - = - - - - { - - } - - - - - - - - - - - - - - - - "summary":" - - - - - - - - - " - - - - - - - - - ,"description":" - - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "summary":" - - - - - - - - - - - - " - - - ,"description":" - - - - - \n - - - - - \n - - - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ,"title":" - - - " - - - ,"title":" - - - " - - - ,"title":" - - - " - - - - - ,"description":" - - - - - \n - - - - - \n - - - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n - - - - \n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - " - - ":{ - - - - , - - - } - - - - - - { - - } - - - - - - - - - - - - , - - " - - ":{ - - - - - - - - , - - - - } - - - - - - - - " - - ":{ - - - - - - } - - - - - - - - - - - - - - - , - - - , - - - - - - - - - - - - - , - - - - - - - - - "TODO:@ - - ":" - - " - - - - - "TODO: - - ":{ - - } - - - - - "TODO:text()":" - - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .openapi - - 3 - - .json - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - diff --git a/build.gradle b/build.gradle index 4cbe858e..c8edce4d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,6 @@ +import java.text.DateFormat +import java.text.SimpleDateFormat + plugins { // Apply the java plugin to add support for Java id 'java' @@ -20,6 +23,7 @@ repositories { dependencies { compile 'com.google.guava:guava:28.2-jre' + compile 'com.google.inject:guice:4.0' compile 'commons-cli:commons-cli:1.4' @@ -32,16 +36,25 @@ dependencies { compile 'org.apache.olingo:odata-commons-core:4.7.1' compile 'org.apache.olingo:odata-client-core:4.7.1' + compile 'org.apache.poi:poi:3.9' + compile 'org.apache.poi:poi-ooxml:3.9' + + compile 'io.rest-assured:rest-assured:4.2.0' compile 'io.rest-assured:json-path:4.2.0' compile 'io.rest-assured:json-schema-validator:4.2.0' compile 'io.cucumber:cucumber-java8:5.4.0' + compile 'io.cucumber:cucumber-java:5.4.0' compile 'io.cucumber:cucumber-junit:5.4.0' + compile 'io.cucumber:cucumber-guice:5.4.0' + compile 'io.cucumber:cucumber-core:5.4.0' compile 'net.masterthought:cucumber-reporting:5.1.1' compile 'com.networknt:json-schema-validator:1.0.35' + compile 'com.google.code.gson:gson:2.8.6' + compile 'org.apache.commons:commons-text:1.9' implementation 'org.mockito:mockito-core:3.3.3' } @@ -74,6 +87,11 @@ tasks.withType(JavaCompile) { // task for Web API Server 1.0.2 Core Testing task testWebApiServer_1_0_2_Core() { + group = 'RESO Certification' + description = 'Runs Web API Core 1.0.2 Automated Acceptance Tests.' + + '\n Example: ' + + '\n $ ./gradlew testWebApiServer_1_0_2_Core -DpathToRESOScript=/path/to/web-api-core-1.0.2.resoscript -DshowResponses=true\n' + dependsOn jar doLast { javaexec { @@ -96,13 +114,112 @@ task testWebApiServer_1_0_2_Core() { } } -//used for internal Commander testing -test { - dependsOn assemble, compileTestJava +String pathToMetadata = null, + pathToRESOScript = null, + certFileName = null, + certOutputDir = null, + certJsonPath = null + +// task for Data Dictionary 1.7 +task testDataDictionary_1_7() { + group = 'RESO Certification' + description = 'Runs Data Dictionary 1.7 Automated Acceptance Tests and generates a "raw" report.' + + '\n RESOScript Example:' + + '\n ./gradlew testDataDictionary_1_7 -DpathToRESOScript=/path/to/dd17.resoscript -DshowResponses=true -Dcucumber.filter.tags=""' + + '\n Metadata File Example:' + + '\n ./gradlew testDataDictionary_1_7 -DpathToMetadata=/path/to/RESODataDictionary-1.7.edmx -Dcucumber.filter.tags=""' + + '\n To enable strict mode, pass -Dstrict=true. All applicants MUST pass strict mode tests to be certified.\n' + + dependsOn jar + doLast { + javaexec { + main = 'io.cucumber.core.cli.Main' + classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output + systemProperties = System.getProperties() + + pathToMetadata = System.getProperty('pathToMetadata', null) + pathToRESOScript = System.getProperty('pathToRESOScript', null) + + if (pathToMetadata != null) { + certFileName = pathToMetadata + .substring(Math.max(pathToMetadata.lastIndexOf(File.separator)+1, 0), pathToMetadata.lastIndexOf('.')) + } else if (pathToRESOScript != null) { + certFileName = pathToRESOScript + .substring(Math.max(pathToRESOScript.lastIndexOf(File.separator)+1, 0), pathToRESOScript.lastIndexOf('.')) + } + + DateFormat df = new SimpleDateFormat("yyyyMMddHHMMssS") + certOutputDir = 'DD1.7-results' + (certFileName != null ? '-' + certFileName : '') + '-' + df.format(new Date()) + certJsonPath = certOutputDir + '/data-dictionary-1.7.json' + + args = [ + '--strict', + '--plugin', + 'pretty', + '--plugin', + 'json:' + certJsonPath, + '--plugin', + 'html:' + certOutputDir + '/data-dictionary-1.7.html', + '--glue', + 'org.reso.certification.stepdefs#DataDictionary', + 'src/main/java/org/reso/certification/features/data-dictionary/v1-7-0', + '--tags', + (systemProperties.get('cucumber.filter.tags', '').toString().trim().length() > 0 + ? systemProperties.get('cucumber.filter.tags') : '') + ] + } + } +} + +task generateCertificationReport_DD_1_7() { + group = 'RESO Certification' + description = 'Runs Data Dictionary 1.7 tests and creates a certification report' + + '\n RESOScript Example:' + + '\n ./gradlew generateCertificationReport_DD_1_7 -DpathToRESOScript=/path/to/dd17.resoscript -Dminimal=true -Dstrict=true' + + '\n Metadata File Example:' + + '\n ./gradlew generateCertificationReport_DD_1_7 -DpathToMetadata=/path/to/RESODataDictionary-1.7.edmx -Dminimal=true -Dstrict=true' + + '\n To enable strict mode, pass -Dstrict=true. All applicants MUST pass strict mode tests to be certified.\n' + + dependsOn testDataDictionary_1_7 + doLast { + javaexec { + System.setProperty('pathToJsonResults', certJsonPath) + System.setProperty('reportDescription', 'RESO Data Dictionary 1.7 Certification Report') + systemProperties = System.getProperties() + classpath = sourceSets.main.runtimeClasspath + main = 'org.reso.certification.reporting.CertificationReportGenerator' + } + } +} + +task testDataDictionaryReferenceMetadata_1_7() { + group = 'RESO Certification' + description = 'Runs Data Dictionary tests against reference metadata\n' + doLast { javaexec { main = "io.cucumber.core.cli.Main" + classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output + System.setProperty('pathToMetadata', 'src/main/resources/RESODataDictionary-1.7.edmx') systemProperties = System.getProperties() + args = [ + '--strict', + '--plugin', + 'pretty', + '--glue', + 'org.reso.certification.stepdefs#DataDictionary', + 'src/main/java/org/reso/certification/features/data-dictionary/v1-7-0' + ] + } + } +} + +//used for internal Commander Web API acceptance testing +test { + dependsOn assemble, compileTestJava, testDataDictionaryReferenceMetadata_1_7 + doLast { + javaexec { + main = "io.cucumber.core.cli.Main" classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output args = ['--strict', '--plugin', @@ -113,4 +230,4 @@ test { ] } } -} +} \ No newline at end of file diff --git a/build/libs/web-api-commander.jar b/build/libs/web-api-commander.jar index 72102efa..4acc3243 100644 Binary files a/build/libs/web-api-commander.jar and b/build/libs/web-api-commander.jar differ diff --git a/odata-openapi/.gitignore b/odata-openapi/.gitignore new file mode 100644 index 00000000..ce347f68 --- /dev/null +++ b/odata-openapi/.gitignore @@ -0,0 +1,3 @@ +examples/*.zip +node_modules +temp diff --git a/odata-openapi/CONTRIBUTING.md b/odata-openapi/CONTRIBUTING.md new file mode 100644 index 00000000..ce782f03 --- /dev/null +++ b/odata-openapi/CONTRIBUTING.md @@ -0,0 +1,20 @@ +
+

Repository Contributions, Participation, and Public Access

+ +

Who may Contribute? Contributors to this repository are expected to be Members of the +OASIS Open Data Protocol (OData) Technical Committee, for any +substantive contributions. Anyone wishing to participate +in the TC's technical activity is invited to join as a TC Member. +Member in this context means any TC role or office other than OASIS TC Observer, per +TC Process +(Member, Voting Member, Persistent Non-Voting Member; Chair, Secretary...)

+ +

Persons who are not TC members are invited to open issues and provide comments using this repository's GitHub Issues tracking facility or using the +TC's comment list. All such content created in GitHub Issues and/or posted to the TC's archived comment list is governed by the terms of the OASIS Feedback License.

+ +

Use of Contributions. As with all OASIS Technical Committee assets (TC Wiki, TC Issues Tracker, TC General Discussion List archives, TC OASIS Library assets), content placed into this GitHub repository is visible and publicly accessible. Subject to applicable licensing rules, the repository content may be re-used freely, including the creation and publication of derivative works.

+ +

Cloning and forking. May users clone and fork this repository? Yes. Just as versioned content maintained in any OASIS TC's SVN/Subversion repository may be checked out to a remote SVN repository and used by anyone, this GitHub repository may be forked or cloned for use by any party. Compare, e.g., svn checkout https://tools.oasis-open.org/version-control/svn/dita/trunk/doctypes/ dita-doctypes.

+ +

Please see the README for general description of this repository, and the LICENSE file for licensing.

+
diff --git a/odata-openapi/LICENSE.md b/odata-openapi/LICENSE.md new file mode 100644 index 00000000..2fc84def --- /dev/null +++ b/odata-openapi/LICENSE.md @@ -0,0 +1,7 @@ +
+

License Terms

+ +

Content in this GitHub code repository has been contributed by OASIS TC Members, and is governed by the OASIS policies, including the Intellectual Property Rights (IPR) Policy, the Technical Committee (TC) Process, Bylaws, and the Technical Committee's choice of IPR Mode (viz, RF on RAND Mode), including any applicable declarations. Feedback from non-TC members, if any, is governed by the terms of the OASIS Feedback License.

+ +

Description of this repository is presented in the README file, and guidelines for contribution/participation are given in the CONTRIBUTING file.

+
diff --git a/odata-openapi/README.md b/odata-openapi/README.md new file mode 100644 index 00000000..292a13aa --- /dev/null +++ b/odata-openapi/README.md @@ -0,0 +1,54 @@ +
+

README

+ +

Members of the OASIS Open Data Protocol (OData) Technical Committee create and manage technical content in this TC GitHub repository ( https://github.com/oasis-tcs/odata-openapi ) as part of the TC's chartered work (i.e., the program of work and deliverables described in its charter).

+ +

OASIS TC GitHub repositories, as described in GitHub Repositories for OASIS TC Members' Chartered Work, are governed by the OASIS TC Process, IPR Policy, and other policies, similar to TC Wikis, TC JIRA issues tracking instances, TC SVN/Subversion repositories, etc. While they make use of public GitHub repositories, these TC GitHub repositories are distinct from OASIS Open Repositories, which are used for development of open source licensed content.

+
+ +
+

Description

+ +

The purpose of this repository is to support development of tools for producing OpenAPI descriptions for OData services.

+

Planned work items include: +

    +
  • convert OData CSDL JSON or OData CSDL XML to OpenAPI JSON
  • +
  • example XML files
  • +
  • example openapi.json files
  • +
  • example files for the live odata.org services
  • +

+ +
+ +
+

Contributions

+

As stated in this repository's CONTRIBUTING file, contributors to this repository are expected to be Members of the OASIS OData TC, for any substantive change requests. Anyone wishing to contribute to this GitHub project and participate in the TC's technical activity is invited to join as an OASIS TC Member. Public feedback is also accepted, subject to the terms of the OASIS Feedback License.

+
+ +
+

Licensing

+

Please see the LICENSE file for description of the license terms and OASIS policies applicable to the TC's work in this GitHub project. Content in this repository is intended to be part of the OData TC's permanent record of activity, visible and freely available for all to use, subject to applicable OASIS policies, as presented in the repository LICENSE file.

+
+ + +

Further Description of this Repository

+ +The OData TC has published the [OData to OpenAPI Mapping Version 1.0](http://docs.oasis-open.org/odata/odata-openapi/v1.0/odata-openapi-v1.0.html), a recommendation on how to create OpenAPI descriptions for OData services. This project contains two proof-of-concept implementations of that mapping, [one using JavaScript](lib), and [one using XSLT](tools). + +The [`examples` folder](examples) contains [OpenAPI 3.0.2](https://github.com/OAI/OpenAPI-Specification) descriptions that have been created from the XML `$metadata` documents of live and example OData services with these proof-of-concept implementations. + +The entity-relationship diagrams visualizing the resource models of each service are generated on-the-fly with [yUML](http://yuml.me/). + +OpenAPI descriptions for live example OData services at [www.odata.org](http://www.odata.org/) + - [TripPin (read/write)](http://petstore.swagger.io/?url=https://raw.githubusercontent.com/oasis-tcs/odata-openapi/master/examples/TripPin.openapi3.json) + - [Simple read/write service](http://petstore.swagger.io/?url=https://raw.githubusercontent.com/oasis-tcs/odata-openapi/master/examples/example.openapi3.json) + - [Northwind (read)](http://petstore.swagger.io/?url=https://raw.githubusercontent.com/oasis-tcs/odata-openapi/master/examples/Northwind.openapi3.json) + +OpenAPI descriptions for OData services that reference each other (cross-service references) + - [People](http://petstore.swagger.io/?url=https://raw.githubusercontent.com/oasis-tcs/odata-openapi/master/examples/People.openapi3.json) + - [Products](http://petstore.swagger.io/?url=https://raw.githubusercontent.com/oasis-tcs/odata-openapi/master/examples/Products.openapi3.json) + +
+

Contact

+

Please send questions or comments about OASIS TC GitHub repositories to the OASIS TC Administrator. For questions about content in this repository, please contact the TC Chair or Co-Chairs as listed on the the OData TC's home page.

+
diff --git a/odata-openapi/doc/Annotations.md b/odata-openapi/doc/Annotations.md new file mode 100644 index 00000000..c29f5527 --- /dev/null +++ b/odata-openapi/doc/Annotations.md @@ -0,0 +1,90 @@ +# Supported Annotations + +The OData to OpenAPI Mapping can be fine-tuned via annotations in the CSDL (`$metadata`) XML documents. + +See [Frequently Asked Questions](FAQ.md) for examples on how to use these annotations. + + +## [Core](https://github.com/oasis-tcs/odata-vocabularies/blob/master/vocabularies/Org.OData.Core.V1.md) + +Term | Annotation Target | OpenAPI field +-----|-------------------|-------------- +`Computed` | Property | omit from Create and Update structures +`DefaultNamespace` | Schema | path templates for actions and functions without namespace prefix +`Description` | Action, ActionImport, Function, FunctionImport | `summary` of Operation Object +`Description` | EntitySet, Singleton | `description` of Tag Object +`Description` | EntityType | `description` of Request Body Object +`Description` | ComplexType, EntityType, EnumerationType, Parameter, Property, TypeDefinition | `title` of Schema Object +`Description` | Schema, EntityContainer | `info.title` +`Example` | Property | `example` of Schema Object +`Immutable` | Property | omit from Update structure +`LongDescription` | Action, ActionImport, Function, FunctionImport | `description` of Operation Object +`LongDescription` | ComplexType, EntityType, EnumerationType, Parameter, Property, TypeDefinition | `description` of Schema Object +`LongDescription` | Schema, EntityContainer | `info.description` +`Permissions:Read` | Property | omit read-only properties from Create and Update structures +`SchemaVersion` | Schema | `info.version` + + +## [Capabilities](https://github.com/oasis-tcs/odata-vocabularies/blob/master/vocabularies/Org.OData.Capabilities.V1.md) + +Term | Annotation Target | OpenAPI field +-----|-------------------|-------------- +`CountRestrictions`
 `/Countable` | EntitySet | `$count` system query option for `GET` operation +`DeleteRestrictions`
 `/Deletable` | EntitySet, Singleton | `DELETE` operation for deleting an existing entity + `/Description` | EntitySet, Singleton | `summary` of Operation Object + `/LongDescription` | EntitySet, Singleton | `description` of Operation Object +`ExpandRestrictions`
 `/Expandable` | EntitySet, Singleton | `$expand` system query option for `GET` operations +`FilterRestrictions`
 `/Filterable` | EntitySet | `$filter` system query option for `GET` operation + `/RequiredProperties` | EntitySet | required properties in `$filter` system query option for `GET` operation (parameter description only) + `/RequiresFilter` | EntitySet | `$filter` system query option for `GET` operation is `required` +`IndexableByKey` | EntitySet | `GET`, `PATCH`, and `DELETE` operations for a single entity within an entity set +`InsertRestrictions`
 `/Insertable` | EntitySet | `POST` operation for inserting a new entity + `/Description` | EntitySet | `summary` of Operation Object + `/LongDescription` | EntitySet | `description` of Operation Object +`KeyAsSegmentSupported` | EntityContainer | `paths` URL templates use key-as-segment style instead of parenthesis style +`NavigationRestrictions`
 `/RestrictedProperties` | EntitySet, Singleton | operations via a navigation path +  `/DeleteRestrictions/...` | EntitySet, Singleton | `DELETE` operation for deleting a contained entity via a navigation path +  `/FilterRestrictions/...` | EntitySet, Singleton | `$filter` system query option for reading related entities via a navigation path +  `/InsertRestrictions/...` | EntitySet, Singleton | `POST` operation for inserting a new related entity via a navigation path +  `/ReadByKeyRestrictions/...` | EntitySet, Singleton | `GET` operation for reading a contained entity by key via a navigation path +  `/ReadRestrictions/...` | EntitySet, Singleton | `GET` operation for reading related entities via a navigation path +  `/SearchRestrictions/...` | EntitySet, Singleton | `$search` system query option for reading related entities via a navigation path +  `/SelectSupport/...` | EntitySet, Singleton | `$select` system query option for reading related entities via a navigation path +  `/SkipSupported` | EntitySet, Singleton | `$skip` system query option for reading contained entities via a navigation path +  `/SortRestrictions/...` | EntitySet, Singleton | `$orderby` system query option for reading related entities via a navigation path +  `/TopSupported` | EntitySet, Singleton | `$top` system query option for reading contained entities via a navigation path +  `/UpdateRestrictions/...` | EntitySet, Singleton | `PATCH` operation for modifying a contained entity via a navigation path +`ReadByKeyRestrictions`
 `/Readable` | EntitySet | `GET` operation for reading a single entity by key + `/Description` | EntitySet | `summary` of Operation Object + `/LongDescription` | EntitySet | `description` of Operation Object +`ReadRestrictions`
 `/Readable` | EntitySet, Singleton | `GET` operation for reading an entity set or singleton + `/Description` | EntitySet, Singleton | `summary` of Operation Object + `/LongDescription` | EntitySet, Singleton | `description` of Operation Object +`SearchRestrictions`
 `/Searchable` | EntitySet | `$search` system query option for `GET` operation +`SelectSupport`
 `/Supported` | EntitySet, Singleton | `$select` system query option for `GET` operation +`SkipSupported` | EntitySet | `$skip` system query option for `GET` operation +`SortRestrictions`
 `/NonSortableProperties` | EntitySet | properties not listed in `$orderby` system query option for `GET` operation + `/Sortable` | EntitySet | `$orderby` system query option for `GET` operation +`TopSupported` | EntitySet | `$top` system query option for `GET` operation +`UpdateRestrictions`
 `/Updatable` | EntitySet, Singleton | `PATCH` operation for modifying an existing entity + `/Description` | EntitySet, Singleton | `summary` of Operation Object + `/LongDescription` | EntitySet, Singleton | `description` of Operation Object + + +## [Validation](https://github.com/oasis-tcs/odata-vocabularies/blob/master/vocabularies/Org.OData.Validation.V1.md) + +Term | Annotation Target | OpenAPI field +-----|-------------------|-------------- +`AllowedValues` | Property | `enum` of Schema Object - list of allowed (string) values +`Exclusive` | Property | `exclusiveMinimum`/`exclusiveMaximum` of Schema Object +`Maximum` | Property | `maximum` of Schema Object +`Minimum` | Property | `minimum` of Schema Object +`Pattern` | Property | `pattern` of Schema Object + + +## [Authorization](https://github.com/oasis-tcs/odata-vocabularies/blob/master/vocabularies/Org.OData.Authorization.V1.md) + +Term | Annotation Target | OpenAPI field +-----|-------------------|-------------- +`Authorizations` | EntityContainer | `securitySchemes` of Components Object / `securityDefinitions` of Swagger Object +`SecuritySchemes` | EntityContainer | `security` of OpenAPI / Swagger Object diff --git a/odata-openapi/doc/FAQ.md b/odata-openapi/doc/FAQ.md new file mode 100644 index 00000000..0940b59e --- /dev/null +++ b/odata-openapi/doc/FAQ.md @@ -0,0 +1,77 @@ +# Frequently Asked Questions + +Examples for typical questions on how to fine-tune the generated OpenAPI descriptions. + +The examples here do not cover the full list of [supported annotions](Annotations.md). + +## How to suppress GET (list and by-key) on an entity set? + +To suppress both types of GET requests to an entity set, annotate it with + +```xml + + + + + +``` + +## How to suppress GET (list) on an entity set? + +To suppress only GET list requests to an entity set and still allow GET by-key, annotate it with + +```xml + + + + + + + + + + +``` + +## How to suppress GET (by-key) on an entity set? + +To suppress only GET by-key requests to an entity set and still allow GET list, annotate it with + +```xml + + + + + + + + + +``` + +## How to suppress GET and POST along all navigation properties? + +```xml + + + + + +``` + +## How to suppress GET and POST along a specific navigation property? + +```xml + + + + + + + + + + + + +``` diff --git a/odata-openapi/examples/ExampleService.openapi3.json b/odata-openapi/examples/ExampleService.openapi3.json new file mode 100644 index 00000000..93fb041b --- /dev/null +++ b/odata-openapi/examples/ExampleService.openapi3.json @@ -0,0 +1,9133 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace OData.Demo", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Customer{bg:lightslategray}],[Customer]++-[Address],[Customer]++-[PhoneNumber],[Supplier{bg:lightslategray}],[Supplier]-*[Product],[Supplier]++-*[Address],[Product{bg:lightslategray}],[Product]*-[Category],[Product]-*[OrderItem],[Order{bg:lightslategray}],[Order]-*[OrderItem],[Order]*-[Customer],[Order]++-[Address],[Customer]^[VipCustomer{bg:lightslategray}],[Category{bg:lightslategray}],[OrderItem{bg:lightslategray}],[OrderItem]->[Currency],[Sales{bg:lightslategray}],[Sales]*-[Currency],[Sales]*-[Customer],[Sales]*-[Product],[Employee{bg:lightslategray}],[LeaveRequest{bg:lightslategray}],[LeaveRequest]*-[Employee],[Address],[Address]->[Country],[Address]->[City],[Address]^[AddressWithLocation],[Country{bg:lightslategray}],[Supplier]^[PreferredSupplier{bg:lightslategray}],[PreferredSupplier]-0..1>[Employee],[Employee]^[Manager{bg:lightslategray}],[Manager]0..1-*[Employee],[Manager]-*[LeaveRequest],[Time{bg:lightslategray}],[Time]-*[Sales],[SalesOrganization{bg:lightslategray}],[SalesOrganization]-*[Sales],[SalesOrganization]-0..1>[SalesOrganization],[Currency{bg:lightslategray}],[City{bg:lightslategray}],[PhoneNumber],[PhoneNumber]^[CellPhoneNumber],[Cities%20{bg:lawngreen}]++-*>[City],[Currencies%20{bg:lawngreen}]++-*>[Currency],[SalesOrganizations%20{bg:lawngreen}]++-*>[SalesOrganization],[Time%20{bg:lawngreen}]++-*>[Time],[Countries%20{bg:lawngreen}]++-*>[Country],[LeaveRequests%20{bg:lawngreen}]++-*>[LeaveRequest],[Employees%20{bg:lawngreen}]++-*>[Employee],[Sales%20{bg:lawngreen}]++-*>[Sales],[OrderItems%20{bg:lawngreen}]++-*>[OrderItem],[Categories%20{bg:lawngreen}]++-*>[Category],[Orders%20{bg:lawngreen}]++-*>[Order],[Products%20{bg:lawngreen}]++-*>[Product],[Suppliers%20{bg:lawngreen}]++-*>[Supplier],[Customers%20{bg:lawngreen}]++-*>[Customer])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Customers" + }, + { + "name": "Suppliers" + }, + { + "name": "Products" + }, + { + "name": "Orders" + }, + { + "name": "Categories" + }, + { + "name": "OrderItems" + }, + { + "name": "Sales" + }, + { + "name": "Employees" + }, + { + "name": "LeaveRequests" + }, + { + "name": "Countries" + }, + { + "name": "Time" + }, + { + "name": "SalesOrganizations" + }, + { + "name": "Currencies" + }, + { + "name": "Cities" + } + ], + "paths": { + "/Customers": { + "get": { + "summary": "Get entities from Customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "CompanyName", + "CompanyName desc", + "BirthDate", + "BirthDate desc", + "CountryName", + "CountryName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Fax", + "Fax desc", + "Address/Street", + "Address/Street desc", + "Address/Region", + "Address/Region desc", + "Address/PostalCode", + "Address/PostalCode desc", + "EmailAddresses", + "EmailAddresses desc", + "Phone/Number", + "Phone/Number desc", + "Phone/Type", + "Phone/Type desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "CompanyName", + "BirthDate", + "CountryName", + "ContactName", + "ContactTitle", + "Fax", + "Address", + "EmailAddresses", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "Sales", + "Address/Country", + "Address/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Customers by key", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "CompanyName", + "BirthDate", + "CountryName", + "ContactName", + "ContactTitle", + "Fax", + "Address", + "EmailAddresses", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "Sales", + "Address/Country", + "Address/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Customer-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customers", + "tags": [ + "Customers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{ID}')/Orders": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Customers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Completed", + "Completed desc", + "ShippingAddress/Street", + "ShippingAddress/Street desc", + "ShippingAddress/Region", + "ShippingAddress/Region desc", + "ShippingAddress/PostalCode", + "ShippingAddress/PostalCode desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Completed", + "ShippingAddress" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Items", + "Customer", + "ShippingAddress/Country", + "ShippingAddress/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Customers", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{ID}')/Sales": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Sales", + "tags": [ + "Customers", + "Sales" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Amount", + "Amount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Time", + "Currency", + "Customer", + "SalesOrganization", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Sales", + "tags": [ + "Customers", + "Sales" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{ID}')/Address/Country": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Country", + "tags": [ + "Customers", + "Countries" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name", + "Continent" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{ID}')/Address/City": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related City", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "EmailAddresses", + "EmailAddresses desc", + "Addresses/Street", + "Addresses/Street desc", + "Addresses/Region", + "Addresses/Region desc", + "Addresses/PostalCode", + "Addresses/PostalCode desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "EmailAddresses", + "Addresses" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products", + "Addresses/Country", + "Addresses/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Supplier", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "EmailAddresses", + "Addresses" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products", + "Addresses/Country", + "Addresses/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers('{ID}')/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "Thumbnail", + "Thumbnail desc", + "Sizes", + "Sizes desc", + "Rating", + "Rating desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "LifeTime", + "LifeTime desc", + "Color", + "Color desc", + "TaxRate", + "TaxRate desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "Thumbnail", + "Sizes", + "Rating", + "ReleaseDate", + "DiscontinuedDate", + "LifeTime", + "Color", + "TaxRate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier", + "OrderItems", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "Thumbnail", + "Thumbnail desc", + "Sizes", + "Sizes desc", + "Rating", + "Rating desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "LifeTime", + "LifeTime desc", + "Color", + "Color desc", + "TaxRate", + "TaxRate desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "Thumbnail", + "Sizes", + "Rating", + "ReleaseDate", + "DiscontinuedDate", + "LifeTime", + "Color", + "TaxRate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier", + "OrderItems", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "Thumbnail", + "Sizes", + "Rating", + "ReleaseDate", + "DiscontinuedDate", + "LifeTime", + "Color", + "TaxRate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier", + "OrderItems", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/Category": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount", + "Name", + "Thumbnail" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/Supplier": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "EmailAddresses", + "Addresses" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products", + "Addresses/Country", + "Addresses/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/OrderItems": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related OrderItems", + "tags": [ + "Products", + "OrderItems" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ItemID", + "ItemID desc", + "Size", + "Size desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ItemID", + "Size", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product", + "Currency" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of OrderItem", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.OrderItem" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related OrderItems", + "tags": [ + "Products", + "OrderItems" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.OrderItem-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.OrderItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/Sales": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Sales", + "tags": [ + "Products", + "Sales" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Amount", + "Amount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Time", + "Currency", + "Customer", + "SalesOrganization", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Sales", + "tags": [ + "Products", + "Sales" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders": { + "get": { + "summary": "Get entities from Orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Completed", + "Completed desc", + "ShippingAddress/Street", + "ShippingAddress/Street desc", + "ShippingAddress/Region", + "ShippingAddress/Region desc", + "ShippingAddress/PostalCode", + "ShippingAddress/PostalCode desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Completed", + "ShippingAddress" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Items", + "Customer", + "ShippingAddress/Country", + "ShippingAddress/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Orders by key", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Completed", + "ShippingAddress" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Items", + "Customer", + "ShippingAddress/Country", + "ShippingAddress/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Order-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders", + "tags": [ + "Orders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({ID})/Items": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Items", + "tags": [ + "Orders", + "OrderItems" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ItemID", + "ItemID desc", + "Size", + "Size desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ItemID", + "Size", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product", + "Currency" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of OrderItem", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.OrderItem" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Items", + "tags": [ + "Orders", + "OrderItems" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.OrderItem-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.OrderItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({ID})/Customer": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Customer", + "tags": [ + "Orders", + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "CompanyName", + "BirthDate", + "CountryName", + "ContactName", + "ContactTitle", + "Fax", + "Address", + "EmailAddresses", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "Sales", + "Address/Country", + "Address/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({ID})/ShippingAddress/Country": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Country", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name", + "Continent" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({ID})/ShippingAddress/City": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related City", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Amount", + "Amount desc", + "Name", + "Name desc", + "Thumbnail", + "Thumbnail desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount", + "Name", + "Thumbnail" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount", + "Name", + "Thumbnail" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "Thumbnail", + "Thumbnail desc", + "Sizes", + "Sizes desc", + "Rating", + "Rating desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "LifeTime", + "LifeTime desc", + "Color", + "Color desc", + "TaxRate", + "TaxRate desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "Thumbnail", + "Sizes", + "Rating", + "ReleaseDate", + "DiscontinuedDate", + "LifeTime", + "Color", + "TaxRate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier", + "OrderItems", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OrderItems": { + "get": { + "summary": "Get entities from OrderItems", + "tags": [ + "OrderItems" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ItemID", + "ItemID desc", + "Size", + "Size desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ItemID", + "Size", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product", + "Currency" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of OrderItem", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.OrderItem" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to OrderItems", + "tags": [ + "OrderItems" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.OrderItem-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.OrderItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OrderItems(OrderID={OrderID},ItemID='{ItemID}')": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ItemID", + "in": "path", + "name": "ItemID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from OrderItems by key", + "tags": [ + "OrderItems" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ItemID", + "Size", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product", + "Currency" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.OrderItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in OrderItems", + "tags": [ + "OrderItems" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.OrderItem-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from OrderItems", + "tags": [ + "OrderItems" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OrderItems(OrderID={OrderID},ItemID='{ItemID}')/Order": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ItemID", + "in": "path", + "name": "ItemID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Order", + "tags": [ + "OrderItems", + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Completed", + "ShippingAddress" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Items", + "Customer", + "ShippingAddress/Country", + "ShippingAddress/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OrderItems(OrderID={OrderID},ItemID='{ItemID}')/Product": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ItemID", + "in": "path", + "name": "ItemID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "OrderItems", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "Thumbnail", + "Sizes", + "Rating", + "ReleaseDate", + "DiscontinuedDate", + "LifeTime", + "Color", + "TaxRate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier", + "OrderItems", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OrderItems(OrderID={OrderID},ItemID='{ItemID}')/Currency": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ItemID", + "in": "path", + "name": "ItemID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Currency", + "tags": [ + "OrderItems", + "Currencies" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name", + "Symbol", + "FractionalDigits" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Currency" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales": { + "get": { + "summary": "Get entities from Sales", + "tags": [ + "Sales" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Amount", + "Amount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Time", + "Currency", + "Customer", + "SalesOrganization", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales", + "tags": [ + "Sales" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Sales by key", + "tags": [ + "Sales" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Time", + "Currency", + "Customer", + "SalesOrganization", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales", + "tags": [ + "Sales" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales", + "tags": [ + "Sales" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales({ID})/Time": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Time", + "tags": [ + "Sales", + "Time" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Date", + "Year", + "Quarter", + "Month" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Time" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales({ID})/Currency": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Currency", + "tags": [ + "Sales", + "Currencies" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name", + "Symbol", + "FractionalDigits" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Currency" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales({ID})/Customer": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Customer", + "tags": [ + "Sales", + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "CompanyName", + "BirthDate", + "CountryName", + "ContactName", + "ContactTitle", + "Fax", + "Address", + "EmailAddresses", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "Sales", + "Address/Country", + "Address/City" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales({ID})/SalesOrganization": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related SalesOrganization", + "tags": [ + "Sales", + "SalesOrganizations" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales", + "Superordinate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales({ID})/Product": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "Sales", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "Thumbnail", + "Sizes", + "Rating", + "ReleaseDate", + "DiscontinuedDate", + "LifeTime", + "Color", + "TaxRate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier", + "OrderItems", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees": { + "get": { + "summary": "Get entities from Employees", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Title", + "Title desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "FirstName", + "LastName", + "Title" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Manager", + "LeaveRequests" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Employees by key", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "FirstName", + "LastName", + "Title" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Manager", + "LeaveRequests" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Employee-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Employees", + "tags": [ + "Employees" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees('{ID}')/Manager": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Manager", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "FirstName", + "LastName", + "Title" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Manager", + "LeaveRequests", + "Employees", + "Inbox" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Manager" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees('{ID}')/LeaveRequests": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related LeaveRequests", + "tags": [ + "Employees", + "LeaveRequests" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Manager", + "Employee" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of LeaveRequest", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related LeaveRequests", + "tags": [ + "Employees", + "LeaveRequests" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/LeaveRequests": { + "get": { + "summary": "Get entities from LeaveRequests", + "tags": [ + "LeaveRequests" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Manager", + "Employee" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of LeaveRequest", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to LeaveRequests", + "tags": [ + "LeaveRequests" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/LeaveRequests({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from LeaveRequests by key", + "tags": [ + "LeaveRequests" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Manager", + "Employee" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in LeaveRequests", + "tags": [ + "LeaveRequests" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from LeaveRequests", + "tags": [ + "LeaveRequests" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/LeaveRequests({ID})/Model.Approval": { + "post": { + "summary": "Invoke action Approval", + "tags": [ + "LeaveRequests" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ] + } + }, + "/LeaveRequests({ID})/Model.Rejection": { + "post": { + "summary": "Invoke action Rejection", + "tags": [ + "LeaveRequests" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "Reason": { + "type": "string", + "nullable": true + } + } + } + } + } + } + } + }, + "/LeaveRequests({ID})/Manager": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Manager", + "tags": [ + "LeaveRequests", + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "FirstName", + "LastName", + "Title" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Manager", + "LeaveRequests", + "Employees", + "Inbox" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Manager" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/LeaveRequests({ID})/Employee": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Employee", + "tags": [ + "LeaveRequests", + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "FirstName", + "LastName", + "Title" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Manager", + "LeaveRequests" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Countries": { + "get": { + "summary": "Get entities from Countries", + "tags": [ + "Countries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Code desc", + "Name", + "Name desc", + "Continent", + "Continent desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name", + "Continent" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Country", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Country" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Countries", + "tags": [ + "Countries" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Country-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Countries('{Code}')": { + "parameters": [ + { + "description": "key: Code", + "in": "path", + "name": "Code", + "required": true, + "schema": { + "type": "string", + "maxLength": 2 + } + } + ], + "get": { + "summary": "Get entity from Countries by key", + "tags": [ + "Countries" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name", + "Continent" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Countries", + "tags": [ + "Countries" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Country-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Countries", + "tags": [ + "Countries" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Time": { + "get": { + "summary": "Get entities from Time", + "tags": [ + "Time" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Date", + "Date desc", + "Year", + "Year desc", + "Quarter", + "Quarter desc", + "Month", + "Month desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Date", + "Year", + "Quarter", + "Month" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Time", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Time" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Time", + "tags": [ + "Time" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Time-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Time" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Time({Date})": { + "parameters": [ + { + "description": "key: Date", + "in": "path", + "name": "Date", + "required": true, + "schema": { + "type": "string", + "format": "date", + "example": "2017-04-13" + } + } + ], + "get": { + "summary": "Get entity from Time by key", + "tags": [ + "Time" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Date", + "Year", + "Quarter", + "Month" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Time" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Time", + "tags": [ + "Time" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Time-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Time", + "tags": [ + "Time" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Time({Date})/Sales": { + "parameters": [ + { + "description": "key: Date", + "in": "path", + "name": "Date", + "required": true, + "schema": { + "type": "string", + "format": "date", + "example": "2017-04-13" + } + } + ], + "get": { + "summary": "Get entities from related Sales", + "tags": [ + "Time", + "Sales" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Amount", + "Amount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Time", + "Currency", + "Customer", + "SalesOrganization", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Sales", + "tags": [ + "Time", + "Sales" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/SalesOrganizations": { + "get": { + "summary": "Get entities from SalesOrganizations", + "tags": [ + "SalesOrganizations" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales", + "Superordinate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SalesOrganization", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to SalesOrganizations", + "tags": [ + "SalesOrganizations" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/SalesOrganizations('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from SalesOrganizations by key", + "tags": [ + "SalesOrganizations" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales", + "Superordinate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in SalesOrganizations", + "tags": [ + "SalesOrganizations" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from SalesOrganizations", + "tags": [ + "SalesOrganizations" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/SalesOrganizations('{ID}')/Sales": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Sales", + "tags": [ + "SalesOrganizations", + "Sales" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Amount", + "Amount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Time", + "Currency", + "Customer", + "SalesOrganization", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Sales", + "tags": [ + "SalesOrganizations", + "Sales" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/SalesOrganizations('{ID}')/Superordinate": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Superordinate", + "tags": [ + "SalesOrganizations" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales", + "Superordinate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Currencies": { + "get": { + "summary": "Get entities from Currencies", + "tags": [ + "Currencies" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Code desc", + "Name", + "Name desc", + "Symbol", + "Symbol desc", + "FractionalDigits", + "FractionalDigits desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name", + "Symbol", + "FractionalDigits" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Currency", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Currency" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Currencies", + "tags": [ + "Currencies" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Currency-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Currency" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Currencies('{Code}')": { + "parameters": [ + { + "description": "key: Code", + "in": "path", + "name": "Code", + "required": true, + "schema": { + "type": "string", + "maxLength": 3 + } + } + ], + "get": { + "summary": "Get entity from Currencies by key", + "tags": [ + "Currencies" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name", + "Symbol", + "FractionalDigits" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Currency" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Currencies", + "tags": [ + "Currencies" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Currency-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Currencies", + "tags": [ + "Currencies" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Currencies('{Code}')/Sales": { + "parameters": [ + { + "description": "key: Code", + "in": "path", + "name": "Code", + "required": true, + "schema": { + "type": "string", + "maxLength": 3 + } + } + ], + "get": { + "summary": "Get entities from related Sales", + "tags": [ + "Currencies", + "Sales" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Amount", + "Amount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Time", + "Currency", + "Customer", + "SalesOrganization", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Sales", + "tags": [ + "Currencies", + "Sales" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Cities": { + "get": { + "summary": "Get entities from Cities", + "tags": [ + "Cities" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of City", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.City" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Cities", + "tags": [ + "Cities" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.City-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Cities({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Get entity from Cities by key", + "tags": [ + "Cities" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Cities", + "tags": [ + "Cities" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OData.Demo.City-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Cities", + "tags": [ + "Cities" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Customers HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "OData.Demo.Customer": { + "title": "Customer", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Order" + } + }, + "Orders@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Name": { + "type": "string" + }, + "CompanyName": { + "type": "string", + "nullable": true + }, + "BirthDate": { + "type": "string" + }, + "CountryName": { + "type": "string", + "title": "This is weird, given that we have a Country entity type" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + }, + "Sales@odata.count": { + "$ref": "#/components/schemas/count" + }, + "ContactName": { + "type": "string" + }, + "ContactTitle": { + "type": "string" + }, + "Fax": { + "type": "string" + }, + "Address": { + "$ref": "#/components/schemas/OData.Demo.Address" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Phone": { + "$ref": "#/components/schemas/OData.Demo.PhoneNumber" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.VipCustomer" + }, + {} + ] + }, + "OData.Demo.Customer-create": { + "title": "Customer (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Order-create" + } + }, + "Name": { + "type": "string" + }, + "CompanyName": { + "type": "string", + "nullable": true + }, + "BirthDate": { + "type": "string" + }, + "CountryName": { + "type": "string", + "title": "This is weird, given that we have a Country entity type" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + }, + "ContactName": { + "type": "string" + }, + "ContactTitle": { + "type": "string" + }, + "Fax": { + "type": "string" + }, + "Address": { + "$ref": "#/components/schemas/OData.Demo.Address-create" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Phone": { + "$ref": "#/components/schemas/OData.Demo.PhoneNumber-create" + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.VipCustomer-create" + }, + {} + ] + }, + "OData.Demo.Customer-update": { + "title": "Customer (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "CompanyName": { + "type": "string", + "nullable": true + }, + "BirthDate": { + "type": "string" + }, + "CountryName": { + "type": "string", + "title": "This is weird, given that we have a Country entity type" + }, + "ContactName": { + "type": "string" + }, + "ContactTitle": { + "type": "string" + }, + "Fax": { + "type": "string" + }, + "Address": { + "$ref": "#/components/schemas/OData.Demo.Address-update" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Phone": { + "$ref": "#/components/schemas/OData.Demo.PhoneNumber-update" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.VipCustomer-update" + }, + {} + ] + }, + "OData.Demo.Supplier": { + "title": "Supplier", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Name": { + "type": "string" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Address" + } + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.PreferredSupplier" + }, + {} + ] + }, + "OData.Demo.Supplier-create": { + "title": "Supplier (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Product-create" + } + }, + "Name": { + "type": "string" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Address-create" + } + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.PreferredSupplier-create" + }, + {} + ] + }, + "OData.Demo.Supplier-update": { + "title": "Supplier (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Address-update" + } + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.PreferredSupplier-update" + }, + {} + ] + }, + "OData.Demo.Product": { + "title": "Product", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Category": { + "$ref": "#/components/schemas/OData.Demo.Category" + }, + "Name": { + "type": "string" + }, + "Supplier": { + "$ref": "#/components/schemas/OData.Demo.Supplier" + }, + "Description": { + "type": "string" + }, + "Thumbnail": { + "type": "string" + }, + "Sizes": { + "type": "array", + "items": { + "type": "string" + } + }, + "Rating": { + "type": "integer", + "format": "int32" + }, + "OrderItems": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.OrderItem" + } + }, + "OrderItems@odata.count": { + "$ref": "#/components/schemas/count" + }, + "ReleaseDate": { + "type": "string", + "format": "date", + "example": "2017-04-13" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "LifeTime": { + "type": "string" + }, + "Color": { + "type": "string" + }, + "TaxRate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.000001, + "maximum": 9999.999999, + "minimum": -9999.999999, + "nullable": true + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + }, + "Sales@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "OData.Demo.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Category": { + "$ref": "#/components/schemas/OData.Demo.Category-create" + }, + "Name": { + "type": "string" + }, + "Supplier": { + "$ref": "#/components/schemas/OData.Demo.Supplier-create" + }, + "Description": { + "type": "string" + }, + "Thumbnail": { + "type": "string" + }, + "Sizes": { + "type": "array", + "items": { + "type": "string" + } + }, + "Rating": { + "type": "integer", + "format": "int32" + }, + "OrderItems": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.OrderItem-create" + } + }, + "ReleaseDate": { + "type": "string", + "format": "date", + "example": "2017-04-13" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "LifeTime": { + "type": "string" + }, + "Color": { + "type": "string" + }, + "TaxRate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.000001, + "maximum": 9999.999999, + "minimum": -9999.999999, + "nullable": true + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string" + }, + "Thumbnail": { + "type": "string" + }, + "Sizes": { + "type": "array", + "items": { + "type": "string" + } + }, + "Rating": { + "type": "integer", + "format": "int32" + }, + "ReleaseDate": { + "type": "string", + "format": "date", + "example": "2017-04-13" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "LifeTime": { + "type": "string" + }, + "Color": { + "type": "string" + }, + "TaxRate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.000001, + "maximum": 9999.999999, + "minimum": -9999.999999, + "nullable": true + } + } + }, + "OData.Demo.Order": { + "title": "Order", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.OrderItem" + } + }, + "Items@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Completed": { + "type": "boolean" + }, + "Customer": { + "$ref": "#/components/schemas/OData.Demo.Customer" + }, + "ShippingAddress": { + "$ref": "#/components/schemas/OData.Demo.Address" + } + } + }, + "OData.Demo.Order-create": { + "title": "Order (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.OrderItem-create" + } + }, + "Completed": { + "type": "boolean" + }, + "Customer": { + "$ref": "#/components/schemas/OData.Demo.Customer-create" + }, + "ShippingAddress": { + "$ref": "#/components/schemas/OData.Demo.Address-create" + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.Order-update": { + "title": "Order (for update)", + "type": "object", + "properties": { + "Completed": { + "type": "boolean" + }, + "ShippingAddress": { + "$ref": "#/components/schemas/OData.Demo.Address-update" + } + } + }, + "OData.Demo.VipCustomer": { + "title": "VipCustomer", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Order" + } + }, + "Orders@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Name": { + "type": "string" + }, + "CompanyName": { + "type": "string", + "nullable": true + }, + "BirthDate": { + "type": "string" + }, + "CountryName": { + "type": "string", + "title": "This is weird, given that we have a Country entity type" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + }, + "Sales@odata.count": { + "$ref": "#/components/schemas/count" + }, + "ContactName": { + "type": "string" + }, + "ContactTitle": { + "type": "string" + }, + "Fax": { + "type": "string" + }, + "Address": { + "$ref": "#/components/schemas/OData.Demo.Address" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Phone": { + "$ref": "#/components/schemas/OData.Demo.PhoneNumber" + } + } + }, + "OData.Demo.VipCustomer-create": { + "title": "VipCustomer (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Order-create" + } + }, + "Name": { + "type": "string" + }, + "CompanyName": { + "type": "string", + "nullable": true + }, + "BirthDate": { + "type": "string" + }, + "CountryName": { + "type": "string", + "title": "This is weird, given that we have a Country entity type" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + }, + "ContactName": { + "type": "string" + }, + "ContactTitle": { + "type": "string" + }, + "Fax": { + "type": "string" + }, + "Address": { + "$ref": "#/components/schemas/OData.Demo.Address-create" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Phone": { + "$ref": "#/components/schemas/OData.Demo.PhoneNumber-create" + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.VipCustomer-update": { + "title": "VipCustomer (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "CompanyName": { + "type": "string", + "nullable": true + }, + "BirthDate": { + "type": "string" + }, + "CountryName": { + "type": "string", + "title": "This is weird, given that we have a Country entity type" + }, + "ContactName": { + "type": "string" + }, + "ContactTitle": { + "type": "string" + }, + "Fax": { + "type": "string" + }, + "Address": { + "$ref": "#/components/schemas/OData.Demo.Address-update" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Phone": { + "$ref": "#/components/schemas/OData.Demo.PhoneNumber-update" + } + } + }, + "OData.Demo.Category": { + "title": "Category", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Name": { + "type": "string" + }, + "Thumbnail": { + "type": "string" + } + } + }, + "OData.Demo.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Product-create" + } + }, + "Name": { + "type": "string" + }, + "Thumbnail": { + "type": "string" + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "Amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Name": { + "type": "string" + }, + "Thumbnail": { + "type": "string" + } + } + }, + "OData.Demo.OrderItem": { + "title": "OrderItem", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ItemID": { + "type": "string" + }, + "Order": { + "$ref": "#/components/schemas/OData.Demo.Order" + }, + "Size": { + "type": "string" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Product": { + "$ref": "#/components/schemas/OData.Demo.Product" + }, + "Currency": { + "$ref": "#/components/schemas/OData.Demo.Currency" + } + } + }, + "OData.Demo.OrderItem-create": { + "title": "OrderItem (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ItemID": { + "type": "string" + }, + "Order": { + "$ref": "#/components/schemas/OData.Demo.Order-create" + }, + "Size": { + "type": "string" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Product": { + "$ref": "#/components/schemas/OData.Demo.Product-create" + }, + "Currency": { + "$ref": "#/components/schemas/OData.Demo.Currency-create" + } + }, + "required": [ + "OrderID", + "ItemID" + ] + }, + "OData.Demo.OrderItem-update": { + "title": "OrderItem (for update)", + "type": "object", + "properties": { + "Size": { + "type": "string" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "OData.Demo.Sales": { + "title": "Sales", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Time": { + "$ref": "#/components/schemas/OData.Demo.Time" + }, + "Currency": { + "$ref": "#/components/schemas/OData.Demo.Currency" + }, + "Customer": { + "$ref": "#/components/schemas/OData.Demo.Customer" + }, + "SalesOrganization": { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization" + }, + "Product": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + } + }, + "OData.Demo.Sales-create": { + "title": "Sales (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Time": { + "$ref": "#/components/schemas/OData.Demo.Time-create" + }, + "Currency": { + "$ref": "#/components/schemas/OData.Demo.Currency-create" + }, + "Customer": { + "$ref": "#/components/schemas/OData.Demo.Customer-create" + }, + "SalesOrganization": { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization-create" + }, + "Product": { + "$ref": "#/components/schemas/OData.Demo.Product-create" + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.Sales-update": { + "title": "Sales (for update)", + "type": "object", + "properties": { + "Amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "OData.Demo.Employee": { + "title": "Employee", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Title": { + "type": "string" + }, + "Manager": { + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.Manager" + } + ], + "nullable": true + }, + "LeaveRequests": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest" + } + }, + "LeaveRequests@odata.count": { + "$ref": "#/components/schemas/count" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.Manager" + }, + {} + ] + }, + "OData.Demo.Employee-create": { + "title": "Employee (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Title": { + "type": "string" + }, + "Manager": { + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.Manager-create" + } + ], + "nullable": true + }, + "LeaveRequests": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest-create" + } + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.Manager-create" + }, + {} + ] + }, + "OData.Demo.Employee-update": { + "title": "Employee (for update)", + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Title": { + "type": "string" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.Manager-update" + }, + {} + ] + }, + "OData.Demo.LeaveRequest": { + "title": "LeaveRequest", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Manager": { + "$ref": "#/components/schemas/OData.Demo.Manager" + }, + "Employee": { + "$ref": "#/components/schemas/OData.Demo.Employee" + } + } + }, + "OData.Demo.LeaveRequest-create": { + "title": "LeaveRequest (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Manager": { + "$ref": "#/components/schemas/OData.Demo.Manager-create" + }, + "Employee": { + "$ref": "#/components/schemas/OData.Demo.Employee-create" + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.LeaveRequest-update": { + "title": "LeaveRequest (for update)", + "type": "object" + }, + "OData.Demo.Address": { + "title": "Address", + "type": "object", + "properties": { + "Street": { + "type": "string" + }, + "Country": { + "$ref": "#/components/schemas/OData.Demo.Country" + }, + "City": { + "$ref": "#/components/schemas/OData.Demo.City" + }, + "Region": { + "type": "string" + }, + "PostalCode": { + "type": "string" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.AddressWithLocation" + }, + {} + ] + }, + "OData.Demo.Address-create": { + "title": "Address (for create)", + "type": "object", + "properties": { + "Street": { + "type": "string" + }, + "Country": { + "$ref": "#/components/schemas/OData.Demo.Country-create" + }, + "City": { + "$ref": "#/components/schemas/OData.Demo.City-create" + }, + "Region": { + "type": "string" + }, + "PostalCode": { + "type": "string" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.AddressWithLocation-create" + }, + {} + ] + }, + "OData.Demo.Address-update": { + "title": "Address (for update)", + "type": "object", + "properties": { + "Street": { + "type": "string" + }, + "Region": { + "type": "string" + }, + "PostalCode": { + "type": "string" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.AddressWithLocation-update" + }, + {} + ] + }, + "OData.Demo.AddressWithLocation": { + "title": "AddressWithLocation", + "type": "object", + "properties": { + "Street": { + "type": "string" + }, + "Country": { + "$ref": "#/components/schemas/OData.Demo.Country" + }, + "City": { + "$ref": "#/components/schemas/OData.Demo.City" + }, + "Region": { + "type": "string" + }, + "PostalCode": { + "type": "string" + }, + "Location": { + "$ref": "#/components/schemas/geoPoint" + } + } + }, + "OData.Demo.AddressWithLocation-create": { + "title": "AddressWithLocation (for create)", + "type": "object", + "properties": { + "Street": { + "type": "string" + }, + "Country": { + "$ref": "#/components/schemas/OData.Demo.Country-create" + }, + "City": { + "$ref": "#/components/schemas/OData.Demo.City-create" + }, + "Region": { + "type": "string" + }, + "PostalCode": { + "type": "string" + }, + "Location": { + "$ref": "#/components/schemas/geoPoint" + } + } + }, + "OData.Demo.AddressWithLocation-update": { + "title": "AddressWithLocation (for update)", + "type": "object", + "properties": { + "Street": { + "type": "string" + }, + "Region": { + "type": "string" + }, + "PostalCode": { + "type": "string" + }, + "Location": { + "$ref": "#/components/schemas/geoPoint" + } + } + }, + "OData.Demo.Country": { + "title": "Country", + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 2 + }, + "Name": { + "type": "string" + }, + "Continent": { + "type": "string" + } + } + }, + "OData.Demo.Country-create": { + "title": "Country (for create)", + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 2 + }, + "Name": { + "type": "string" + }, + "Continent": { + "type": "string" + } + }, + "required": [ + "Code" + ] + }, + "OData.Demo.Country-update": { + "title": "Country (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Continent": { + "type": "string" + } + } + }, + "OData.Demo.PreferredSupplier": { + "title": "PreferredSupplier", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Name": { + "type": "string" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Address" + } + }, + "AccountRepresentative": { + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.Employee" + } + ], + "nullable": true + }, + "EmployeeID": { + "type": "string" + } + } + }, + "OData.Demo.PreferredSupplier-create": { + "title": "PreferredSupplier (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Product-create" + } + }, + "Name": { + "type": "string" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Address-create" + } + }, + "AccountRepresentative": { + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.Employee-create" + } + ], + "nullable": true + }, + "EmployeeID": { + "type": "string" + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.PreferredSupplier-update": { + "title": "PreferredSupplier (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "EmailAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "Addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Address-update" + } + }, + "EmployeeID": { + "type": "string" + } + } + }, + "OData.Demo.Pattern": { + "type": "string", + "title": "Pattern", + "enum": [ + "Yellow", + "Solid" + ] + }, + "OData.Demo.Manager": { + "title": "Manager", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Title": { + "type": "string" + }, + "Manager": { + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.Manager" + } + ], + "nullable": true + }, + "LeaveRequests": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest" + } + }, + "LeaveRequests@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Employee" + } + }, + "Employees@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Inbox": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest" + } + }, + "Inbox@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "OData.Demo.Manager-create": { + "title": "Manager (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Title": { + "type": "string" + }, + "Manager": { + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.Manager-create" + } + ], + "nullable": true + }, + "LeaveRequests": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest-create" + } + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Employee-create" + } + }, + "Inbox": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.LeaveRequest-create" + } + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.Manager-update": { + "title": "Manager (for update)", + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Title": { + "type": "string" + } + } + }, + "OData.Demo.Time": { + "title": "Time", + "type": "object", + "properties": { + "Date": { + "type": "string", + "format": "date", + "example": "2017-04-13" + }, + "Year": { + "type": "string", + "maxLength": 4 + }, + "Quarter": { + "type": "string" + }, + "Month": { + "type": "string" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + }, + "Sales@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "OData.Demo.Time-create": { + "title": "Time (for create)", + "type": "object", + "properties": { + "Date": { + "type": "string", + "format": "date", + "example": "2017-04-13" + }, + "Year": { + "type": "string", + "maxLength": 4 + }, + "Quarter": { + "type": "string" + }, + "Month": { + "type": "string" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + } + }, + "required": [ + "Date" + ] + }, + "OData.Demo.Time-update": { + "title": "Time (for update)", + "type": "object", + "properties": { + "Year": { + "type": "string", + "maxLength": 4 + }, + "Quarter": { + "type": "string" + }, + "Month": { + "type": "string" + } + } + }, + "OData.Demo.SalesOrganization": { + "title": "SalesOrganization", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + }, + "Sales@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Superordinate": { + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization" + } + ], + "nullable": true + } + } + }, + "OData.Demo.SalesOrganization-create": { + "title": "SalesOrganization (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + }, + "Superordinate": { + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.SalesOrganization-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.SalesOrganization-update": { + "title": "SalesOrganization (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "OData.Demo.Currency": { + "title": "Currency", + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 3 + }, + "Name": { + "type": "string" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales" + } + }, + "Sales@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Symbol": { + "type": "string" + }, + "FractionalDigits": { + "type": "integer", + "format": "uint8" + } + } + }, + "OData.Demo.Currency-create": { + "title": "Currency (for create)", + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 3 + }, + "Name": { + "type": "string" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OData.Demo.Sales-create" + } + }, + "Symbol": { + "type": "string" + }, + "FractionalDigits": { + "type": "integer", + "format": "uint8" + } + }, + "required": [ + "Code" + ] + }, + "OData.Demo.Currency-update": { + "title": "Currency (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Symbol": { + "type": "string" + }, + "FractionalDigits": { + "type": "integer", + "format": "uint8" + } + } + }, + "OData.Demo.City": { + "title": "City", + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string" + } + } + }, + "OData.Demo.City-create": { + "title": "City (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string" + } + }, + "required": [ + "ID" + ] + }, + "OData.Demo.City-update": { + "title": "City (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "OData.Demo.PhoneNumber": { + "title": "PhoneNumber", + "type": "object", + "properties": { + "Number": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.CellPhoneNumber" + }, + {} + ] + }, + "OData.Demo.PhoneNumber-create": { + "title": "PhoneNumber (for create)", + "type": "object", + "properties": { + "Number": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.CellPhoneNumber-create" + }, + {} + ] + }, + "OData.Demo.PhoneNumber-update": { + "title": "PhoneNumber (for update)", + "type": "object", + "properties": { + "Number": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/OData.Demo.CellPhoneNumber-update" + }, + {} + ] + }, + "OData.Demo.CellPhoneNumber": { + "title": "CellPhoneNumber", + "type": "object", + "properties": { + "Number": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Carrier": { + "type": "string" + } + } + }, + "OData.Demo.CellPhoneNumber-create": { + "title": "CellPhoneNumber (for create)", + "type": "object", + "properties": { + "Number": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Carrier": { + "type": "string" + } + } + }, + "OData.Demo.CellPhoneNumber-update": { + "title": "CellPhoneNumber (for update)", + "type": "object", + "properties": { + "Number": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Carrier": { + "type": "string" + } + } + }, + "geoPoint": { + "type": "object", + "properties": { + "coordinates": { + "$ref": "#/components/schemas/geoPosition" + }, + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/ExampleService.xml b/odata-openapi/examples/ExampleService.xml new file mode 100644 index 00000000..06f39d7f --- /dev/null +++ b/odata-openapi/examples/ExampleService.xml @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This is weird, given that we have a Country entity type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/Northwind-V3.openapi3.json b/odata-openapi/examples/Northwind-V3.openapi3.json new file mode 100644 index 00000000..73827586 --- /dev/null +++ b/odata-openapi/examples/Northwind-V3.openapi3.json @@ -0,0 +1,13842 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace ODataWebV3.Northwind.Model", + "description": "This service is located at [https://services.odata.org/V3/Northwind/Northwind.svc/](https://services.odata.org/V3/Northwind/Northwind.svc/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Category{bg:lightslategray}],[CustomerDemographic{bg:lightslategray}],[Customer{bg:lightslategray}],[Customer]*-*[CustomerDemographic],[Employee{bg:lightslategray}],[Employee]*-0..1[Employee],[Order_Detail{bg:lightslategray}],[Order_Detail]*-[Order],[Order{bg:lightslategray}],[Order]*-0..1[Customer],[Order]*-0..1[Employee],[Product{bg:lightslategray}],[Product]*-0..1[Category],[Product]-*[Order_Detail],[Region{bg:lightslategray}],[Shipper{bg:lightslategray}],[Shipper]0..1-*[Order],[Supplier{bg:lightslategray}],[Supplier]0..1-*[Product],[Territory{bg:lightslategray}],[Territory]*-[Region],[Territory]*-*[Employee],[Alphabetical_list_of_product{bg:lightslategray}],[Category_Sales_for_1997{bg:lightslategray}],[Current_Product_List{bg:lightslategray}],[Customer_and_Suppliers_by_City{bg:lightslategray}],[Invoice{bg:lightslategray}],[Order_Details_Extended{bg:lightslategray}],[Order_Subtotal{bg:lightslategray}],[Orders_Qry{bg:lightslategray}],[Product_Sales_for_1997{bg:lightslategray}],[Products_Above_Average_Price{bg:lightslategray}],[Products_by_Category{bg:lightslategray}],[Sales_by_Category{bg:lightslategray}],[Sales_Totals_by_Amount{bg:lightslategray}],[Summary_of_Sales_by_Quarter{bg:lightslategray}],[Summary_of_Sales_by_Year{bg:lightslategray}],[Summary_of_Sales_by_Years%20{bg:lawngreen}]++-*>[Summary_of_Sales_by_Year],[Summary_of_Sales_by_Quarters%20{bg:lawngreen}]++-*>[Summary_of_Sales_by_Quarter],[Sales_Totals_by_Amounts%20{bg:lawngreen}]++-*>[Sales_Totals_by_Amount],[Sales_by_Categories%20{bg:lawngreen}]++-*>[Sales_by_Category],[Products_by_Categories%20{bg:lawngreen}]++-*>[Products_by_Category],[Products_Above_Average_Prices%20{bg:lawngreen}]++-*>[Products_Above_Average_Price],[Product_Sales_for_1997%20{bg:lawngreen}]++-*>[Product_Sales_for_1997],[Orders_Qries%20{bg:lawngreen}]++-*>[Orders_Qry],[Order_Subtotals%20{bg:lawngreen}]++-*>[Order_Subtotal],[Order_Details_Extendeds%20{bg:lawngreen}]++-*>[Order_Details_Extended],[Invoices%20{bg:lawngreen}]++-*>[Invoice],[Customer_and_Suppliers_by_Cities%20{bg:lawngreen}]++-*>[Customer_and_Suppliers_by_City],[Current_Product_Lists%20{bg:lawngreen}]++-*>[Current_Product_List],[Category_Sales_for_1997%20{bg:lawngreen}]++-*>[Category_Sales_for_1997],[Alphabetical_list_of_products%20{bg:lawngreen}]++-*>[Alphabetical_list_of_product],[Territories%20{bg:lawngreen}]++-*>[Territory],[Suppliers%20{bg:lawngreen}]++-*>[Supplier],[Shippers%20{bg:lawngreen}]++-*>[Shipper],[Regions%20{bg:lawngreen}]++-*>[Region],[Products%20{bg:lawngreen}]++-*>[Product],[Orders%20{bg:lawngreen}]++-*>[Order],[Order_Details%20{bg:lawngreen}]++-*>[Order_Detail],[Employees%20{bg:lawngreen}]++-*>[Employee],[Customers%20{bg:lawngreen}]++-*>[Customer],[CustomerDemographics%20{bg:lawngreen}]++-*>[CustomerDemographic],[Categories%20{bg:lawngreen}]++-*>[Category])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://services.odata.org/V3/Northwind/Northwind.svc" + } + ], + "tags": [ + { + "name": "Categories" + }, + { + "name": "CustomerDemographics" + }, + { + "name": "Customers" + }, + { + "name": "Employees" + }, + { + "name": "Order_Details" + }, + { + "name": "Orders" + }, + { + "name": "Products" + }, + { + "name": "Regions" + }, + { + "name": "Shippers" + }, + { + "name": "Suppliers" + }, + { + "name": "Territories" + }, + { + "name": "Alphabetical_list_of_products" + }, + { + "name": "Category_Sales_for_1997" + }, + { + "name": "Current_Product_Lists" + }, + { + "name": "Customer_and_Suppliers_by_Cities" + }, + { + "name": "Invoices" + }, + { + "name": "Order_Details_Extendeds" + }, + { + "name": "Order_Subtotals" + }, + { + "name": "Orders_Qries" + }, + { + "name": "Product_Sales_for_1997" + }, + { + "name": "Products_Above_Average_Prices" + }, + { + "name": "Products_by_Categories" + }, + { + "name": "Sales_by_Categories" + }, + { + "name": "Sales_Totals_by_Amounts" + }, + { + "name": "Summary_of_Sales_by_Quarters" + }, + { + "name": "Summary_of_Sales_by_Years" + } + ], + "paths": { + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "Description", + "Description desc", + "Picture", + "Picture desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({CategoryID})": { + "parameters": [ + { + "description": "key: CategoryID", + "in": "path", + "name": "CategoryID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({CategoryID})/Products": { + "parameters": [ + { + "description": "key: CategoryID", + "in": "path", + "name": "CategoryID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics": { + "get": { + "summary": "Get entities from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of CustomerDemographic", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics('{CustomerTypeID}')": { + "parameters": [ + { + "description": "key: CustomerTypeID", + "in": "path", + "name": "CustomerTypeID", + "required": true, + "schema": { + "type": "string", + "maxLength": 10 + } + } + ], + "get": { + "summary": "Get entity from CustomerDemographics by key", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics('{CustomerTypeID}')/Customers": { + "parameters": [ + { + "description": "key: CustomerTypeID", + "in": "path", + "name": "CustomerTypeID", + "required": true, + "schema": { + "type": "string", + "maxLength": 10 + } + } + ], + "get": { + "summary": "Get entities from related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers": { + "get": { + "summary": "Get entities from Customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{CustomerID}')": { + "parameters": [ + { + "description": "key: CustomerID", + "in": "path", + "name": "CustomerID", + "required": true, + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entity from Customers by key", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customers", + "tags": [ + "Customers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{CustomerID}')/Orders": { + "parameters": [ + { + "description": "key: CustomerID", + "in": "path", + "name": "CustomerID", + "required": true, + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Customers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Customers", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{CustomerID}')/CustomerDemographics": { + "parameters": [ + { + "description": "key: CustomerID", + "in": "path", + "name": "CustomerID", + "required": true, + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entities from related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of CustomerDemographic", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees": { + "get": { + "summary": "Get entities from Employees", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Employees by key", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Employees", + "tags": [ + "Employees" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})/Employees1": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Employees1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees1", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})/Employee1": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Employee1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})/Orders": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Employees", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Employees", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})/Territories": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Employees", + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Territory", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Employees", + "Territories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details": { + "get": { + "summary": "Get entities from Order_Details", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Detail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details", + "tags": [ + "Order_Details" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details(OrderID={OrderID},ProductID={ProductID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Order_Details by key", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details", + "tags": [ + "Order_Details" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details", + "tags": [ + "Order_Details" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details(OrderID={OrderID},ProductID={ProductID})/Order": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Order", + "tags": [ + "Order_Details", + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details(OrderID={OrderID},ProductID={ProductID})/Product": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "Order_Details", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders": { + "get": { + "summary": "Get entities from Orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Orders by key", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders", + "tags": [ + "Orders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})/Customer": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Customer", + "tags": [ + "Orders", + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})/Employee": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Employee", + "tags": [ + "Orders", + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})/Order_Details": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Detail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})/Shipper": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Shipper", + "tags": [ + "Orders", + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ProductID})": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ProductID})/Category": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ProductID})/Order_Details": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Detail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ProductID})/Supplier": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions": { + "get": { + "summary": "Get entities from Regions", + "tags": [ + "Regions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionID desc", + "RegionDescription", + "RegionDescription desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Region", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Regions", + "tags": [ + "Regions" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions({RegionID})": { + "parameters": [ + { + "description": "key: RegionID", + "in": "path", + "name": "RegionID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Regions by key", + "tags": [ + "Regions" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Regions", + "tags": [ + "Regions" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Regions", + "tags": [ + "Regions" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions({RegionID})/Territories": { + "parameters": [ + { + "description": "key: RegionID", + "in": "path", + "name": "RegionID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Regions", + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Territory", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Regions", + "Territories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers": { + "get": { + "summary": "Get entities from Shippers", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "ShipperID desc", + "CompanyName", + "CompanyName desc", + "Phone", + "Phone desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Shipper", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Shippers", + "tags": [ + "Shippers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers({ShipperID})": { + "parameters": [ + { + "description": "key: ShipperID", + "in": "path", + "name": "ShipperID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Shippers by key", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Shippers", + "tags": [ + "Shippers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Shippers", + "tags": [ + "Shippers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers({ShipperID})/Orders": { + "parameters": [ + { + "description": "key: ShipperID", + "in": "path", + "name": "ShipperID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "SupplierID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc", + "HomePage", + "HomePage desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Supplier", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({SupplierID})": { + "parameters": [ + { + "description": "key: SupplierID", + "in": "path", + "name": "SupplierID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({SupplierID})/Products": { + "parameters": [ + { + "description": "key: SupplierID", + "in": "path", + "name": "SupplierID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories": { + "get": { + "summary": "Get entities from Territories", + "tags": [ + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Territory", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Territories", + "tags": [ + "Territories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories('{TerritoryID}')": { + "parameters": [ + { + "description": "key: TerritoryID", + "in": "path", + "name": "TerritoryID", + "required": true, + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get entity from Territories by key", + "tags": [ + "Territories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Territories", + "tags": [ + "Territories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Territories", + "tags": [ + "Territories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories('{TerritoryID}')/Region": { + "parameters": [ + { + "description": "key: TerritoryID", + "in": "path", + "name": "TerritoryID", + "required": true, + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get related Region", + "tags": [ + "Territories", + "Regions" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories('{TerritoryID}')/Employees": { + "parameters": [ + { + "description": "key: TerritoryID", + "in": "path", + "name": "TerritoryID", + "required": true, + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get entities from related Employees", + "tags": [ + "Territories", + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees", + "tags": [ + "Territories", + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products": { + "get": { + "summary": "Get entities from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc", + "CategoryName", + "CategoryName desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Alphabetical_list_of_product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products(CategoryName='{CategoryName}',Discontinued='{Discontinued}',ProductID={ProductID},ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: Discontinued", + "in": "path", + "name": "Discontinued", + "required": true, + "schema": { + "type": "boolean" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Alphabetical_list_of_products by key", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Category_Sales_for_1997": { + "get": { + "summary": "Get entities from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "CategorySales", + "CategorySales desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category_Sales_for_1997", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Category_Sales_for_1997('{CategoryName}')": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + } + ], + "get": { + "summary": "Get entity from Category_Sales_for_1997 by key", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Current_Product_Lists": { + "get": { + "summary": "Get entities from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Current_Product_List", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Current_Product_Lists(ProductID={ProductID},ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Current_Product_Lists by key", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities": { + "get": { + "summary": "Get entities from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "City desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "Relationship", + "Relationship desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer_and_Suppliers_by_City", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities(CompanyName='{CompanyName}',Relationship='{Relationship}')": { + "parameters": [ + { + "description": "key: CompanyName", + "in": "path", + "name": "CompanyName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Relationship", + "in": "path", + "name": "Relationship", + "required": true, + "schema": { + "type": "string", + "maxLength": 9 + } + } + ], + "get": { + "summary": "Get entity from Customer_and_Suppliers_by_Cities by key", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Invoices": { + "get": { + "summary": "Get entities from Invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CustomerID", + "CustomerID desc", + "CustomerName", + "CustomerName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Salesperson", + "Salesperson desc", + "OrderID", + "OrderID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipperName", + "ShipperName desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc", + "Freight", + "Freight desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Invoice", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Invoices", + "tags": [ + "Invoices" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Invoices(CustomerName='{CustomerName}',Discount={Discount},OrderID={OrderID},ProductID={ProductID},ProductName='{ProductName}',Quantity={Quantity},Salesperson='{Salesperson}',ShipperName='{ShipperName}',UnitPrice='{UnitPrice}')": { + "parameters": [ + { + "description": "key: CustomerName", + "in": "path", + "name": "CustomerName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Discount", + "in": "path", + "name": "Discount", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Quantity", + "in": "path", + "name": "Quantity", + "required": true, + "schema": { + "type": "integer", + "format": "int16" + } + }, + { + "description": "key: Salesperson", + "in": "path", + "name": "Salesperson", + "required": true, + "schema": { + "type": "string", + "maxLength": 31 + } + }, + { + "description": "key: ShipperName", + "in": "path", + "name": "ShipperName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: UnitPrice", + "in": "path", + "name": "UnitPrice", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + } + } + ], + "get": { + "summary": "Get entity from Invoices by key", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Invoices", + "tags": [ + "Invoices" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Invoices", + "tags": [ + "Invoices" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details_Extendeds": { + "get": { + "summary": "Get entities from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Details_Extended", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details_Extendeds(Discount={Discount},OrderID={OrderID},ProductID={ProductID},ProductName='{ProductName}',Quantity={Quantity},UnitPrice='{UnitPrice}')": { + "parameters": [ + { + "description": "key: Discount", + "in": "path", + "name": "Discount", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Quantity", + "in": "path", + "name": "Quantity", + "required": true, + "schema": { + "type": "integer", + "format": "int16" + } + }, + { + "description": "key: UnitPrice", + "in": "path", + "name": "UnitPrice", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + } + } + ], + "get": { + "summary": "Get entity from Order_Details_Extendeds by key", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Subtotals": { + "get": { + "summary": "Get entities from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Subtotal", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Subtotals({OrderID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Order_Subtotals by key", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders_Qries": { + "get": { + "summary": "Get entities from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CompanyName", + "CompanyName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Orders_Qry", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders_Qries(CompanyName='{CompanyName}',OrderID={OrderID})": { + "parameters": [ + { + "description": "key: CompanyName", + "in": "path", + "name": "CompanyName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Orders_Qries by key", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Product_Sales_for_1997": { + "get": { + "summary": "Get entities from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product_Sales_for_1997", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Product_Sales_for_1997(CategoryName='{CategoryName}',ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Product_Sales_for_1997 by key", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices": { + "get": { + "summary": "Get entities from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Products_Above_Average_Price", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices('{ProductName}')": { + "parameters": [ + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Products_Above_Average_Prices by key", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_by_Categories": { + "get": { + "summary": "Get entities from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitsInStock", + "UnitsInStock desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Products_by_Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_by_Categories(CategoryName='{CategoryName}',Discontinued='{Discontinued}',ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: Discontinued", + "in": "path", + "name": "Discontinued", + "required": true, + "schema": { + "type": "boolean" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Products_by_Categories by key", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_by_Categories": { + "get": { + "summary": "Get entities from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales_by_Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_by_Categories(CategoryID={CategoryID},CategoryName='{CategoryName}',ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: CategoryID", + "in": "path", + "name": "CategoryID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Sales_by_Categories by key", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts": { + "get": { + "summary": "Get entities from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "SaleAmount desc", + "OrderID", + "OrderID desc", + "CompanyName", + "CompanyName desc", + "ShippedDate", + "ShippedDate desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales_Totals_by_Amount", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts(CompanyName='{CompanyName}',OrderID={OrderID})": { + "parameters": [ + { + "description": "key: CompanyName", + "in": "path", + "name": "CompanyName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Sales_Totals_by_Amounts by key", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Summary_of_Sales_by_Quarter", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters({OrderID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Quarters by key", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Summary_of_Sales_by_Year", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years({OrderID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Years by key", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Categories HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "202": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "NorthwindModel.Category": { + "title": "Category", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + }, + "Products@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + }, + "required": [ + "CategoryID" + ] + }, + "NorthwindModel.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "format": "base64url", + "nullable": true + } + } + }, + "NorthwindModel.CustomerDemographic": { + "title": "CustomerDemographic", + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": "string", + "nullable": true + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + }, + "Customers@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.CustomerDemographic-create": { + "title": "CustomerDemographic (for create)", + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": "string", + "nullable": true + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + }, + "required": [ + "CustomerTypeID" + ] + }, + "NorthwindModel.CustomerDemographic-update": { + "title": "CustomerDemographic (for update)", + "type": "object", + "properties": { + "CustomerDesc": { + "type": "string", + "nullable": true + } + } + }, + "NorthwindModel.Customer": { + "title": "Customer", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Orders@count": { + "$ref": "#/components/schemas/count" + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + }, + "CustomerDemographics@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Customer-create": { + "title": "Customer (for create)", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + }, + "required": [ + "CustomerID" + ] + }, + "NorthwindModel.Customer-update": { + "title": "Customer (for update)", + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + } + } + }, + "NorthwindModel.Employee": { + "title": "Employee", + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "TitleOfCourtesy": { + "type": "string", + "maxLength": 25, + "nullable": true + }, + "BirthDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "HomePhone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Extension": { + "type": "string", + "maxLength": 4, + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "PhotoPath": { + "type": "string", + "maxLength": 255, + "nullable": true + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + }, + "Employees1@count": { + "$ref": "#/components/schemas/count" + }, + "Employee1": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + ], + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Orders@count": { + "$ref": "#/components/schemas/count" + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + }, + "Territories@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Employee-create": { + "title": "Employee (for create)", + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "TitleOfCourtesy": { + "type": "string", + "maxLength": 25, + "nullable": true + }, + "BirthDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "HomePhone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Extension": { + "type": "string", + "maxLength": 4, + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "PhotoPath": { + "type": "string", + "maxLength": 255, + "nullable": true + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + }, + "Employee1": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + ], + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "EmployeeID" + ] + }, + "NorthwindModel.Employee-update": { + "title": "Employee (for update)", + "type": "object", + "properties": { + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "TitleOfCourtesy": { + "type": "string", + "maxLength": 25, + "nullable": true + }, + "BirthDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "HomePhone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Extension": { + "type": "string", + "maxLength": 4, + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "PhotoPath": { + "type": "string", + "maxLength": 255, + "nullable": true + } + } + }, + "NorthwindModel.Order_Detail": { + "title": "Order_Detail", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/components/schemas/NorthwindModel.Order" + }, + "Product": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + }, + "NorthwindModel.Order_Detail-create": { + "title": "Order_Detail (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + }, + "Product": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + }, + "required": [ + "OrderID", + "ProductID" + ] + }, + "NorthwindModel.Order_Detail-update": { + "title": "Order_Detail (for update)", + "type": "object", + "properties": { + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + } + }, + "NorthwindModel.Order": { + "title": "Order", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Customer": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + ], + "nullable": true + }, + "Employee": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + }, + "Order_Details@count": { + "$ref": "#/components/schemas/count" + }, + "Shipper": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + ], + "nullable": true + } + } + }, + "NorthwindModel.Order-create": { + "title": "Order (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Customer": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + ], + "nullable": true + }, + "Employee": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + }, + "Shipper": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Shipper-create" + } + ], + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Order-update": { + "title": "Order (for update)", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + } + } + }, + "NorthwindModel.Product": { + "title": "Product", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + }, + "Order_Details@count": { + "$ref": "#/components/schemas/count" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + ], + "nullable": true + } + } + }, + "NorthwindModel.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Category-create" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Supplier-create" + } + ], + "nullable": true + } + }, + "required": [ + "ProductID" + ] + }, + "NorthwindModel.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + } + } + }, + "NorthwindModel.Region": { + "title": "Region", + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + }, + "Territories@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Region-create": { + "title": "Region (for create)", + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "RegionID" + ] + }, + "NorthwindModel.Region-update": { + "title": "Region (for update)", + "type": "object", + "properties": { + "RegionDescription": { + "type": "string", + "maxLength": 50 + } + } + }, + "NorthwindModel.Shipper": { + "title": "Shipper", + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Orders@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Shipper-create": { + "title": "Shipper (for create)", + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + }, + "required": [ + "ShipperID" + ] + }, + "NorthwindModel.Shipper-update": { + "title": "Shipper (for update)", + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + } + } + }, + "NorthwindModel.Supplier": { + "title": "Supplier", + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "HomePage": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + }, + "Products@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Supplier-create": { + "title": "Supplier (for create)", + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "HomePage": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + }, + "required": [ + "SupplierID" + ] + }, + "NorthwindModel.Supplier-update": { + "title": "Supplier (for update)", + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "HomePage": { + "type": "string", + "nullable": true + } + } + }, + "NorthwindModel.Territory": { + "title": "Territory", + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/components/schemas/NorthwindModel.Region" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + }, + "Employees@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Territory-create": { + "title": "Territory (for create)", + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/components/schemas/NorthwindModel.Region-create" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + }, + "required": [ + "TerritoryID" + ] + }, + "NorthwindModel.Territory-update": { + "title": "Territory (for update)", + "type": "object", + "properties": { + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + } + } + }, + "NorthwindModel.Alphabetical_list_of_product": { + "title": "Alphabetical_list_of_product", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + } + }, + "NorthwindModel.Alphabetical_list_of_product-create": { + "title": "Alphabetical_list_of_product (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + }, + "required": [ + "CategoryName", + "Discontinued", + "ProductID", + "ProductName" + ] + }, + "NorthwindModel.Alphabetical_list_of_product-update": { + "title": "Alphabetical_list_of_product (for update)", + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + } + } + }, + "NorthwindModel.Category_Sales_for_1997": { + "title": "Category_Sales_for_1997", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Category_Sales_for_1997-create": { + "title": "Category_Sales_for_1997 (for create)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CategoryName" + ] + }, + "NorthwindModel.Category_Sales_for_1997-update": { + "title": "Category_Sales_for_1997 (for update)", + "type": "object", + "properties": { + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Current_Product_List": { + "title": "Current_Product_List", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + } + }, + "NorthwindModel.Current_Product_List-create": { + "title": "Current_Product_List (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + }, + "required": [ + "ProductID", + "ProductName" + ] + }, + "NorthwindModel.Current_Product_List-update": { + "title": "Current_Product_List (for update)", + "type": "object" + }, + "NorthwindModel.Customer_and_Suppliers_by_City": { + "title": "Customer_and_Suppliers_by_City", + "type": "object", + "properties": { + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + } + }, + "NorthwindModel.Customer_and_Suppliers_by_City-create": { + "title": "Customer_and_Suppliers_by_City (for create)", + "type": "object", + "properties": { + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + }, + "required": [ + "CompanyName", + "Relationship" + ] + }, + "NorthwindModel.Customer_and_Suppliers_by_City-update": { + "title": "Customer_and_Suppliers_by_City (for update)", + "type": "object", + "properties": { + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + } + } + }, + "NorthwindModel.Invoice": { + "title": "Invoice", + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Invoice-create": { + "title": "Invoice (for create)", + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CustomerName", + "Discount", + "OrderID", + "ProductID", + "ProductName", + "Quantity", + "Salesperson", + "ShipperName", + "UnitPrice" + ] + }, + "NorthwindModel.Invoice-update": { + "title": "Invoice (for update)", + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Details_Extended": { + "title": "Order_Details_Extended", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Details_Extended-create": { + "title": "Order_Details_Extended (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "Discount", + "OrderID", + "ProductID", + "ProductName", + "Quantity", + "UnitPrice" + ] + }, + "NorthwindModel.Order_Details_Extended-update": { + "title": "Order_Details_Extended (for update)", + "type": "object", + "properties": { + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Subtotal": { + "title": "Order_Subtotal", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Subtotal-create": { + "title": "Order_Subtotal (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Order_Subtotal-update": { + "title": "Order_Subtotal (for update)", + "type": "object", + "properties": { + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Orders_Qry": { + "title": "Orders_Qry", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + } + } + }, + "NorthwindModel.Orders_Qry-create": { + "title": "Orders_Qry (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + } + }, + "required": [ + "CompanyName", + "OrderID" + ] + }, + "NorthwindModel.Orders_Qry-update": { + "title": "Orders_Qry (for update)", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + } + } + }, + "NorthwindModel.Product_Sales_for_1997": { + "title": "Product_Sales_for_1997", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Product_Sales_for_1997-create": { + "title": "Product_Sales_for_1997 (for create)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CategoryName", + "ProductName" + ] + }, + "NorthwindModel.Product_Sales_for_1997-update": { + "title": "Product_Sales_for_1997 (for update)", + "type": "object", + "properties": { + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Products_Above_Average_Price": { + "title": "Products_Above_Average_Price", + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Products_Above_Average_Price-create": { + "title": "Products_Above_Average_Price (for create)", + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "ProductName" + ] + }, + "NorthwindModel.Products_Above_Average_Price-update": { + "title": "Products_Above_Average_Price (for update)", + "type": "object", + "properties": { + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Products_by_Category": { + "title": "Products_by_Category", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + } + } + }, + "NorthwindModel.Products_by_Category-create": { + "title": "Products_by_Category (for create)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + } + }, + "required": [ + "CategoryName", + "Discontinued", + "ProductName" + ] + }, + "NorthwindModel.Products_by_Category-update": { + "title": "Products_by_Category (for update)", + "type": "object", + "properties": { + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + } + } + }, + "NorthwindModel.Sales_by_Category": { + "title": "Sales_by_Category", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Sales_by_Category-create": { + "title": "Sales_by_Category (for create)", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CategoryID", + "CategoryName", + "ProductName" + ] + }, + "NorthwindModel.Sales_by_Category-update": { + "title": "Sales_by_Category (for update)", + "type": "object", + "properties": { + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Sales_Totals_by_Amount": { + "title": "Sales_Totals_by_Amount", + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "NorthwindModel.Sales_Totals_by_Amount-create": { + "title": "Sales_Totals_by_Amount (for create)", + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + }, + "required": [ + "CompanyName", + "OrderID" + ] + }, + "NorthwindModel.Sales_Totals_by_Amount-update": { + "title": "Sales_Totals_by_Amount (for update)", + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Quarter": { + "title": "Summary_of_Sales_by_Quarter", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-create": { + "title": "Summary_of_Sales_by_Quarter (for create)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-update": { + "title": "Summary_of_Sales_by_Quarter (for update)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Year": { + "title": "Summary_of_Sales_by_Year", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Year-create": { + "title": "Summary_of_Sales_by_Year (for create)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Summary_of_Sales_by_Year-update": { + "title": "Summary_of_Sales_by_Year (for update)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "object", + "properties": { + "lang": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "lang", + "value" + ] + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/Northwind-V3.xml b/odata-openapi/examples/Northwind-V3.xml new file mode 100644 index 00000000..1b88d8c7 --- /dev/null +++ b/odata-openapi/examples/Northwind-V3.xml @@ -0,0 +1,591 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/Northwind-key-as-segment.openapi3.json b/odata-openapi/examples/Northwind-key-as-segment.openapi3.json new file mode 100644 index 00000000..6181f0ef --- /dev/null +++ b/odata-openapi/examples/Northwind-key-as-segment.openapi3.json @@ -0,0 +1,13979 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace ODataWebExperimental.Northwind.Model", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Category{bg:lightslategray}],[CustomerDemographic{bg:lightslategray}],[Customer{bg:lightslategray}],[Customer]*-*[CustomerDemographic],[Employee{bg:lightslategray}],[Employee]*-0..1[Employee],[Order_Detail{bg:lightslategray}],[Order_Detail]*-[Order],[Order{bg:lightslategray}],[Order]*-0..1[Customer],[Order]*-0..1[Employee],[Product{bg:lightslategray}],[Product]*-0..1[Category],[Product]-*[Order_Detail],[Region{bg:lightslategray}],[Shipper{bg:lightslategray}],[Shipper]0..1-*[Order],[Supplier{bg:lightslategray}],[Supplier]0..1-*[Product],[Territory{bg:lightslategray}],[Territory]*-[Region],[Territory]*-*[Employee],[Alphabetical_list_of_product{bg:lightslategray}],[Category_Sales_for_1997{bg:lightslategray}],[Current_Product_List{bg:lightslategray}],[Customer_and_Suppliers_by_City{bg:lightslategray}],[Invoice{bg:lightslategray}],[Order_Details_Extended{bg:lightslategray}],[Order_Subtotal{bg:lightslategray}],[Orders_Qry{bg:lightslategray}],[Product_Sales_for_1997{bg:lightslategray}],[Products_Above_Average_Price{bg:lightslategray}],[Products_by_Category{bg:lightslategray}],[Sales_by_Category{bg:lightslategray}],[Sales_Totals_by_Amount{bg:lightslategray}],[Summary_of_Sales_by_Quarter{bg:lightslategray}],[Summary_of_Sales_by_Year{bg:lightslategray}],[Summary_of_Sales_by_Years%20{bg:lawngreen}]++-*>[Summary_of_Sales_by_Year],[Summary_of_Sales_by_Quarters%20{bg:lawngreen}]++-*>[Summary_of_Sales_by_Quarter],[Sales_Totals_by_Amounts%20{bg:lawngreen}]++-*>[Sales_Totals_by_Amount],[Sales_by_Categories%20{bg:lawngreen}]++-*>[Sales_by_Category],[Products_by_Categories%20{bg:lawngreen}]++-*>[Products_by_Category],[Products_Above_Average_Prices%20{bg:lawngreen}]++-*>[Products_Above_Average_Price],[Product_Sales_for_1997%20{bg:lawngreen}]++-*>[Product_Sales_for_1997],[Orders_Qries%20{bg:lawngreen}]++-*>[Orders_Qry],[Order_Subtotals%20{bg:lawngreen}]++-*>[Order_Subtotal],[Order_Details_Extendeds%20{bg:lawngreen}]++-*>[Order_Details_Extended],[Invoices%20{bg:lawngreen}]++-*>[Invoice],[Customer_and_Suppliers_by_Cities%20{bg:lawngreen}]++-*>[Customer_and_Suppliers_by_City],[Current_Product_Lists%20{bg:lawngreen}]++-*>[Current_Product_List],[Category_Sales_for_1997%20{bg:lawngreen}]++-*>[Category_Sales_for_1997],[Alphabetical_list_of_products%20{bg:lawngreen}]++-*>[Alphabetical_list_of_product],[Territories%20{bg:lawngreen}]++-*>[Territory],[Suppliers%20{bg:lawngreen}]++-*>[Supplier],[Shippers%20{bg:lawngreen}]++-*>[Shipper],[Regions%20{bg:lawngreen}]++-*>[Region],[Products%20{bg:lawngreen}]++-*>[Product],[Orders%20{bg:lawngreen}]++-*>[Order],[Order_Details%20{bg:lawngreen}]++-*>[Order_Detail],[Employees%20{bg:lawngreen}]++-*>[Employee],[Customers%20{bg:lawngreen}]++-*>[Customer],[CustomerDemographics%20{bg:lawngreen}]++-*>[CustomerDemographic],[Categories%20{bg:lawngreen}]++-*>[Category])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Categories" + }, + { + "name": "CustomerDemographics" + }, + { + "name": "Customers" + }, + { + "name": "Employees" + }, + { + "name": "Order_Details" + }, + { + "name": "Orders" + }, + { + "name": "Products" + }, + { + "name": "Regions" + }, + { + "name": "Shippers" + }, + { + "name": "Suppliers" + }, + { + "name": "Territories" + }, + { + "name": "Alphabetical_list_of_products" + }, + { + "name": "Category_Sales_for_1997" + }, + { + "name": "Current_Product_Lists" + }, + { + "name": "Customer_and_Suppliers_by_Cities" + }, + { + "name": "Invoices" + }, + { + "name": "Order_Details_Extendeds" + }, + { + "name": "Order_Subtotals" + }, + { + "name": "Orders_Qries" + }, + { + "name": "Product_Sales_for_1997" + }, + { + "name": "Products_Above_Average_Prices" + }, + { + "name": "Products_by_Categories" + }, + { + "name": "Sales_by_Categories" + }, + { + "name": "Sales_Totals_by_Amounts" + }, + { + "name": "Summary_of_Sales_by_Quarters" + }, + { + "name": "Summary_of_Sales_by_Years" + } + ], + "paths": { + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "Description", + "Description desc", + "Picture", + "Picture desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories/{CategoryID}": { + "parameters": [ + { + "description": "key: CategoryID", + "in": "path", + "name": "CategoryID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories/{CategoryID}/Products": { + "parameters": [ + { + "description": "key: CategoryID", + "in": "path", + "name": "CategoryID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics": { + "get": { + "summary": "Get entities from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of CustomerDemographic", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics/{CustomerTypeID}": { + "parameters": [ + { + "description": "key: CustomerTypeID", + "in": "path", + "name": "CustomerTypeID", + "required": true, + "schema": { + "type": "string", + "maxLength": 10 + } + } + ], + "get": { + "summary": "Get entity from CustomerDemographics by key", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics/{CustomerTypeID}/Customers": { + "parameters": [ + { + "description": "key: CustomerTypeID", + "in": "path", + "name": "CustomerTypeID", + "required": true, + "schema": { + "type": "string", + "maxLength": 10 + } + } + ], + "get": { + "summary": "Get entities from related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers": { + "get": { + "summary": "Get entities from Customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers/{CustomerID}": { + "parameters": [ + { + "description": "key: CustomerID", + "in": "path", + "name": "CustomerID", + "required": true, + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entity from Customers by key", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customers", + "tags": [ + "Customers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers/{CustomerID}/Orders": { + "parameters": [ + { + "description": "key: CustomerID", + "in": "path", + "name": "CustomerID", + "required": true, + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Customers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Customers", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers/{CustomerID}/CustomerDemographics": { + "parameters": [ + { + "description": "key: CustomerID", + "in": "path", + "name": "CustomerID", + "required": true, + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entities from related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of CustomerDemographic", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees": { + "get": { + "summary": "Get entities from Employees", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Employees by key", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Employees", + "tags": [ + "Employees" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Employees1": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Employees1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees1", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Employee1": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Employee1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Orders": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Employees", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Employees", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Territories": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Employees", + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Territory", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Employees", + "Territories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details": { + "get": { + "summary": "Get entities from Order_Details", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Detail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details", + "tags": [ + "Order_Details" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details/{OrderID}/{ProductID}": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Order_Details by key", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details", + "tags": [ + "Order_Details" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details", + "tags": [ + "Order_Details" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details/{OrderID}/{ProductID}/Order": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Order", + "tags": [ + "Order_Details", + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details/{OrderID}/{ProductID}/Product": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "Order_Details", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders": { + "get": { + "summary": "Get entities from Orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Orders by key", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders", + "tags": [ + "Orders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Customer": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Customer", + "tags": [ + "Orders", + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Employee": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Employee", + "tags": [ + "Orders", + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Order_Details": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Detail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Shipper": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Shipper", + "tags": [ + "Orders", + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ProductID}": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ProductID}/Category": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ProductID}/Order_Details": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Detail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ProductID}/Supplier": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions": { + "get": { + "summary": "Get entities from Regions", + "tags": [ + "Regions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionID desc", + "RegionDescription", + "RegionDescription desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Region", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Regions", + "tags": [ + "Regions" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions/{RegionID}": { + "parameters": [ + { + "description": "key: RegionID", + "in": "path", + "name": "RegionID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Regions by key", + "tags": [ + "Regions" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Regions", + "tags": [ + "Regions" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Regions", + "tags": [ + "Regions" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions/{RegionID}/Territories": { + "parameters": [ + { + "description": "key: RegionID", + "in": "path", + "name": "RegionID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Regions", + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Territory", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Regions", + "Territories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers": { + "get": { + "summary": "Get entities from Shippers", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "ShipperID desc", + "CompanyName", + "CompanyName desc", + "Phone", + "Phone desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Shipper", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Shippers", + "tags": [ + "Shippers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers/{ShipperID}": { + "parameters": [ + { + "description": "key: ShipperID", + "in": "path", + "name": "ShipperID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Shippers by key", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Shippers", + "tags": [ + "Shippers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Shippers", + "tags": [ + "Shippers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers/{ShipperID}/Orders": { + "parameters": [ + { + "description": "key: ShipperID", + "in": "path", + "name": "ShipperID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "SupplierID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc", + "HomePage", + "HomePage desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Supplier", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers/{SupplierID}": { + "parameters": [ + { + "description": "key: SupplierID", + "in": "path", + "name": "SupplierID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers/{SupplierID}/Products": { + "parameters": [ + { + "description": "key: SupplierID", + "in": "path", + "name": "SupplierID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories": { + "get": { + "summary": "Get entities from Territories", + "tags": [ + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Territory", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Territories", + "tags": [ + "Territories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories/{TerritoryID}": { + "parameters": [ + { + "description": "key: TerritoryID", + "in": "path", + "name": "TerritoryID", + "required": true, + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get entity from Territories by key", + "tags": [ + "Territories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Territories", + "tags": [ + "Territories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Territories", + "tags": [ + "Territories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories/{TerritoryID}/Region": { + "parameters": [ + { + "description": "key: TerritoryID", + "in": "path", + "name": "TerritoryID", + "required": true, + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get related Region", + "tags": [ + "Territories", + "Regions" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories/{TerritoryID}/Employees": { + "parameters": [ + { + "description": "key: TerritoryID", + "in": "path", + "name": "TerritoryID", + "required": true, + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get entities from related Employees", + "tags": [ + "Territories", + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees", + "tags": [ + "Territories", + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products": { + "get": { + "summary": "Get entities from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc", + "CategoryName", + "CategoryName desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Alphabetical_list_of_product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products/{CategoryName}/{Discontinued}/{ProductID}/{ProductName}": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: Discontinued", + "in": "path", + "name": "Discontinued", + "required": true, + "schema": { + "type": "boolean" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Alphabetical_list_of_products by key", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Category_Sales_for_1997": { + "get": { + "summary": "Get entities from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "CategorySales", + "CategorySales desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category_Sales_for_1997", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Category_Sales_for_1997/{CategoryName}": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + } + ], + "get": { + "summary": "Get entity from Category_Sales_for_1997 by key", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Current_Product_Lists": { + "get": { + "summary": "Get entities from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Current_Product_List", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Current_Product_Lists/{ProductID}/{ProductName}": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Current_Product_Lists by key", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities": { + "get": { + "summary": "Get entities from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "City desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "Relationship", + "Relationship desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer_and_Suppliers_by_City", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities/{CompanyName}/{Relationship}": { + "parameters": [ + { + "description": "key: CompanyName", + "in": "path", + "name": "CompanyName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Relationship", + "in": "path", + "name": "Relationship", + "required": true, + "schema": { + "type": "string", + "maxLength": 9 + } + } + ], + "get": { + "summary": "Get entity from Customer_and_Suppliers_by_Cities by key", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Invoices": { + "get": { + "summary": "Get entities from Invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CustomerID", + "CustomerID desc", + "CustomerName", + "CustomerName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Salesperson", + "Salesperson desc", + "OrderID", + "OrderID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipperName", + "ShipperName desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc", + "Freight", + "Freight desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Invoice", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Invoices", + "tags": [ + "Invoices" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Invoices/{CustomerName}/{Discount}/{OrderID}/{ProductID}/{ProductName}/{Quantity}/{Salesperson}/{ShipperName}/{UnitPrice}": { + "parameters": [ + { + "description": "key: CustomerName", + "in": "path", + "name": "CustomerName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Discount", + "in": "path", + "name": "Discount", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Quantity", + "in": "path", + "name": "Quantity", + "required": true, + "schema": { + "type": "integer", + "format": "int16" + } + }, + { + "description": "key: Salesperson", + "in": "path", + "name": "Salesperson", + "required": true, + "schema": { + "type": "string", + "maxLength": 31 + } + }, + { + "description": "key: ShipperName", + "in": "path", + "name": "ShipperName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: UnitPrice", + "in": "path", + "name": "UnitPrice", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + } + } + ], + "get": { + "summary": "Get entity from Invoices by key", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Invoices", + "tags": [ + "Invoices" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Invoices", + "tags": [ + "Invoices" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details_Extendeds": { + "get": { + "summary": "Get entities from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Details_Extended", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details_Extendeds/{Discount}/{OrderID}/{ProductID}/{ProductName}/{Quantity}/{UnitPrice}": { + "parameters": [ + { + "description": "key: Discount", + "in": "path", + "name": "Discount", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Quantity", + "in": "path", + "name": "Quantity", + "required": true, + "schema": { + "type": "integer", + "format": "int16" + } + }, + { + "description": "key: UnitPrice", + "in": "path", + "name": "UnitPrice", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + } + } + ], + "get": { + "summary": "Get entity from Order_Details_Extendeds by key", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Subtotals": { + "get": { + "summary": "Get entities from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Subtotal", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Subtotals/{OrderID}": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Order_Subtotals by key", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders_Qries": { + "get": { + "summary": "Get entities from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CompanyName", + "CompanyName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Orders_Qry", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders_Qries/{CompanyName}/{OrderID}": { + "parameters": [ + { + "description": "key: CompanyName", + "in": "path", + "name": "CompanyName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Orders_Qries by key", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Product_Sales_for_1997": { + "get": { + "summary": "Get entities from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product_Sales_for_1997", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Product_Sales_for_1997/{CategoryName}/{ProductName}": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Product_Sales_for_1997 by key", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices": { + "get": { + "summary": "Get entities from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Products_Above_Average_Price", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices/{ProductName}": { + "parameters": [ + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Products_Above_Average_Prices by key", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_by_Categories": { + "get": { + "summary": "Get entities from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitsInStock", + "UnitsInStock desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Products_by_Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_by_Categories/{CategoryName}/{Discontinued}/{ProductName}": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: Discontinued", + "in": "path", + "name": "Discontinued", + "required": true, + "schema": { + "type": "boolean" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Products_by_Categories by key", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_by_Categories": { + "get": { + "summary": "Get entities from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales_by_Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_by_Categories/{CategoryID}/{CategoryName}/{ProductName}": { + "parameters": [ + { + "description": "key: CategoryID", + "in": "path", + "name": "CategoryID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Sales_by_Categories by key", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts": { + "get": { + "summary": "Get entities from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "SaleAmount desc", + "OrderID", + "OrderID desc", + "CompanyName", + "CompanyName desc", + "ShippedDate", + "ShippedDate desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales_Totals_by_Amount", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts/{CompanyName}/{OrderID}": { + "parameters": [ + { + "description": "key: CompanyName", + "in": "path", + "name": "CompanyName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Sales_Totals_by_Amounts by key", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Summary_of_Sales_by_Quarter", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters/{OrderID}": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Quarters by key", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Summary_of_Sales_by_Year", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years/{OrderID}": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Years by key", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Categories HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "NorthwindModel.Category": { + "title": "Category", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + }, + "required": [ + "CategoryID" + ] + }, + "NorthwindModel.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "format": "base64url", + "nullable": true + } + } + }, + "NorthwindModel.CustomerDemographic": { + "title": "CustomerDemographic", + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": "string", + "nullable": true + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + }, + "Customers@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.CustomerDemographic-create": { + "title": "CustomerDemographic (for create)", + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": "string", + "nullable": true + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + }, + "required": [ + "CustomerTypeID" + ] + }, + "NorthwindModel.CustomerDemographic-update": { + "title": "CustomerDemographic (for update)", + "type": "object", + "properties": { + "CustomerDesc": { + "type": "string", + "nullable": true + } + } + }, + "NorthwindModel.Customer": { + "title": "Customer", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Orders@odata.count": { + "$ref": "#/components/schemas/count" + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + }, + "CustomerDemographics@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Customer-create": { + "title": "Customer (for create)", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + }, + "required": [ + "CustomerID" + ] + }, + "NorthwindModel.Customer-update": { + "title": "Customer (for update)", + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + } + } + }, + "NorthwindModel.Employee": { + "title": "Employee", + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "TitleOfCourtesy": { + "type": "string", + "maxLength": 25, + "nullable": true + }, + "BirthDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "HomePhone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Extension": { + "type": "string", + "maxLength": 4, + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "PhotoPath": { + "type": "string", + "maxLength": 255, + "nullable": true + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + }, + "Employees1@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Employee1": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + ], + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Orders@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + }, + "Territories@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Employee-create": { + "title": "Employee (for create)", + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "TitleOfCourtesy": { + "type": "string", + "maxLength": 25, + "nullable": true + }, + "BirthDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "HomePhone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Extension": { + "type": "string", + "maxLength": 4, + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "PhotoPath": { + "type": "string", + "maxLength": 255, + "nullable": true + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + }, + "Employee1": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + ], + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "EmployeeID" + ] + }, + "NorthwindModel.Employee-update": { + "title": "Employee (for update)", + "type": "object", + "properties": { + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "TitleOfCourtesy": { + "type": "string", + "maxLength": 25, + "nullable": true + }, + "BirthDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "HomePhone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Extension": { + "type": "string", + "maxLength": 4, + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "PhotoPath": { + "type": "string", + "maxLength": 255, + "nullable": true + } + } + }, + "NorthwindModel.Order_Detail": { + "title": "Order_Detail", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/components/schemas/NorthwindModel.Order" + }, + "Product": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + }, + "NorthwindModel.Order_Detail-create": { + "title": "Order_Detail (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + }, + "Product": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + }, + "required": [ + "OrderID", + "ProductID" + ] + }, + "NorthwindModel.Order_Detail-update": { + "title": "Order_Detail (for update)", + "type": "object", + "properties": { + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + } + }, + "NorthwindModel.Order": { + "title": "Order", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Customer": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + ], + "nullable": true + }, + "Employee": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + }, + "Order_Details@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Shipper": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + ], + "nullable": true + } + } + }, + "NorthwindModel.Order-create": { + "title": "Order (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Customer": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + ], + "nullable": true + }, + "Employee": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + }, + "Shipper": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Shipper-create" + } + ], + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Order-update": { + "title": "Order (for update)", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + } + } + }, + "NorthwindModel.Product": { + "title": "Product", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + }, + "Order_Details@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + ], + "nullable": true + } + } + }, + "NorthwindModel.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Category-create" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Supplier-create" + } + ], + "nullable": true + } + }, + "required": [ + "ProductID" + ] + }, + "NorthwindModel.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + } + } + }, + "NorthwindModel.Region": { + "title": "Region", + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + }, + "Territories@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Region-create": { + "title": "Region (for create)", + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "RegionID" + ] + }, + "NorthwindModel.Region-update": { + "title": "Region (for update)", + "type": "object", + "properties": { + "RegionDescription": { + "type": "string", + "maxLength": 50 + } + } + }, + "NorthwindModel.Shipper": { + "title": "Shipper", + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Orders@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Shipper-create": { + "title": "Shipper (for create)", + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + }, + "required": [ + "ShipperID" + ] + }, + "NorthwindModel.Shipper-update": { + "title": "Shipper (for update)", + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + } + } + }, + "NorthwindModel.Supplier": { + "title": "Supplier", + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "HomePage": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Supplier-create": { + "title": "Supplier (for create)", + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "HomePage": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + }, + "required": [ + "SupplierID" + ] + }, + "NorthwindModel.Supplier-update": { + "title": "Supplier (for update)", + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "HomePage": { + "type": "string", + "nullable": true + } + } + }, + "NorthwindModel.Territory": { + "title": "Territory", + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/components/schemas/NorthwindModel.Region" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + }, + "Employees@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Territory-create": { + "title": "Territory (for create)", + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/components/schemas/NorthwindModel.Region-create" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + }, + "required": [ + "TerritoryID" + ] + }, + "NorthwindModel.Territory-update": { + "title": "Territory (for update)", + "type": "object", + "properties": { + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + } + } + }, + "NorthwindModel.Alphabetical_list_of_product": { + "title": "Alphabetical_list_of_product", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + } + }, + "NorthwindModel.Alphabetical_list_of_product-create": { + "title": "Alphabetical_list_of_product (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + }, + "required": [ + "CategoryName", + "Discontinued", + "ProductID", + "ProductName" + ] + }, + "NorthwindModel.Alphabetical_list_of_product-update": { + "title": "Alphabetical_list_of_product (for update)", + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + } + } + }, + "NorthwindModel.Category_Sales_for_1997": { + "title": "Category_Sales_for_1997", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Category_Sales_for_1997-create": { + "title": "Category_Sales_for_1997 (for create)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CategoryName" + ] + }, + "NorthwindModel.Category_Sales_for_1997-update": { + "title": "Category_Sales_for_1997 (for update)", + "type": "object", + "properties": { + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Current_Product_List": { + "title": "Current_Product_List", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + } + }, + "NorthwindModel.Current_Product_List-create": { + "title": "Current_Product_List (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + }, + "required": [ + "ProductID", + "ProductName" + ] + }, + "NorthwindModel.Current_Product_List-update": { + "title": "Current_Product_List (for update)", + "type": "object" + }, + "NorthwindModel.Customer_and_Suppliers_by_City": { + "title": "Customer_and_Suppliers_by_City", + "type": "object", + "properties": { + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + } + }, + "NorthwindModel.Customer_and_Suppliers_by_City-create": { + "title": "Customer_and_Suppliers_by_City (for create)", + "type": "object", + "properties": { + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + }, + "required": [ + "CompanyName", + "Relationship" + ] + }, + "NorthwindModel.Customer_and_Suppliers_by_City-update": { + "title": "Customer_and_Suppliers_by_City (for update)", + "type": "object", + "properties": { + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + } + } + }, + "NorthwindModel.Invoice": { + "title": "Invoice", + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Invoice-create": { + "title": "Invoice (for create)", + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CustomerName", + "Discount", + "OrderID", + "ProductID", + "ProductName", + "Quantity", + "Salesperson", + "ShipperName", + "UnitPrice" + ] + }, + "NorthwindModel.Invoice-update": { + "title": "Invoice (for update)", + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Details_Extended": { + "title": "Order_Details_Extended", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Details_Extended-create": { + "title": "Order_Details_Extended (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "Discount", + "OrderID", + "ProductID", + "ProductName", + "Quantity", + "UnitPrice" + ] + }, + "NorthwindModel.Order_Details_Extended-update": { + "title": "Order_Details_Extended (for update)", + "type": "object", + "properties": { + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Subtotal": { + "title": "Order_Subtotal", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Subtotal-create": { + "title": "Order_Subtotal (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Order_Subtotal-update": { + "title": "Order_Subtotal (for update)", + "type": "object", + "properties": { + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Orders_Qry": { + "title": "Orders_Qry", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + } + } + }, + "NorthwindModel.Orders_Qry-create": { + "title": "Orders_Qry (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + } + }, + "required": [ + "CompanyName", + "OrderID" + ] + }, + "NorthwindModel.Orders_Qry-update": { + "title": "Orders_Qry (for update)", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + } + } + }, + "NorthwindModel.Product_Sales_for_1997": { + "title": "Product_Sales_for_1997", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Product_Sales_for_1997-create": { + "title": "Product_Sales_for_1997 (for create)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CategoryName", + "ProductName" + ] + }, + "NorthwindModel.Product_Sales_for_1997-update": { + "title": "Product_Sales_for_1997 (for update)", + "type": "object", + "properties": { + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Products_Above_Average_Price": { + "title": "Products_Above_Average_Price", + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Products_Above_Average_Price-create": { + "title": "Products_Above_Average_Price (for create)", + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "ProductName" + ] + }, + "NorthwindModel.Products_Above_Average_Price-update": { + "title": "Products_Above_Average_Price (for update)", + "type": "object", + "properties": { + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Products_by_Category": { + "title": "Products_by_Category", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + } + } + }, + "NorthwindModel.Products_by_Category-create": { + "title": "Products_by_Category (for create)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + } + }, + "required": [ + "CategoryName", + "Discontinued", + "ProductName" + ] + }, + "NorthwindModel.Products_by_Category-update": { + "title": "Products_by_Category (for update)", + "type": "object", + "properties": { + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + } + } + }, + "NorthwindModel.Sales_by_Category": { + "title": "Sales_by_Category", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Sales_by_Category-create": { + "title": "Sales_by_Category (for create)", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CategoryID", + "CategoryName", + "ProductName" + ] + }, + "NorthwindModel.Sales_by_Category-update": { + "title": "Sales_by_Category (for update)", + "type": "object", + "properties": { + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Sales_Totals_by_Amount": { + "title": "Sales_Totals_by_Amount", + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "NorthwindModel.Sales_Totals_by_Amount-create": { + "title": "Sales_Totals_by_Amount (for create)", + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + }, + "required": [ + "CompanyName", + "OrderID" + ] + }, + "NorthwindModel.Sales_Totals_by_Amount-update": { + "title": "Sales_Totals_by_Amount (for update)", + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Quarter": { + "title": "Summary_of_Sales_by_Quarter", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-create": { + "title": "Summary_of_Sales_by_Quarter (for create)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-update": { + "title": "Summary_of_Sales_by_Quarter (for update)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Year": { + "title": "Summary_of_Sales_by_Year", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Year-create": { + "title": "Summary_of_Sales_by_Year (for create)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Summary_of_Sales_by_Year-update": { + "title": "Summary_of_Sales_by_Year (for update)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/Northwind-key-as-segment.xml b/odata-openapi/examples/Northwind-key-as-segment.xml new file mode 100644 index 00000000..0076e159 --- /dev/null +++ b/odata-openapi/examples/Northwind-key-as-segment.xml @@ -0,0 +1,453 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/Northwind.openapi3.json b/odata-openapi/examples/Northwind.openapi3.json new file mode 100644 index 00000000..dd3de58c --- /dev/null +++ b/odata-openapi/examples/Northwind.openapi3.json @@ -0,0 +1,13979 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace ODataWebExperimental.Northwind.Model", + "description": "This service is located at [https://services.odata.org/V4/Northwind/Northwind.svc/](https://services.odata.org/V4/Northwind/Northwind.svc/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Category{bg:lightslategray}],[CustomerDemographic{bg:lightslategray}],[Customer{bg:lightslategray}],[Customer]*-*[CustomerDemographic],[Employee{bg:lightslategray}],[Employee]*-0..1[Employee],[Order_Detail{bg:lightslategray}],[Order_Detail]*-[Order],[Order{bg:lightslategray}],[Order]*-0..1[Customer],[Order]*-0..1[Employee],[Product{bg:lightslategray}],[Product]*-0..1[Category],[Product]-*[Order_Detail],[Region{bg:lightslategray}],[Shipper{bg:lightslategray}],[Shipper]0..1-*[Order],[Supplier{bg:lightslategray}],[Supplier]0..1-*[Product],[Territory{bg:lightslategray}],[Territory]*-[Region],[Territory]*-*[Employee],[Alphabetical_list_of_product{bg:lightslategray}],[Category_Sales_for_1997{bg:lightslategray}],[Current_Product_List{bg:lightslategray}],[Customer_and_Suppliers_by_City{bg:lightslategray}],[Invoice{bg:lightslategray}],[Order_Details_Extended{bg:lightslategray}],[Order_Subtotal{bg:lightslategray}],[Orders_Qry{bg:lightslategray}],[Product_Sales_for_1997{bg:lightslategray}],[Products_Above_Average_Price{bg:lightslategray}],[Products_by_Category{bg:lightslategray}],[Sales_by_Category{bg:lightslategray}],[Sales_Totals_by_Amount{bg:lightslategray}],[Summary_of_Sales_by_Quarter{bg:lightslategray}],[Summary_of_Sales_by_Year{bg:lightslategray}],[Summary_of_Sales_by_Years%20{bg:lawngreen}]++-*>[Summary_of_Sales_by_Year],[Summary_of_Sales_by_Quarters%20{bg:lawngreen}]++-*>[Summary_of_Sales_by_Quarter],[Sales_Totals_by_Amounts%20{bg:lawngreen}]++-*>[Sales_Totals_by_Amount],[Sales_by_Categories%20{bg:lawngreen}]++-*>[Sales_by_Category],[Products_by_Categories%20{bg:lawngreen}]++-*>[Products_by_Category],[Products_Above_Average_Prices%20{bg:lawngreen}]++-*>[Products_Above_Average_Price],[Product_Sales_for_1997%20{bg:lawngreen}]++-*>[Product_Sales_for_1997],[Orders_Qries%20{bg:lawngreen}]++-*>[Orders_Qry],[Order_Subtotals%20{bg:lawngreen}]++-*>[Order_Subtotal],[Order_Details_Extendeds%20{bg:lawngreen}]++-*>[Order_Details_Extended],[Invoices%20{bg:lawngreen}]++-*>[Invoice],[Customer_and_Suppliers_by_Cities%20{bg:lawngreen}]++-*>[Customer_and_Suppliers_by_City],[Current_Product_Lists%20{bg:lawngreen}]++-*>[Current_Product_List],[Category_Sales_for_1997%20{bg:lawngreen}]++-*>[Category_Sales_for_1997],[Alphabetical_list_of_products%20{bg:lawngreen}]++-*>[Alphabetical_list_of_product],[Territories%20{bg:lawngreen}]++-*>[Territory],[Suppliers%20{bg:lawngreen}]++-*>[Supplier],[Shippers%20{bg:lawngreen}]++-*>[Shipper],[Regions%20{bg:lawngreen}]++-*>[Region],[Products%20{bg:lawngreen}]++-*>[Product],[Orders%20{bg:lawngreen}]++-*>[Order],[Order_Details%20{bg:lawngreen}]++-*>[Order_Detail],[Employees%20{bg:lawngreen}]++-*>[Employee],[Customers%20{bg:lawngreen}]++-*>[Customer],[CustomerDemographics%20{bg:lawngreen}]++-*>[CustomerDemographic],[Categories%20{bg:lawngreen}]++-*>[Category])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://services.odata.org/V4/Northwind/Northwind.svc" + } + ], + "tags": [ + { + "name": "Categories" + }, + { + "name": "CustomerDemographics" + }, + { + "name": "Customers" + }, + { + "name": "Employees" + }, + { + "name": "Order_Details" + }, + { + "name": "Orders" + }, + { + "name": "Products" + }, + { + "name": "Regions" + }, + { + "name": "Shippers" + }, + { + "name": "Suppliers" + }, + { + "name": "Territories" + }, + { + "name": "Alphabetical_list_of_products" + }, + { + "name": "Category_Sales_for_1997" + }, + { + "name": "Current_Product_Lists" + }, + { + "name": "Customer_and_Suppliers_by_Cities" + }, + { + "name": "Invoices" + }, + { + "name": "Order_Details_Extendeds" + }, + { + "name": "Order_Subtotals" + }, + { + "name": "Orders_Qries" + }, + { + "name": "Product_Sales_for_1997" + }, + { + "name": "Products_Above_Average_Prices" + }, + { + "name": "Products_by_Categories" + }, + { + "name": "Sales_by_Categories" + }, + { + "name": "Sales_Totals_by_Amounts" + }, + { + "name": "Summary_of_Sales_by_Quarters" + }, + { + "name": "Summary_of_Sales_by_Years" + } + ], + "paths": { + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "Description", + "Description desc", + "Picture", + "Picture desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({CategoryID})": { + "parameters": [ + { + "description": "key: CategoryID", + "in": "path", + "name": "CategoryID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({CategoryID})/Products": { + "parameters": [ + { + "description": "key: CategoryID", + "in": "path", + "name": "CategoryID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics": { + "get": { + "summary": "Get entities from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of CustomerDemographic", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics('{CustomerTypeID}')": { + "parameters": [ + { + "description": "key: CustomerTypeID", + "in": "path", + "name": "CustomerTypeID", + "required": true, + "schema": { + "type": "string", + "maxLength": 10 + } + } + ], + "get": { + "summary": "Get entity from CustomerDemographics by key", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics('{CustomerTypeID}')/Customers": { + "parameters": [ + { + "description": "key: CustomerTypeID", + "in": "path", + "name": "CustomerTypeID", + "required": true, + "schema": { + "type": "string", + "maxLength": 10 + } + } + ], + "get": { + "summary": "Get entities from related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers": { + "get": { + "summary": "Get entities from Customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{CustomerID}')": { + "parameters": [ + { + "description": "key: CustomerID", + "in": "path", + "name": "CustomerID", + "required": true, + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entity from Customers by key", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customers", + "tags": [ + "Customers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{CustomerID}')/Orders": { + "parameters": [ + { + "description": "key: CustomerID", + "in": "path", + "name": "CustomerID", + "required": true, + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Customers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Customers", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers('{CustomerID}')/CustomerDemographics": { + "parameters": [ + { + "description": "key: CustomerID", + "in": "path", + "name": "CustomerID", + "required": true, + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entities from related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of CustomerDemographic", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees": { + "get": { + "summary": "Get entities from Employees", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Employees by key", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Employees", + "tags": [ + "Employees" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})/Employees1": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Employees1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees1", + "tags": [ + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})/Employee1": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Employee1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})/Orders": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Employees", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Employees", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees({EmployeeID})/Territories": { + "parameters": [ + { + "description": "key: EmployeeID", + "in": "path", + "name": "EmployeeID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Employees", + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Territory", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Employees", + "Territories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details": { + "get": { + "summary": "Get entities from Order_Details", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Detail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details", + "tags": [ + "Order_Details" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details(OrderID={OrderID},ProductID={ProductID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Order_Details by key", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details", + "tags": [ + "Order_Details" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details", + "tags": [ + "Order_Details" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details(OrderID={OrderID},ProductID={ProductID})/Order": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Order", + "tags": [ + "Order_Details", + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details(OrderID={OrderID},ProductID={ProductID})/Product": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "Order_Details", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders": { + "get": { + "summary": "Get entities from Orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Orders by key", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders", + "tags": [ + "Orders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})/Customer": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Customer", + "tags": [ + "Orders", + "Customers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})/Employee": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Employee", + "tags": [ + "Orders", + "Employees" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})/Order_Details": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Detail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({OrderID})/Shipper": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Shipper", + "tags": [ + "Orders", + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ProductID})": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ProductID})/Category": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ProductID})/Order_Details": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Detail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ProductID})/Supplier": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions": { + "get": { + "summary": "Get entities from Regions", + "tags": [ + "Regions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionID desc", + "RegionDescription", + "RegionDescription desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Region", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Regions", + "tags": [ + "Regions" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions({RegionID})": { + "parameters": [ + { + "description": "key: RegionID", + "in": "path", + "name": "RegionID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Regions by key", + "tags": [ + "Regions" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Regions", + "tags": [ + "Regions" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Regions", + "tags": [ + "Regions" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions({RegionID})/Territories": { + "parameters": [ + { + "description": "key: RegionID", + "in": "path", + "name": "RegionID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Regions", + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Territory", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Regions", + "Territories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers": { + "get": { + "summary": "Get entities from Shippers", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "ShipperID desc", + "CompanyName", + "CompanyName desc", + "Phone", + "Phone desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Shipper", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Shippers", + "tags": [ + "Shippers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers({ShipperID})": { + "parameters": [ + { + "description": "key: ShipperID", + "in": "path", + "name": "ShipperID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Shippers by key", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Shippers", + "tags": [ + "Shippers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Shippers", + "tags": [ + "Shippers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers({ShipperID})/Orders": { + "parameters": [ + { + "description": "key: ShipperID", + "in": "path", + "name": "ShipperID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "SupplierID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc", + "HomePage", + "HomePage desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Supplier", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({SupplierID})": { + "parameters": [ + { + "description": "key: SupplierID", + "in": "path", + "name": "SupplierID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({SupplierID})/Products": { + "parameters": [ + { + "description": "key: SupplierID", + "in": "path", + "name": "SupplierID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories": { + "get": { + "summary": "Get entities from Territories", + "tags": [ + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Territory", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Territories", + "tags": [ + "Territories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories('{TerritoryID}')": { + "parameters": [ + { + "description": "key: TerritoryID", + "in": "path", + "name": "TerritoryID", + "required": true, + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get entity from Territories by key", + "tags": [ + "Territories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Territories", + "tags": [ + "Territories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Territories", + "tags": [ + "Territories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories('{TerritoryID}')/Region": { + "parameters": [ + { + "description": "key: TerritoryID", + "in": "path", + "name": "TerritoryID", + "required": true, + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get related Region", + "tags": [ + "Territories", + "Regions" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories('{TerritoryID}')/Employees": { + "parameters": [ + { + "description": "key: TerritoryID", + "in": "path", + "name": "TerritoryID", + "required": true, + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get entities from related Employees", + "tags": [ + "Territories", + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Employee", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees", + "tags": [ + "Territories", + "Employees" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products": { + "get": { + "summary": "Get entities from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc", + "CategoryName", + "CategoryName desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Alphabetical_list_of_product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products(CategoryName='{CategoryName}',Discontinued='{Discontinued}',ProductID={ProductID},ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: Discontinued", + "in": "path", + "name": "Discontinued", + "required": true, + "schema": { + "type": "boolean" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Alphabetical_list_of_products by key", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Category_Sales_for_1997": { + "get": { + "summary": "Get entities from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "CategorySales", + "CategorySales desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category_Sales_for_1997", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Category_Sales_for_1997('{CategoryName}')": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + } + ], + "get": { + "summary": "Get entity from Category_Sales_for_1997 by key", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Current_Product_Lists": { + "get": { + "summary": "Get entities from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Current_Product_List", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Current_Product_Lists(ProductID={ProductID},ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Current_Product_Lists by key", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities": { + "get": { + "summary": "Get entities from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "City desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "Relationship", + "Relationship desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer_and_Suppliers_by_City", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities(CompanyName='{CompanyName}',Relationship='{Relationship}')": { + "parameters": [ + { + "description": "key: CompanyName", + "in": "path", + "name": "CompanyName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Relationship", + "in": "path", + "name": "Relationship", + "required": true, + "schema": { + "type": "string", + "maxLength": 9 + } + } + ], + "get": { + "summary": "Get entity from Customer_and_Suppliers_by_Cities by key", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Invoices": { + "get": { + "summary": "Get entities from Invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CustomerID", + "CustomerID desc", + "CustomerName", + "CustomerName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Salesperson", + "Salesperson desc", + "OrderID", + "OrderID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipperName", + "ShipperName desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc", + "Freight", + "Freight desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Invoice", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Invoices", + "tags": [ + "Invoices" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Invoices(CustomerName='{CustomerName}',Discount={Discount},OrderID={OrderID},ProductID={ProductID},ProductName='{ProductName}',Quantity={Quantity},Salesperson='{Salesperson}',ShipperName='{ShipperName}',UnitPrice='{UnitPrice}')": { + "parameters": [ + { + "description": "key: CustomerName", + "in": "path", + "name": "CustomerName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Discount", + "in": "path", + "name": "Discount", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Quantity", + "in": "path", + "name": "Quantity", + "required": true, + "schema": { + "type": "integer", + "format": "int16" + } + }, + { + "description": "key: Salesperson", + "in": "path", + "name": "Salesperson", + "required": true, + "schema": { + "type": "string", + "maxLength": 31 + } + }, + { + "description": "key: ShipperName", + "in": "path", + "name": "ShipperName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: UnitPrice", + "in": "path", + "name": "UnitPrice", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + } + } + ], + "get": { + "summary": "Get entity from Invoices by key", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Invoices", + "tags": [ + "Invoices" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Invoices", + "tags": [ + "Invoices" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details_Extendeds": { + "get": { + "summary": "Get entities from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Details_Extended", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details_Extendeds(Discount={Discount},OrderID={OrderID},ProductID={ProductID},ProductName='{ProductName}',Quantity={Quantity},UnitPrice='{UnitPrice}')": { + "parameters": [ + { + "description": "key: Discount", + "in": "path", + "name": "Discount", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: Quantity", + "in": "path", + "name": "Quantity", + "required": true, + "schema": { + "type": "integer", + "format": "int16" + } + }, + { + "description": "key: UnitPrice", + "in": "path", + "name": "UnitPrice", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + } + } + ], + "get": { + "summary": "Get entity from Order_Details_Extendeds by key", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Subtotals": { + "get": { + "summary": "Get entities from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order_Subtotal", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Subtotals({OrderID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Order_Subtotals by key", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders_Qries": { + "get": { + "summary": "Get entities from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CompanyName", + "CompanyName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Orders_Qry", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders_Qries(CompanyName='{CompanyName}',OrderID={OrderID})": { + "parameters": [ + { + "description": "key: CompanyName", + "in": "path", + "name": "CompanyName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Orders_Qries by key", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Product_Sales_for_1997": { + "get": { + "summary": "Get entities from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product_Sales_for_1997", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Product_Sales_for_1997(CategoryName='{CategoryName}',ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Product_Sales_for_1997 by key", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices": { + "get": { + "summary": "Get entities from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Products_Above_Average_Price", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices('{ProductName}')": { + "parameters": [ + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Products_Above_Average_Prices by key", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_by_Categories": { + "get": { + "summary": "Get entities from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitsInStock", + "UnitsInStock desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Products_by_Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_by_Categories(CategoryName='{CategoryName}',Discontinued='{Discontinued}',ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: Discontinued", + "in": "path", + "name": "Discontinued", + "required": true, + "schema": { + "type": "boolean" + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Products_by_Categories by key", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_by_Categories": { + "get": { + "summary": "Get entities from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales_by_Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_by_Categories(CategoryID={CategoryID},CategoryName='{CategoryName}',ProductName='{ProductName}')": { + "parameters": [ + { + "description": "key: CategoryID", + "in": "path", + "name": "CategoryID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: CategoryName", + "in": "path", + "name": "CategoryName", + "required": true, + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "description": "key: ProductName", + "in": "path", + "name": "ProductName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Sales_by_Categories by key", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts": { + "get": { + "summary": "Get entities from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "SaleAmount desc", + "OrderID", + "OrderID desc", + "CompanyName", + "CompanyName desc", + "ShippedDate", + "ShippedDate desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales_Totals_by_Amount", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts(CompanyName='{CompanyName}',OrderID={OrderID})": { + "parameters": [ + { + "description": "key: CompanyName", + "in": "path", + "name": "CompanyName", + "required": true, + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Sales_Totals_by_Amounts by key", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Summary_of_Sales_by_Quarter", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters({OrderID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Quarters by key", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Summary_of_Sales_by_Year", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years({OrderID})": { + "parameters": [ + { + "description": "key: OrderID", + "in": "path", + "name": "OrderID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Years by key", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Categories HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "NorthwindModel.Category": { + "title": "Category", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + }, + "required": [ + "CategoryID" + ] + }, + "NorthwindModel.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "format": "base64url", + "nullable": true + } + } + }, + "NorthwindModel.CustomerDemographic": { + "title": "CustomerDemographic", + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": "string", + "nullable": true + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + }, + "Customers@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.CustomerDemographic-create": { + "title": "CustomerDemographic (for create)", + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": "string", + "nullable": true + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + }, + "required": [ + "CustomerTypeID" + ] + }, + "NorthwindModel.CustomerDemographic-update": { + "title": "CustomerDemographic (for update)", + "type": "object", + "properties": { + "CustomerDesc": { + "type": "string", + "nullable": true + } + } + }, + "NorthwindModel.Customer": { + "title": "Customer", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Orders@odata.count": { + "$ref": "#/components/schemas/count" + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + }, + "CustomerDemographics@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Customer-create": { + "title": "Customer (for create)", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + }, + "required": [ + "CustomerID" + ] + }, + "NorthwindModel.Customer-update": { + "title": "Customer (for update)", + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + } + } + }, + "NorthwindModel.Employee": { + "title": "Employee", + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "TitleOfCourtesy": { + "type": "string", + "maxLength": 25, + "nullable": true + }, + "BirthDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "HomePhone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Extension": { + "type": "string", + "maxLength": 4, + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "PhotoPath": { + "type": "string", + "maxLength": 255, + "nullable": true + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + }, + "Employees1@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Employee1": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + ], + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Orders@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + }, + "Territories@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Employee-create": { + "title": "Employee (for create)", + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "TitleOfCourtesy": { + "type": "string", + "maxLength": 25, + "nullable": true + }, + "BirthDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "HomePhone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Extension": { + "type": "string", + "maxLength": 4, + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "PhotoPath": { + "type": "string", + "maxLength": 255, + "nullable": true + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + }, + "Employee1": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + ], + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "EmployeeID" + ] + }, + "NorthwindModel.Employee-update": { + "title": "Employee (for update)", + "type": "object", + "properties": { + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "TitleOfCourtesy": { + "type": "string", + "maxLength": 25, + "nullable": true + }, + "BirthDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "HomePhone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Extension": { + "type": "string", + "maxLength": 4, + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "PhotoPath": { + "type": "string", + "maxLength": 255, + "nullable": true + } + } + }, + "NorthwindModel.Order_Detail": { + "title": "Order_Detail", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/components/schemas/NorthwindModel.Order" + }, + "Product": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + }, + "NorthwindModel.Order_Detail-create": { + "title": "Order_Detail (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + }, + "Product": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + }, + "required": [ + "OrderID", + "ProductID" + ] + }, + "NorthwindModel.Order_Detail-update": { + "title": "Order_Detail (for update)", + "type": "object", + "properties": { + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + } + }, + "NorthwindModel.Order": { + "title": "Order", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Customer": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + ], + "nullable": true + }, + "Employee": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + }, + "Order_Details@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Shipper": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + ], + "nullable": true + } + } + }, + "NorthwindModel.Order-create": { + "title": "Order (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Customer": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + ], + "nullable": true + }, + "Employee": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + }, + "Shipper": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Shipper-create" + } + ], + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Order-update": { + "title": "Order (for update)", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + } + } + }, + "NorthwindModel.Product": { + "title": "Product", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + }, + "Order_Details@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + ], + "nullable": true + } + } + }, + "NorthwindModel.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Category-create" + } + ], + "nullable": true + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Supplier-create" + } + ], + "nullable": true + } + }, + "required": [ + "ProductID" + ] + }, + "NorthwindModel.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + } + } + }, + "NorthwindModel.Region": { + "title": "Region", + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + }, + "Territories@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Region-create": { + "title": "Region (for create)", + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "RegionID" + ] + }, + "NorthwindModel.Region-update": { + "title": "Region (for update)", + "type": "object", + "properties": { + "RegionDescription": { + "type": "string", + "maxLength": 50 + } + } + }, + "NorthwindModel.Shipper": { + "title": "Shipper", + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Orders@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Shipper-create": { + "title": "Shipper (for create)", + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + }, + "required": [ + "ShipperID" + ] + }, + "NorthwindModel.Shipper-update": { + "title": "Shipper (for update)", + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + } + } + }, + "NorthwindModel.Supplier": { + "title": "Supplier", + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "HomePage": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Supplier-create": { + "title": "Supplier (for create)", + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "HomePage": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + }, + "required": [ + "SupplierID" + ] + }, + "NorthwindModel.Supplier-update": { + "title": "Supplier (for update)", + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "ContactTitle": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Phone": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "Fax": { + "type": "string", + "maxLength": 24, + "nullable": true + }, + "HomePage": { + "type": "string", + "nullable": true + } + } + }, + "NorthwindModel.Territory": { + "title": "Territory", + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/components/schemas/NorthwindModel.Region" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + }, + "Employees@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "NorthwindModel.Territory-create": { + "title": "Territory (for create)", + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/components/schemas/NorthwindModel.Region-create" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + }, + "required": [ + "TerritoryID" + ] + }, + "NorthwindModel.Territory-update": { + "title": "Territory (for update)", + "type": "object", + "properties": { + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + } + } + }, + "NorthwindModel.Alphabetical_list_of_product": { + "title": "Alphabetical_list_of_product", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + } + }, + "NorthwindModel.Alphabetical_list_of_product-create": { + "title": "Alphabetical_list_of_product (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + }, + "required": [ + "CategoryName", + "Discontinued", + "ProductID", + "ProductName" + ] + }, + "NorthwindModel.Alphabetical_list_of_product-update": { + "title": "Alphabetical_list_of_product (for update)", + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "CategoryID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "UnitsOnOrder": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "ReorderLevel": { + "type": "integer", + "format": "int16", + "nullable": true + } + } + }, + "NorthwindModel.Category_Sales_for_1997": { + "title": "Category_Sales_for_1997", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Category_Sales_for_1997-create": { + "title": "Category_Sales_for_1997 (for create)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CategoryName" + ] + }, + "NorthwindModel.Category_Sales_for_1997-update": { + "title": "Category_Sales_for_1997 (for update)", + "type": "object", + "properties": { + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Current_Product_List": { + "title": "Current_Product_List", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + } + }, + "NorthwindModel.Current_Product_List-create": { + "title": "Current_Product_List (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + }, + "required": [ + "ProductID", + "ProductName" + ] + }, + "NorthwindModel.Current_Product_List-update": { + "title": "Current_Product_List (for update)", + "type": "object" + }, + "NorthwindModel.Customer_and_Suppliers_by_City": { + "title": "Customer_and_Suppliers_by_City", + "type": "object", + "properties": { + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + } + }, + "NorthwindModel.Customer_and_Suppliers_by_City-create": { + "title": "Customer_and_Suppliers_by_City (for create)", + "type": "object", + "properties": { + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + }, + "required": [ + "CompanyName", + "Relationship" + ] + }, + "NorthwindModel.Customer_and_Suppliers_by_City-update": { + "title": "Customer_and_Suppliers_by_City (for update)", + "type": "object", + "properties": { + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ContactName": { + "type": "string", + "maxLength": 30, + "nullable": true + } + } + }, + "NorthwindModel.Invoice": { + "title": "Invoice", + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Invoice-create": { + "title": "Invoice (for create)", + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CustomerName", + "Discount", + "OrderID", + "ProductID", + "ProductName", + "Quantity", + "Salesperson", + "ShipperName", + "UnitPrice" + ] + }, + "NorthwindModel.Invoice-update": { + "title": "Invoice (for update)", + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Details_Extended": { + "title": "Order_Details_Extended", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Details_Extended-create": { + "title": "Order_Details_Extended (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "Discount", + "OrderID", + "ProductID", + "ProductName", + "Quantity", + "UnitPrice" + ] + }, + "NorthwindModel.Order_Details_Extended-update": { + "title": "Order_Details_Extended (for update)", + "type": "object", + "properties": { + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Subtotal": { + "title": "Order_Subtotal", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Order_Subtotal-create": { + "title": "Order_Subtotal (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Order_Subtotal-update": { + "title": "Order_Subtotal (for update)", + "type": "object", + "properties": { + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Orders_Qry": { + "title": "Orders_Qry", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + } + } + }, + "NorthwindModel.Orders_Qry-create": { + "title": "Orders_Qry (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + } + }, + "required": [ + "CompanyName", + "OrderID" + ] + }, + "NorthwindModel.Orders_Qry-update": { + "title": "Orders_Qry (for update)", + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5, + "nullable": true + }, + "EmployeeID": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "OrderDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "RequiredDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "ShipVia": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShipName": { + "type": "string", + "maxLength": 40, + "nullable": true + }, + "ShipAddress": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "ShipCity": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipRegion": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "ShipPostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "ShipCountry": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Address": { + "type": "string", + "maxLength": 60, + "nullable": true + }, + "City": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "Region": { + "type": "string", + "maxLength": 15, + "nullable": true + }, + "PostalCode": { + "type": "string", + "maxLength": 10, + "nullable": true + }, + "Country": { + "type": "string", + "maxLength": 15, + "nullable": true + } + } + }, + "NorthwindModel.Product_Sales_for_1997": { + "title": "Product_Sales_for_1997", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Product_Sales_for_1997-create": { + "title": "Product_Sales_for_1997 (for create)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CategoryName", + "ProductName" + ] + }, + "NorthwindModel.Product_Sales_for_1997-update": { + "title": "Product_Sales_for_1997 (for update)", + "type": "object", + "properties": { + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Products_Above_Average_Price": { + "title": "Products_Above_Average_Price", + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Products_Above_Average_Price-create": { + "title": "Products_Above_Average_Price (for create)", + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "ProductName" + ] + }, + "NorthwindModel.Products_Above_Average_Price-update": { + "title": "Products_Above_Average_Price (for update)", + "type": "object", + "properties": { + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Products_by_Category": { + "title": "Products_by_Category", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + } + } + }, + "NorthwindModel.Products_by_Category-create": { + "title": "Products_by_Category (for create)", + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + }, + "Discontinued": { + "type": "boolean" + } + }, + "required": [ + "CategoryName", + "Discontinued", + "ProductName" + ] + }, + "NorthwindModel.Products_by_Category-update": { + "title": "Products_by_Category (for update)", + "type": "object", + "properties": { + "QuantityPerUnit": { + "type": "string", + "maxLength": 20, + "nullable": true + }, + "UnitsInStock": { + "type": "integer", + "format": "int16", + "nullable": true + } + } + }, + "NorthwindModel.Sales_by_Category": { + "title": "Sales_by_Category", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Sales_by_Category-create": { + "title": "Sales_by_Category (for create)", + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "CategoryID", + "CategoryName", + "ProductName" + ] + }, + "NorthwindModel.Sales_by_Category-update": { + "title": "Sales_by_Category (for update)", + "type": "object", + "properties": { + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Sales_Totals_by_Amount": { + "title": "Sales_Totals_by_Amount", + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "NorthwindModel.Sales_Totals_by_Amount-create": { + "title": "Sales_Totals_by_Amount (for create)", + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + }, + "required": [ + "CompanyName", + "OrderID" + ] + }, + "NorthwindModel.Sales_Totals_by_Amount-update": { + "title": "Sales_Totals_by_Amount (for update)", + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + }, + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Quarter": { + "title": "Summary_of_Sales_by_Quarter", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-create": { + "title": "Summary_of_Sales_by_Quarter (for create)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-update": { + "title": "Summary_of_Sales_by_Quarter (for update)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Year": { + "title": "Summary_of_Sales_by_Year", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "NorthwindModel.Summary_of_Sales_by_Year-create": { + "title": "Summary_of_Sales_by_Year (for create)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + }, + "required": [ + "OrderID" + ] + }, + "NorthwindModel.Summary_of_Sales_by_Year-update": { + "title": "Summary_of_Sales_by_Year (for update)", + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.0001, + "nullable": true + } + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/Northwind.xml b/odata-openapi/examples/Northwind.xml new file mode 100644 index 00000000..cf6349ac --- /dev/null +++ b/odata-openapi/examples/Northwind.xml @@ -0,0 +1,449 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/People.openapi3.json b/odata-openapi/examples/People.openapi3.json new file mode 100644 index 00000000..4888fea8 --- /dev/null +++ b/odata-openapi/examples/People.openapi3.json @@ -0,0 +1,1852 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace PeopleService", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Supplier{bg:lightslategray}],[Supplier]++-0..1[Address],[Supplier]-*>[ProductService.Product{bg:whitesmoke}],[Address],[Person{bg:lightslategray}],[Person]^[Customer{bg:lightslategray}],[Person]^[Employee{bg:lightslategray}],[PersonDetail{bg:lightslategray}],[PersonDetail]++-0..1[Address],[PersonDetail]0..1-0..1[Person],[PersonDetails%20{bg:lawngreen}]++-*>[PersonDetail],[People%20{bg:lawngreen}]++-*>[Person],[Suppliers%20{bg:lawngreen}]++-*>[Supplier])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Suppliers" + }, + { + "name": "People" + }, + { + "name": "PersonDetails" + } + ], + "paths": { + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address/Street", + "Address/Street desc", + "Address/City", + "Address/City desc", + "Address/State", + "Address/State desc", + "Address/ZipCode", + "Address/ZipCode desc", + "Address/Country", + "Address/Country desc", + "Location", + "Location desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Supplier", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PeopleService.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers/{ID}": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers/{ID}/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "./Products.openapi3.json#/components/schemas/ProductService.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People": { + "get": { + "summary": "Get entities from People", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Person", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PeopleService.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to People", + "tags": [ + "People" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People/{ID}": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from People by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in People", + "tags": [ + "People" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from People", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People/{ID}/PersonDetail": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related PersonDetail", + "tags": [ + "People", + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails": { + "get": { + "summary": "Get entities from PersonDetails", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "PersonID desc", + "Age", + "Age desc", + "Gender", + "Gender desc", + "Phone", + "Phone desc", + "Address/Street", + "Address/Street desc", + "Address/City", + "Address/City desc", + "Address/State", + "Address/State desc", + "Address/ZipCode", + "Address/ZipCode desc", + "Address/Country", + "Address/Country desc", + "Photo", + "Photo desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of PersonDetail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PeopleService.PersonDetail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to PersonDetails", + "tags": [ + "PersonDetails" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.PersonDetail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails/{PersonID}": { + "parameters": [ + { + "description": "key: PersonID", + "in": "path", + "name": "PersonID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from PersonDetails by key", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in PersonDetails", + "tags": [ + "PersonDetails" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.PersonDetail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from PersonDetails", + "tags": [ + "PersonDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails/{PersonID}/Person": { + "parameters": [ + { + "description": "key: PersonID", + "in": "path", + "name": "PersonID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Person", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PeopleService.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Suppliers HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "PeopleService.Supplier": { + "title": "Supplier", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Address" + } + ], + "nullable": true + }, + "Location": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "./Products.openapi3.json#/components/schemas/ProductService.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "PeopleService.Supplier-create": { + "title": "Supplier (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Address-create" + } + ], + "nullable": true + }, + "Location": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "./Products.openapi3.json#/components/schemas/ProductService.Product" + } + } + }, + "required": [ + "ID" + ] + }, + "PeopleService.Supplier-update": { + "title": "Supplier (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Address-update" + } + ], + "nullable": true + }, + "Location": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + } + }, + "PeopleService.Address": { + "title": "Address", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + } + }, + "PeopleService.Address-create": { + "title": "Address (for create)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + } + }, + "PeopleService.Address-update": { + "title": "Address (for update)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + } + }, + "PeopleService.Person": { + "title": "Person", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.PersonDetail" + } + ], + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Customer" + }, + { + "$ref": "#/components/schemas/PeopleService.Employee" + }, + {} + ] + }, + "PeopleService.Person-create": { + "title": "Person (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.PersonDetail-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Customer-create" + }, + { + "$ref": "#/components/schemas/PeopleService.Employee-create" + }, + {} + ] + }, + "PeopleService.Person-update": { + "title": "Person (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Customer-update" + }, + { + "$ref": "#/components/schemas/PeopleService.Employee-update" + }, + {} + ] + }, + "PeopleService.Customer": { + "title": "Customer", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.PersonDetail" + } + ], + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "PeopleService.Customer-create": { + "title": "Customer (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.PersonDetail-create" + } + ], + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + }, + "required": [ + "ID" + ] + }, + "PeopleService.Customer-update": { + "title": "Customer (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "PeopleService.Employee": { + "title": "Employee", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.PersonDetail" + } + ], + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + } + }, + "PeopleService.Employee-create": { + "title": "Employee (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.PersonDetail-create" + } + ], + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + "required": [ + "ID" + ] + }, + "PeopleService.Employee-update": { + "title": "Employee (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + } + }, + "PeopleService.PersonDetail": { + "title": "PersonDetail", + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Address" + } + ], + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Person" + } + ], + "nullable": true + } + } + }, + "PeopleService.PersonDetail-create": { + "title": "PersonDetail (for create)", + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Address-create" + } + ], + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Person-create" + } + ], + "nullable": true + } + }, + "required": [ + "PersonID" + ] + }, + "PeopleService.PersonDetail-update": { + "title": "PersonDetail (for update)", + "type": "object", + "properties": { + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/PeopleService.Address-update" + } + ], + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url" + } + } + }, + "geoPoint": { + "type": "object", + "properties": { + "coordinates": { + "$ref": "#/components/schemas/geoPosition" + }, + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/People.xml b/odata-openapi/examples/People.xml new file mode 100644 index 00000000..481ed2d8 --- /dev/null +++ b/odata-openapi/examples/People.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/odata-openapi/examples/Products.openapi3.json b/odata-openapi/examples/Products.openapi3.json new file mode 100644 index 00000000..391e04b6 --- /dev/null +++ b/odata-openapi/examples/Products.openapi3.json @@ -0,0 +1,2518 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace ProductService", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:lightslategray}],[Product]*-*[Category],[Product]-0..1>[PeopleService.Supplier{bg:whitesmoke}],[Product]^[FeaturedProduct{bg:lightslategray}],[FeaturedProduct]0..1-0..1[Advertisement],[ProductDetail{bg:lightslategray}],[ProductDetail]0..1-0..1[Product],[Category{bg:lightslategray}],[Advertisement{bg:lightslategray}],[Advertisements%20{bg:lawngreen}]++-*>[Advertisement],[Categories%20{bg:lawngreen}]++-*>[Category],[ProductDetails%20{bg:lawngreen}]++-*>[ProductDetail],[Products%20{bg:lawngreen}]++-*>[Product])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "ProductDetails" + }, + { + "name": "Categories" + }, + { + "name": "Advertisements" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ID}": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ID}/ProductService.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "Products" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/Products/{ID}/Categories": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Categories", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Categories", + "tags": [ + "Products", + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ID}/Supplier": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "./People.openapi3.json#/components/schemas/PeopleService.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ID}/ProductDetail": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related ProductDetail", + "tags": [ + "Products", + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails": { + "get": { + "summary": "Get entities from ProductDetails", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "Details", + "Details desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of ProductDetail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.ProductDetail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to ProductDetails", + "tags": [ + "ProductDetails" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.ProductDetail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails/{ProductID}": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from ProductDetails by key", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in ProductDetails", + "tags": [ + "ProductDetails" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.ProductDetail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from ProductDetails", + "tags": [ + "ProductDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails/{ProductID}/Product": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "ProductDetails", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails/{ProductID}/Product/ProductService.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "ProductDetails" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories/{ID}": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories/{ID}/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements": { + "get": { + "summary": "Get entities from Advertisements", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "AirDate", + "AirDate desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Advertisement", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Advertisement" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Advertisements", + "tags": [ + "Advertisements" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Advertisement-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Advertisement" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements/{ID}": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Get entity from Advertisements by key", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Advertisement" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Advertisements", + "tags": [ + "Advertisements" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.Advertisement-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Advertisements", + "tags": [ + "Advertisements" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements/{ID}/FeaturedProduct": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Get related FeaturedProduct", + "tags": [ + "Advertisements", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail", + "Advertisement" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductService.FeaturedProduct" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "ProductService.Product": { + "title": "Product", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Category" + } + }, + "Categories@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "./People.openapi3.json#/components/schemas/PeopleService.Supplier" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.ProductDetail" + } + ], + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.FeaturedProduct" + }, + {} + ] + }, + "ProductService.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Category-create" + } + }, + "Supplier": { + "anyOf": [ + { + "$ref": "./People.openapi3.json#/components/schemas/PeopleService.Supplier" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.ProductDetail-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.FeaturedProduct-create" + }, + {} + ] + }, + "ProductService.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.FeaturedProduct-update" + }, + {} + ] + }, + "ProductService.FeaturedProduct": { + "title": "FeaturedProduct", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Category" + } + }, + "Categories@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "./People.openapi3.json#/components/schemas/PeopleService.Supplier" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.ProductDetail" + } + ], + "nullable": true + }, + "Advertisement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.Advertisement" + } + ], + "nullable": true + } + } + }, + "ProductService.FeaturedProduct-create": { + "title": "FeaturedProduct (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Category-create" + } + }, + "Supplier": { + "anyOf": [ + { + "$ref": "./People.openapi3.json#/components/schemas/PeopleService.Supplier" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.ProductDetail-create" + } + ], + "nullable": true + }, + "Advertisement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.Advertisement-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "ProductService.FeaturedProduct-update": { + "title": "FeaturedProduct (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + }, + "ProductService.ProductDetail": { + "title": "ProductDetail", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": "string", + "nullable": true + }, + "Product": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.Product" + } + ], + "nullable": true + } + } + }, + "ProductService.ProductDetail-create": { + "title": "ProductDetail (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": "string", + "nullable": true + }, + "Product": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.Product-create" + } + ], + "nullable": true + } + }, + "required": [ + "ProductID" + ] + }, + "ProductService.ProductDetail-update": { + "title": "ProductDetail (for update)", + "type": "object", + "properties": { + "Details": { + "type": "string", + "nullable": true + } + } + }, + "ProductService.Category": { + "title": "Category", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "ProductService.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductService.Product-create" + } + } + }, + "required": [ + "ID" + ] + }, + "ProductService.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + } + }, + "ProductService.Advertisement": { + "title": "Advertisement", + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.FeaturedProduct" + } + ], + "nullable": true + } + } + }, + "ProductService.Advertisement-create": { + "title": "Advertisement (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProductService.FeaturedProduct-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "ProductService.Advertisement-update": { + "title": "Advertisement (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/Products.xml b/odata-openapi/examples/Products.xml new file mode 100644 index 00000000..18a146e6 --- /dev/null +++ b/odata-openapi/examples/Products.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/odata-openapi/examples/README.md b/odata-openapi/examples/README.md new file mode 100644 index 00000000..0858bc3d --- /dev/null +++ b/odata-openapi/examples/README.md @@ -0,0 +1,14 @@ +# Examples + +Description | CSDL XML |OpenAPI 3.0.x +------------|----------|------------- +The [Products and Categories Example](http://docs.oasis-open.org/odata/odata-csdl-xml/v4.01/cs01/odata-csdl-xml-v4.01-cs01.html#sec_ProductsandCategoriesExample) from the [OData CSDL XML specification](http://docs.oasis-open.org/odata/odata-csdl-xml/v4.01/odata-csdl-xml-v4.01.html) | [csdl-16.1.xml](csdl-16.1.xml) | [csdl-16.1.openapi3.json](csdl-16.1.openapi3.json) +The [TripPin reference service](http://services.odata.org/TripPinRESTierService/(S(g1oafwlrmrrsxbqyul33p15y))/) from www.odata.org | [TripPin.xml](TripPin.xml) | [TripPin.openapi3.json](TripPin.openapi3.json) +The [Northwind OData V4 reference service](http://services.odata.org/V4/Northwind/Northwind.svc/) | [Northwind.xml](Northwind.xml) | [Northwind.openapi3.json](Northwind.openapi3.json) +A hypothetical Northwind OData V4 service using [key-as-segment convention](http://docs.oasis-open.org/odata/odata/v4.01/cs01/part2-url-conventions/odata-v4.01-cs01-part2-url-conventions.html#sec_KeyasSegmentConvention) | [Northwind-key-as-segment.xml](Northwind-key-as-segment.xml) | [Northwind-key-as-segment.openapi3.json](Northwind-key-as-segment.openapi3.json) +The [Northwind OData V3 reference service](http://services.odata.org/V3/Northwind/Northwind.svc/) | [Northwind-V3.xml](Northwind-V3.xml) | [Northwind-V3.openapi3.json](Northwind-V3.openapi3.json) +A collection of examples from the [OData CSDL XML specification](http://docs.oasis-open.org/odata/odata-csdl-xml/v4.01/odata-csdl-xml-v4.01.html) | [miscellaneous.xml](miscellaneous.xml) | [miscellaneous.openapi3.json](miscellaneous.openapi3.json) +People service referencing a Products service | [People.xml](People.xml)| [People.openapi3.json](People.openapi3.json) +Products service referencing a People service | [Products.xml](Products.xml) | [Products.openapi3.json](Products.openapi3.json) + + \ No newline at end of file diff --git a/odata-openapi/examples/TripPin.openapi3.json b/odata-openapi/examples/TripPin.openapi3.json new file mode 100644 index 00000000..879b1e4c --- /dev/null +++ b/odata-openapi/examples/TripPin.openapi3.json @@ -0,0 +1,4513 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "TripPin service is a sample service for OData V4.", + "description": "This service is located at [https://services.odata.org/V4/(S(cnbm44wtbc1v5bgrlek5lpcc))/TripPinServiceRW/](https://services.odata.org/V4/%28S%28cnbm44wtbc1v5bgrlek5lpcc%29%29/TripPinServiceRW/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[City],[Location],[Location]++-[City],[Location]^[EventLocation],[Location]^[AirportLocation],[Photo{bg:lightslategray}],[Person{bg:lightslategray}],[Person]++-*[Location],[Person]++-0..1[PersonGender],[Person]-*>[Person],[Person]++-*>[Trip],[Person]-0..1>[Photo],[Airline{bg:lightslategray}],[Airport{bg:lightslategray}],[Airport]++-[AirportLocation],[PlanItem{bg:lightslategray}],[PlanItem]^[PublicTransportation{bg:lightslategray}],[PublicTransportation]^[Flight{bg:lightslategray}],[Flight]->[Airport],[Flight]->[Airport],[Flight]->[Airline],[PlanItem]^[Event{bg:lightslategray}],[Event]++-[EventLocation],[Trip{bg:lightslategray}],[Trip]-*>[Photo],[Trip]++-*>[PlanItem],[ResetDataSource{bg:lawngreen}],[GetNearestAirport{bg:lawngreen}]->[Airport],[Me%20{bg:lawngreen}]++->[Person],[Airports%20{bg:lawngreen}]++-*>[Airport],[Airlines%20{bg:lawngreen}]++-*>[Airline],[People%20{bg:lawngreen}]++-*>[Person],[Photos%20{bg:lawngreen}]++-*>[Photo])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://services.odata.org/V4/(S(cnbm44wtbc1v5bgrlek5lpcc))/TripPinServiceRW" + } + ], + "tags": [ + { + "name": "Photos" + }, + { + "name": "People" + }, + { + "name": "Airlines" + }, + { + "name": "Airports" + }, + { + "name": "Me" + } + ], + "paths": { + "/Photos": { + "get": { + "summary": "Get entities from Photos", + "tags": [ + "Photos" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Id desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Photo", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Photos", + "tags": [ + "Photos" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Photos({Id})": { + "parameters": [ + { + "description": "key: Id", + "in": "path", + "name": "Id", + "required": true, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + } + } + ], + "get": { + "summary": "Get entity from Photos by key", + "tags": [ + "Photos" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Photos", + "tags": [ + "Photos" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Photos", + "tags": [ + "Photos" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People": { + "get": { + "summary": "Get entities from People", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "UserName desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Emails", + "Emails desc", + "AddressInfo/Address", + "AddressInfo/Address desc", + "AddressInfo/City/CountryRegion", + "AddressInfo/City/CountryRegion desc", + "AddressInfo/City/Name", + "AddressInfo/City/Name desc", + "AddressInfo/City/Region", + "AddressInfo/City/Region desc", + "Gender", + "Gender desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Person", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to People", + "tags": [ + "People" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')": { + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from People by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in People", + "tags": [ + "People" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from People", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Microsoft.OData.SampleService.Models.TripPin.GetFavoriteAirline()": { + "get": { + "summary": "Invoke function GetFavoriteAirline", + "tags": [ + "People" + ], + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Microsoft.OData.SampleService.Models.TripPin.GetFriendsTrips(userName='{userName}')": { + "get": { + "summary": "Invoke function GetFriendsTrips", + "tags": [ + "People" + ], + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "required": true, + "in": "path", + "name": "userName", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Trip", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Microsoft.OData.SampleService.Models.TripPin.ShareTrip": { + "post": { + "summary": "Invoke action ShareTrip", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "tripId": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/People('{UserName}')/Friends": { + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Friends", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "UserName desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Emails", + "Emails desc", + "AddressInfo/Address", + "AddressInfo/Address desc", + "AddressInfo/City/CountryRegion", + "AddressInfo/City/CountryRegion desc", + "AddressInfo/City/Name", + "AddressInfo/City/Name desc", + "AddressInfo/City/Region", + "AddressInfo/City/Region desc", + "Gender", + "Gender desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Person", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Friends", + "tags": [ + "People" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips": { + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Trips", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "TripId desc", + "ShareId", + "ShareId desc", + "Description", + "Description desc", + "Name", + "Name desc", + "Budget", + "Budget desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Tags", + "Tags desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Trip", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Trips", + "tags": [ + "People" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId_1})": { + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Trips by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Trips", + "tags": [ + "People" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Trips", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId_1})/Microsoft.OData.SampleService.Models.TripPin.GetInvolvedPeople()": { + "get": { + "summary": "Invoke function GetInvolvedPeople", + "tags": [ + "People" + ], + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Person", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId_1})/Photos": { + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Photos", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Id desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Photo", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId_1})/PlanItems": { + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related PlanItems", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "PlanItemId desc", + "ConfirmationCode", + "ConfirmationCode desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Duration", + "Duration desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of PlanItem", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related PlanItems", + "tags": [ + "People" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId_1})/PlanItems({PlanItemId_2})": { + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: PlanItemId", + "in": "path", + "name": "PlanItemId_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related PlanItems by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related PlanItems", + "tags": [ + "People" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related PlanItems", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Photo": { + "parameters": [ + { + "description": "key: UserName", + "in": "path", + "name": "UserName", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Photo", + "tags": [ + "People", + "Photos" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Airlines": { + "get": { + "summary": "Get entities from Airlines", + "tags": [ + "Airlines" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "AirlineCode", + "AirlineCode desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "AirlineCode", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Airline", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Airlines", + "tags": [ + "Airlines" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Airlines('{AirlineCode}')": { + "parameters": [ + { + "description": "key: AirlineCode", + "in": "path", + "name": "AirlineCode", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Airlines by key", + "tags": [ + "Airlines" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "AirlineCode", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Airlines", + "tags": [ + "Airlines" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Airlines", + "tags": [ + "Airlines" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Airports": { + "get": { + "summary": "Get entities from Airports", + "tags": [ + "Airports" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "IcaoCode", + "IcaoCode desc", + "Name", + "Name desc", + "IataCode", + "IataCode desc", + "Location/Address", + "Location/Address desc", + "Location/City/CountryRegion", + "Location/City/CountryRegion desc", + "Location/City/Name", + "Location/City/Name desc", + "Location/City/Region", + "Location/City/Region desc", + "Location/Loc", + "Location/Loc desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "IcaoCode", + "Name", + "IataCode", + "Location" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Airport", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Airports('{IcaoCode}')": { + "parameters": [ + { + "description": "key: IcaoCode", + "in": "path", + "name": "IcaoCode", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Airports by key", + "tags": [ + "Airports" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "IcaoCode", + "Name", + "IataCode", + "Location" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Airports", + "tags": [ + "Airports" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me": { + "get": { + "summary": "Get Me", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update Me", + "tags": [ + "Me" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Microsoft.OData.SampleService.Models.TripPin.GetFavoriteAirline()": { + "get": { + "summary": "Invoke function GetFavoriteAirline", + "tags": [ + "Me" + ], + "parameters": [], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Microsoft.OData.SampleService.Models.TripPin.GetFriendsTrips(userName='{userName}')": { + "get": { + "summary": "Invoke function GetFriendsTrips", + "tags": [ + "Me" + ], + "parameters": [ + { + "required": true, + "in": "path", + "name": "userName", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Trip", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Microsoft.OData.SampleService.Models.TripPin.ShareTrip": { + "post": { + "summary": "Invoke action ShareTrip", + "tags": [ + "Me" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "tripId": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/Me/Friends": { + "get": { + "summary": "Get entities from related Friends", + "tags": [ + "Me", + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "UserName desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Emails", + "Emails desc", + "AddressInfo/Address", + "AddressInfo/Address desc", + "AddressInfo/City/CountryRegion", + "AddressInfo/City/CountryRegion desc", + "AddressInfo/City/Name", + "AddressInfo/City/Name desc", + "AddressInfo/City/Region", + "AddressInfo/City/Region desc", + "Gender", + "Gender desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Person", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Friends", + "tags": [ + "Me", + "People" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips": { + "get": { + "summary": "Get entities from related Trips", + "tags": [ + "Me" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "TripId desc", + "ShareId", + "ShareId desc", + "Description", + "Description desc", + "Name", + "Name desc", + "Budget", + "Budget desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Tags", + "Tags desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Trip", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Trips", + "tags": [ + "Me" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId_1})": { + "parameters": [ + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Trips by key", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Trips", + "tags": [ + "Me" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Trips", + "tags": [ + "Me" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId_1})/Microsoft.OData.SampleService.Models.TripPin.GetInvolvedPeople()": { + "get": { + "summary": "Invoke function GetInvolvedPeople", + "tags": [ + "Me" + ], + "parameters": [ + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Person", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId_1})/Photos": { + "parameters": [ + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Photos", + "tags": [ + "Me" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Id desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Photo", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId_1})/PlanItems": { + "parameters": [ + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related PlanItems", + "tags": [ + "Me" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "PlanItemId desc", + "ConfirmationCode", + "ConfirmationCode desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Duration", + "Duration desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of PlanItem", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related PlanItems", + "tags": [ + "Me" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId_1})/PlanItems({PlanItemId_2})": { + "parameters": [ + { + "description": "key: TripId", + "in": "path", + "name": "TripId_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: PlanItemId", + "in": "path", + "name": "PlanItemId_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related PlanItems by key", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related PlanItems", + "tags": [ + "Me" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related PlanItems", + "tags": [ + "Me" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Photo": { + "get": { + "summary": "Get related Photo", + "tags": [ + "Me", + "Photos" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/GetNearestAirport(lat={lat},lon={lon})": { + "get": { + "summary": "Invoke function GetNearestAirport", + "tags": [ + "Airports" + ], + "parameters": [ + { + "required": true, + "in": "path", + "name": "lat", + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + }, + { + "required": true, + "in": "path", + "name": "lon", + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ResetDataSource": { + "post": { + "summary": "Invoke action ResetDataSource", + "tags": [ + "Service Operations" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Photos HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "Microsoft.OData.SampleService.Models.TripPin.PersonGender": { + "type": "string", + "title": "PersonGender", + "enum": [ + "Male", + "Female", + "Unknown" + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.City": { + "title": "City", + "type": "object", + "properties": { + "CountryRegion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Region": { + "type": "string" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.City-create": { + "title": "City (for create)", + "type": "object", + "properties": { + "CountryRegion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Region": { + "type": "string" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.City-update": { + "title": "City (for update)", + "type": "object", + "properties": { + "CountryRegion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Region": { + "type": "string" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Location": { + "title": "Location", + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation" + }, + {} + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.Location-create": { + "title": "Location (for create)", + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-create" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation-create" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-create" + }, + {} + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.Location-update": { + "title": "Location (for update)", + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-update" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation-update" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-update" + }, + {} + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.EventLocation": { + "title": "EventLocation", + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City" + }, + "BuildingInfo": { + "type": "string", + "nullable": true + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.EventLocation-create": { + "title": "EventLocation (for create)", + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-create" + }, + "BuildingInfo": { + "type": "string", + "nullable": true + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.EventLocation-update": { + "title": "EventLocation (for update)", + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-update" + }, + "BuildingInfo": { + "type": "string", + "nullable": true + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.AirportLocation": { + "title": "AirportLocation", + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City" + }, + "Loc": { + "$ref": "#/components/schemas/geoPoint" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.AirportLocation-create": { + "title": "AirportLocation (for create)", + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-create" + }, + "Loc": { + "$ref": "#/components/schemas/geoPoint" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.AirportLocation-update": { + "title": "AirportLocation (for update)", + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-update" + }, + "Loc": { + "$ref": "#/components/schemas/geoPoint" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Photo": { + "title": "Photo", + "type": "object", + "properties": { + "Id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Photo-create": { + "title": "Photo (for create)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Photo-update": { + "title": "Photo (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Person": { + "title": "Person", + "type": "object", + "properties": { + "UserName": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "AddressInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Location" + } + }, + "Gender": { + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PersonGender" + } + ], + "nullable": true + }, + "Concurrency": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "Friends": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + }, + "Friends@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Trips": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + }, + "Trips@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Photo": { + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + ], + "nullable": true + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Person-create": { + "title": "Person (for create)", + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "AddressInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Location-create" + } + }, + "Gender": { + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PersonGender" + } + ], + "nullable": true + }, + "Friends": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + }, + "Trips": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-create" + } + }, + "Photo": { + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo-create" + } + ], + "nullable": true + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Person-update": { + "title": "Person (for update)", + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "AddressInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Location-update" + } + }, + "Gender": { + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PersonGender" + } + ], + "nullable": true + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Airline": { + "title": "Airline", + "type": "object", + "properties": { + "AirlineCode": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Airline-create": { + "title": "Airline (for create)", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Airline-update": { + "title": "Airline (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Airport": { + "title": "Airport", + "type": "object", + "properties": { + "IcaoCode": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "IataCode": { + "type": "string" + }, + "Location": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Airport-create": { + "title": "Airport (for create)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "IataCode": { + "type": "string" + }, + "Location": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-create" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Airport-update": { + "title": "Airport (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Location": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-update" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.PlanItem": { + "title": "PlanItem", + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PublicTransportation" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Event" + }, + {} + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.PlanItem-create": { + "title": "PlanItem (for create)", + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-create" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Event-create" + }, + {} + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.PlanItem-update": { + "title": "PlanItem (for update)", + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-update" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Event-update" + }, + {} + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.PublicTransportation": { + "title": "PublicTransportation", + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + }, + "SeatNumber": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Flight" + }, + {} + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-create": { + "title": "PublicTransportation (for create)", + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + }, + "SeatNumber": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Flight-create" + }, + {} + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-update": { + "title": "PublicTransportation (for update)", + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + }, + "SeatNumber": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Flight-update" + }, + {} + ] + }, + "Microsoft.OData.SampleService.Models.TripPin.Flight": { + "title": "Flight", + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + }, + "SeatNumber": { + "type": "string", + "nullable": true + }, + "FlightNumber": { + "type": "string" + }, + "From": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + }, + "To": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + }, + "Airline": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Flight-create": { + "title": "Flight (for create)", + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + }, + "SeatNumber": { + "type": "string", + "nullable": true + }, + "FlightNumber": { + "type": "string" + }, + "From": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport-create" + }, + "To": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport-create" + }, + "Airline": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline-create" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Flight-update": { + "title": "Flight (for update)", + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + }, + "SeatNumber": { + "type": "string", + "nullable": true + }, + "FlightNumber": { + "type": "string" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Event": { + "title": "Event", + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "OccursAt": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Event-create": { + "title": "Event (for create)", + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "OccursAt": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation-create" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Event-update": { + "title": "Event (for update)", + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Duration": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "OccursAt": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation-update" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Trip": { + "title": "Trip", + "type": "object", + "properties": { + "TripId": { + "type": "integer", + "format": "int32" + }, + "ShareId": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "Name": { + "type": "string" + }, + "Budget": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Photos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + }, + "Photos@odata.count": { + "$ref": "#/components/schemas/count" + }, + "PlanItems": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + }, + "PlanItems@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Trip-create": { + "title": "Trip (for create)", + "type": "object", + "properties": { + "ShareId": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "Name": { + "type": "string" + }, + "Budget": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Photos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo-create" + } + }, + "PlanItems": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-create" + } + } + } + }, + "Microsoft.OData.SampleService.Models.TripPin.Trip-update": { + "title": "Trip (for update)", + "type": "object", + "properties": { + "ShareId": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "Name": { + "type": "string" + }, + "Budget": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "geoPoint": { + "type": "object", + "properties": { + "coordinates": { + "$ref": "#/components/schemas/geoPosition" + }, + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/TripPin.xml b/odata-openapi/examples/TripPin.xml new file mode 100644 index 00000000..cb72f466 --- /dev/null +++ b/odata-openapi/examples/TripPin.xml @@ -0,0 +1,342 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + image/jpeg + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + + + + + + + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Org.OData.Capabilities.V1.SearchExpressions/none + + + + + + + + + + + + + + + + + + + + + + Concurrency + + + + + + + + Org.OData.Capabilities.V1.SearchExpressions/none + + + + + + + + + Trips + Friends + + + + + + + + + + + + Org.OData.Capabilities.V1.SearchExpressions/none + + + + + + + + + + + + + + + + + + + Org.OData.Capabilities.V1.SearchExpressions/none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Org.OData.Capabilities.V1.ConformanceLevelType/Advanced + + + + application/json;odata.metadata=full;IEEE754Compatible=false;odata.streaming=true + application/json;odata.metadata=minimal;IEEE754Compatible=false;odata.streaming=true + application/json;odata.metadata=none;IEEE754Compatible=false;odata.streaming=true + + + + + + + contains + endswith + startswith + length + indexof + substring + tolower + toupper + trim + concat + year + month + day + hour + minute + second + round + floor + ceiling + cast + isof + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/aggregation.openapi3.json b/odata-openapi/examples/aggregation.openapi3.json new file mode 100644 index 00000000..38db2032 --- /dev/null +++ b/odata-openapi/examples/aggregation.openapi3.json @@ -0,0 +1,1452 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace org.example.odata.salesservice", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Category{bg:lightslategray}],[Category]-*>[Product],[Currency{bg:lightslategray}],[Customer{bg:lightslategray}],[Customer]-*>[Sales],[Product{bg:lightslategray}],[Product]-0..1>[Category],[Product]-*>[Sales],[Sales{bg:lightslategray}],[Sales]->[Customer],[Sales]->[Time],[Sales]->[Product],[Sales]->[SalesOrganization],[Sales]->[Currency],[SalesOrganization{bg:lightslategray}],[SalesOrganization]-0..1>[SalesOrganization],[Time{bg:lightslategray}],[Currencies%20{bg:lawngreen}]++-*>[Currency],[Sales%20{bg:lawngreen}]++-*>[Sales])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Sales" + }, + { + "name": "Currencies" + } + ], + "paths": { + "/Sales": { + "get": { + "summary": "Get entities from Sales", + "tags": [ + "Sales" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Amount", + "Amount desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Time", + "Product", + "SalesOrganization", + "Currency" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Sales", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Sales" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales", + "tags": [ + "Sales" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Sales-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Sales" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Sales by key", + "tags": [ + "Sales" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Amount" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Time", + "Product", + "SalesOrganization", + "Currency" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Sales" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales", + "tags": [ + "Sales" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Sales-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales", + "tags": [ + "Sales" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales('{ID}')/Customer": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Customer", + "tags": [ + "Sales" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Country" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales('{ID}')/Time": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Time", + "tags": [ + "Sales" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Date", + "Month", + "Quarter", + "Year" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Time" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales('{ID}')/Product": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "Sales" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Color", + "TaxRate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Sales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales('{ID}')/SalesOrganization": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related SalesOrganization", + "tags": [ + "Sales" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Superordinate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.SalesOrganization" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales('{ID}')/Currency": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Currency", + "tags": [ + "Sales" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Currency" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Currencies": { + "get": { + "summary": "Get entities from Currencies", + "tags": [ + "Currencies" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Code desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Currency", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Currency" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Currencies", + "tags": [ + "Currencies" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Currency-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Currency" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Currencies('{Code}')": { + "parameters": [ + { + "description": "key: Code", + "in": "path", + "name": "Code", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Currencies by key", + "tags": [ + "Currencies" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Currency" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Currencies", + "tags": [ + "Currencies" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Currency-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Currencies", + "tags": [ + "Currencies" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Sales HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "org.example.odata.salesservice.Category": { + "title": "Category", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Name": { + "type": "string" + } + } + }, + "org.example.odata.salesservice.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Product-create" + } + }, + "Name": { + "type": "string" + } + }, + "required": [ + "ID" + ] + }, + "org.example.odata.salesservice.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "org.example.odata.salesservice.Currency": { + "title": "Currency", + "type": "object", + "properties": { + "Code": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "org.example.odata.salesservice.Currency-create": { + "title": "Currency (for create)", + "type": "object", + "properties": { + "Code": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + } + }, + "required": [ + "Code" + ] + }, + "org.example.odata.salesservice.Currency-update": { + "title": "Currency (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + } + }, + "org.example.odata.salesservice.Customer": { + "title": "Customer", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Sales" + } + }, + "Sales@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Name": { + "type": "string" + }, + "Country": { + "type": "string" + } + } + }, + "org.example.odata.salesservice.Customer-create": { + "title": "Customer (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Sales-create" + } + }, + "Name": { + "type": "string" + }, + "Country": { + "type": "string" + } + }, + "required": [ + "ID" + ] + }, + "org.example.odata.salesservice.Customer-update": { + "title": "Customer (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Country": { + "type": "string" + } + } + }, + "org.example.odata.salesservice.Product": { + "title": "Product", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Category": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.odata.salesservice.Category" + } + ], + "nullable": true + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Sales" + } + }, + "Sales@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Name": { + "type": "string" + }, + "Color": { + "type": "string" + }, + "TaxRate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0 + } + } + }, + "org.example.odata.salesservice.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Category": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.odata.salesservice.Category-create" + } + ], + "nullable": true + }, + "Sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Sales-create" + } + }, + "Name": { + "type": "string" + }, + "Color": { + "type": "string" + }, + "TaxRate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0 + } + }, + "required": [ + "ID" + ] + }, + "org.example.odata.salesservice.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Color": { + "type": "string" + }, + "TaxRate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0 + } + } + }, + "org.example.odata.salesservice.Sales": { + "title": "Sales", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Customer": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Customer" + }, + "Time": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Time" + }, + "Product": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Product" + }, + "SalesOrganization": { + "$ref": "#/components/schemas/org.example.odata.salesservice.SalesOrganization" + }, + "Currency": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Currency" + }, + "Amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "nullable": true + } + } + }, + "org.example.odata.salesservice.Sales-create": { + "title": "Sales (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Customer": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Customer-create" + }, + "Time": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Time-create" + }, + "Product": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Product-create" + }, + "SalesOrganization": { + "$ref": "#/components/schemas/org.example.odata.salesservice.SalesOrganization-create" + }, + "Currency": { + "$ref": "#/components/schemas/org.example.odata.salesservice.Currency-create" + }, + "Amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "org.example.odata.salesservice.Sales-update": { + "title": "Sales (for update)", + "type": "object", + "properties": { + "Amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "nullable": true + } + } + }, + "org.example.odata.salesservice.SalesOrganization": { + "title": "SalesOrganization", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Superordinate": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.odata.salesservice.SalesOrganization" + } + ], + "nullable": true + }, + "Name": { + "type": "string" + } + } + }, + "org.example.odata.salesservice.SalesOrganization-create": { + "title": "SalesOrganization (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Superordinate": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.odata.salesservice.SalesOrganization-create" + } + ], + "nullable": true + }, + "Name": { + "type": "string" + } + }, + "required": [ + "ID" + ] + }, + "org.example.odata.salesservice.SalesOrganization-update": { + "title": "SalesOrganization (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "org.example.odata.salesservice.Time": { + "title": "Time", + "type": "object", + "properties": { + "Date": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "Month": { + "type": "string", + "nullable": true + }, + "Quarter": { + "type": "string", + "nullable": true + }, + "Year": { + "type": "string", + "nullable": true + } + } + }, + "org.example.odata.salesservice.Time-create": { + "title": "Time (for create)", + "type": "object", + "properties": { + "Date": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "Month": { + "type": "string", + "nullable": true + }, + "Quarter": { + "type": "string", + "nullable": true + }, + "Year": { + "type": "string", + "nullable": true + } + }, + "required": [ + "Date" + ] + }, + "org.example.odata.salesservice.Time-update": { + "title": "Time (for update)", + "type": "object", + "properties": { + "Month": { + "type": "string", + "nullable": true + }, + "Quarter": { + "type": "string", + "nullable": true + }, + "Year": { + "type": "string", + "nullable": true + } + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/aggregation.xml b/odata-openapi/examples/aggregation.xml new file mode 100644 index 00000000..56ec3bec --- /dev/null +++ b/odata-openapi/examples/aggregation.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Currency/Code + + + + + + + Currency/Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Category/Name + Name + + + + + + + + + + + + Year + Quarter + Month + + + + + + + + + + + + + + + + + + + + + + + + + + Currencies/Code + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/annotations.openapi3.json b/odata-openapi/examples/annotations.openapi3.json new file mode 100644 index 00000000..a7a4c251 --- /dev/null +++ b/odata-openapi/examples/annotations.openapi3.json @@ -0,0 +1,3166 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace Supported.Annotations", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[SinglePartKey{bg:lightslategray}],[SinglePartKey]-0..1>[TwoPartKey],[SinglePartKey]-*>[TwoPartKey],[SinglePartKey]-0..1>[TwoPartKey],[SinglePartKey]-*>[TwoPartKey],[SinglePartKey]-0..1>[TwoPartKey],[SinglePartKey]-*>[TwoPartKey],[TwoPartKey{bg:lightslategray}],[TwoNothingSingleton%20{bg:lawngreen}]++->[TwoPartKey],[TwoWriteOnlySingleton%20{bg:lawngreen}]++->[TwoPartKey],[TwoNothingSet%20{bg:lawngreen}]++-*>[TwoPartKey],[TwoWriteOnlySet%20{bg:lawngreen}]++-*>[TwoPartKey],[TwoReadOnlyByKeySet%20{bg:lawngreen}]++-*>[TwoPartKey],[TwoReadOnlySet%20{bg:lawngreen}]++-*>[TwoPartKey],[TwoAllSet%20{bg:lawngreen}]++-*>[TwoPartKey],[ReadOnlySingleton%20{bg:lawngreen}]++->[SinglePartKey],[AllSingleton%20{bg:lawngreen}]++->[SinglePartKey],[ReadListOnlySet%20{bg:lawngreen}]++-*>[SinglePartKey],[OneNavigationSet%20{bg:lawngreen}]++-*>[SinglePartKey],[NoNavigationSet%20{bg:lawngreen}]++-*>[SinglePartKey],[AllSet%20{bg:lawngreen}]++-*>[SinglePartKey])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "AllSet" + }, + { + "name": "NoNavigationSet" + }, + { + "name": "OneNavigationSet" + }, + { + "name": "ReadListOnlySet" + }, + { + "name": "AllSingleton", + "description": "First Singleton" + }, + { + "name": "ReadOnlySingleton" + }, + { + "name": "TwoAllSet" + }, + { + "name": "TwoReadOnlySet" + }, + { + "name": "TwoReadOnlyByKeySet" + }, + { + "name": "TwoWriteOnlySet" + }, + { + "name": "TwoNothingSet" + }, + { + "name": "TwoWriteOnlySingleton" + }, + { + "name": "TwoNothingSingleton" + } + ], + "paths": { + "/AllSet": { + "get": { + "summary": "Get entities from AllSet", + "tags": [ + "AllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)\n\nRequired filter properties:\n- RequiredInFilter", + "in": "query", + "schema": { + "type": "string" + }, + "required": true + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Pattern", + "Pattern desc", + "PatternExt", + "PatternExt desc", + "AllowedValues", + "AllowedValues desc", + "AllowedValuesExt", + "AllowedValuesExt desc", + "Maximum", + "Maximum desc", + "MaximumExt", + "MaximumExt desc", + "Minimum", + "Minimum desc", + "MinimumExt", + "MinimumExt desc", + "ExampleExt", + "ExampleExt desc", + "Computed", + "Computed desc", + "ComputedExt", + "ComputedExt desc", + "Immutable", + "Immutable desc", + "RequiredInFilter", + "RequiredInFilter desc", + "ImmutableExt", + "ImmutableExt desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SinglePartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to AllSet", + "tags": [ + "AllSet" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from AllSet by key", + "tags": [ + "AllSet" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in AllSet", + "tags": [ + "AllSet" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from AllSet", + "tags": [ + "AllSet" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/AllOne": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related AllOne", + "tags": [ + "AllSet", + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/AllMany": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "AllSet", + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related AllMany", + "tags": [ + "AllSet", + "TwoAllSet" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/ReadOnlyOne": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related ReadOnlyOne", + "tags": [ + "AllSet", + "TwoReadOnlySet" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/ReadOnlyMany": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related ReadOnlyMany", + "tags": [ + "AllSet", + "TwoReadOnlySet" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/NothingOne": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, + "/AllSet('{ID}')/NothingMany": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, + "/NoNavigationSet": { + "get": { + "summary": "Get entities from NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Pattern", + "Pattern desc", + "PatternExt", + "PatternExt desc", + "AllowedValues", + "AllowedValues desc", + "AllowedValuesExt", + "AllowedValuesExt desc", + "Maximum", + "Maximum desc", + "MaximumExt", + "MaximumExt desc", + "Minimum", + "Minimum desc", + "MinimumExt", + "MinimumExt desc", + "Example", + "Example desc", + "ExampleExt", + "ExampleExt desc", + "Computed", + "Computed desc", + "ComputedExt", + "ComputedExt desc", + "Immutable", + "Immutable desc", + "RequiredInFilter", + "RequiredInFilter desc", + "ImmutableExt", + "ImmutableExt desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SinglePartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/NoNavigationSet('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from NoNavigationSet by key", + "tags": [ + "NoNavigationSet" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OneNavigationSet": { + "get": { + "summary": "Get entities from OneNavigationSet", + "tags": [ + "OneNavigationSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Pattern", + "Pattern desc", + "PatternExt", + "PatternExt desc", + "AllowedValues", + "AllowedValues desc", + "AllowedValuesExt", + "AllowedValuesExt desc", + "Maximum", + "Maximum desc", + "MaximumExt", + "MaximumExt desc", + "Minimum", + "Minimum desc", + "MinimumExt", + "MinimumExt desc", + "Example", + "Example desc", + "ExampleExt", + "ExampleExt desc", + "Computed", + "Computed desc", + "ComputedExt", + "ComputedExt desc", + "Immutable", + "Immutable desc", + "RequiredInFilter", + "RequiredInFilter desc", + "ImmutableExt", + "ImmutableExt desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SinglePartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OneNavigationSet('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from OneNavigationSet by key", + "tags": [ + "OneNavigationSet" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OneNavigationSet('{ID}')/AllMany": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "OneNavigationSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadListOnlySet": { + "get": { + "summary": "Supports only read-list", + "tags": [ + "ReadListOnlySet" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SinglePartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Does not support any query options" + } + }, + "/AllSingleton": { + "get": { + "summary": "Get AllSingleton", + "tags": [ + "AllSingleton" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update AllSingleton", + "tags": [ + "AllSingleton" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/AllOne": { + "get": { + "summary": "Get related AllOne", + "tags": [ + "AllSingleton", + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/AllMany": { + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "AllSingleton", + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related AllMany", + "tags": [ + "AllSingleton", + "TwoAllSet" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/ReadOnlyOne": { + "get": { + "summary": "Get related ReadOnlyOne", + "tags": [ + "AllSingleton", + "TwoReadOnlySet" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/ReadOnlyMany": { + "get": { + "summary": "Get entities from related ReadOnlyMany", + "tags": [ + "AllSingleton", + "TwoReadOnlySet" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/NothingOne": {}, + "/AllSingleton/NothingMany": {}, + "/ReadOnlySingleton": { + "get": { + "summary": "Supports only read", + "tags": [ + "ReadOnlySingleton" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Does not support `$select` and `$expand`" + } + }, + "/ReadOnlySingleton/AllOne": { + "get": { + "summary": "Get related AllOne", + "tags": [ + "ReadOnlySingleton", + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadOnlySingleton/AllMany": { + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "ReadOnlySingleton", + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadOnlySingleton/ReadOnlyOne": { + "get": { + "summary": "Get related ReadOnlyOne", + "tags": [ + "ReadOnlySingleton", + "TwoReadOnlySet" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadOnlySingleton/ReadOnlyMany": { + "get": { + "summary": "Get entities from related ReadOnlyMany", + "tags": [ + "ReadOnlySingleton", + "TwoReadOnlySet" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related ReadOnlyMany", + "tags": [ + "ReadOnlySingleton", + "TwoReadOnlySet" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadOnlySingleton/NothingOne": {}, + "/ReadOnlySingleton/NothingMany": { + "get": { + "summary": "Get entities from related NothingMany", + "tags": [ + "ReadOnlySingleton", + "TwoNothingSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoAllSet": { + "get": { + "summary": "Get entities from TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoAllSet(One={One},Two={Two})": { + "parameters": [ + { + "description": "key: One", + "in": "path", + "name": "One", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from TwoAllSet by key", + "tags": [ + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoReadOnlySet": { + "get": { + "summary": "Supports read-list", + "tags": [ + "TwoReadOnlySet" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of TwoPartKey", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Does not support any query options" + } + }, + "/TwoReadOnlySet(One={One},Two={Two})": { + "parameters": [ + { + "description": "key: One", + "in": "path", + "name": "One", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from TwoReadOnlySet by key", + "tags": [ + "TwoReadOnlySet" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoReadOnlyByKeySet": {}, + "/TwoReadOnlyByKeySet(One={One},Two={Two})": { + "parameters": [ + { + "description": "key: One", + "in": "path", + "name": "One", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from TwoReadOnlyByKeySet by key", + "tags": [ + "TwoReadOnlyByKeySet" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoWriteOnlySet": { + "post": { + "summary": "Supports insert", + "tags": [ + "TwoWriteOnlySet" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoWriteOnlySet(One={One},Two={Two})": { + "parameters": [ + { + "description": "key: One", + "in": "path", + "name": "One", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "patch": { + "summary": "Supports update", + "tags": [ + "TwoWriteOnlySet" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Supports delete", + "tags": [ + "TwoWriteOnlySet" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoNothingSet": {}, + "/TwoWriteOnlySingleton": { + "patch": { + "summary": "Supports update", + "tags": [ + "TwoWriteOnlySingleton" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoNothingSingleton": {} + }, + "components": { + "schemas": { + "Supported.Annotations.SinglePartKey": { + "title": "SinglePartKey", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": "string", + "pattern": "^.+$", + "nullable": true + }, + "PatternExt": { + "type": "string", + "pattern": "^.+$", + "nullable": true + }, + "AllowedValues": { + "type": "string", + "enum": [ + "red", + "green", + "blue" + ], + "nullable": true + }, + "AllowedValuesExt": { + "type": "string", + "enum": [ + "red", + "green", + "blue" + ], + "nullable": true + }, + "Maximum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "maximum": 0, + "minimum": -99999, + "nullable": true, + "exclusiveMaximum": true + }, + "MaximumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": -1, + "nullable": true, + "maximum": -1 + }, + "Minimum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.01, + "maximum": 999.99, + "minimum": 1, + "nullable": true + }, + "MinimumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 1, + "multipleOf": 0.00001, + "minimum": 0, + "exclusiveMinimum": true + }, + "Example": { + "type": "string", + "nullable": true, + "example": "Hello World" + }, + "ExampleExt": { + "type": "string", + "nullable": true, + "example": "Hello external World" + }, + "Computed": { + "type": "string", + "nullable": true + }, + "ComputedExt": { + "type": "string", + "nullable": true + }, + "Immutable": { + "type": "string", + "nullable": true + }, + "RequiredInFilter": { + "type": "string", + "nullable": true + }, + "ImmutableExt": { + "type": "string", + "nullable": true + }, + "AllOne": { + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + ], + "nullable": true + }, + "AllMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + }, + "AllMany@count": { + "$ref": "#/components/schemas/count" + }, + "ReadOnlyOne": { + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + ], + "nullable": true + }, + "ReadOnlyMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + }, + "ReadOnlyMany@count": { + "$ref": "#/components/schemas/count" + }, + "NothingOne": { + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + ], + "nullable": true + }, + "NothingMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + }, + "NothingMany@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "Supported.Annotations.SinglePartKey-create": { + "title": "SinglePartKey (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": "string", + "pattern": "^.+$", + "nullable": true + }, + "PatternExt": { + "type": "string", + "pattern": "^.+$", + "nullable": true + }, + "AllowedValues": { + "type": "string", + "enum": [ + "red", + "green", + "blue" + ], + "nullable": true + }, + "AllowedValuesExt": { + "type": "string", + "enum": [ + "red", + "green", + "blue" + ], + "nullable": true + }, + "Maximum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "maximum": 0, + "minimum": -99999, + "nullable": true, + "exclusiveMaximum": true + }, + "MaximumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": -1, + "nullable": true, + "maximum": -1 + }, + "Minimum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.01, + "maximum": 999.99, + "minimum": 1, + "nullable": true + }, + "MinimumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 1, + "multipleOf": 0.00001, + "minimum": 0, + "exclusiveMinimum": true + }, + "Example": { + "type": "string", + "nullable": true, + "example": "Hello World" + }, + "ExampleExt": { + "type": "string", + "nullable": true, + "example": "Hello external World" + }, + "Immutable": { + "type": "string", + "nullable": true + }, + "RequiredInFilter": { + "type": "string", + "nullable": true + }, + "ImmutableExt": { + "type": "string", + "nullable": true + }, + "AllOne": { + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + ], + "nullable": true + }, + "AllMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + }, + "ReadOnlyOne": { + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + ], + "nullable": true + }, + "ReadOnlyMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + }, + "NothingOne": { + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + ], + "nullable": true + }, + "NothingMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + }, + "required": [ + "ID" + ] + }, + "Supported.Annotations.SinglePartKey-update": { + "title": "SinglePartKey (for update)", + "type": "object", + "properties": { + "Pattern": { + "type": "string", + "pattern": "^.+$", + "nullable": true + }, + "PatternExt": { + "type": "string", + "pattern": "^.+$", + "nullable": true + }, + "AllowedValues": { + "type": "string", + "enum": [ + "red", + "green", + "blue" + ], + "nullable": true + }, + "AllowedValuesExt": { + "type": "string", + "enum": [ + "red", + "green", + "blue" + ], + "nullable": true + }, + "Maximum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "maximum": 0, + "minimum": -99999, + "nullable": true, + "exclusiveMaximum": true + }, + "MaximumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": -1, + "nullable": true, + "maximum": -1 + }, + "Minimum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.01, + "maximum": 999.99, + "minimum": 1, + "nullable": true + }, + "MinimumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 1, + "multipleOf": 0.00001, + "minimum": 0, + "exclusiveMinimum": true + }, + "Example": { + "type": "string", + "nullable": true, + "example": "Hello World" + }, + "ExampleExt": { + "type": "string", + "nullable": true, + "example": "Hello external World" + }, + "RequiredInFilter": { + "type": "string", + "nullable": true + } + } + }, + "Supported.Annotations.TwoPartKey": { + "title": "TwoPartKey", + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + } + }, + "Supported.Annotations.TwoPartKey-create": { + "title": "TwoPartKey (for create)", + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "One", + "Two" + ] + }, + "Supported.Annotations.TwoPartKey-update": { + "title": "TwoPartKey (for update)", + "type": "object" + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/annotations.xml b/odata-openapi/examples/annotations.xml new file mode 100644 index 00000000..1d401a14 --- /dev/null +++ b/odata-openapi/examples/annotations.xml @@ -0,0 +1,526 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RequiredInFilter + + + + + + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + One + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Two + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/authorization.openapi3.json b/odata-openapi/examples/authorization.openapi3.json new file mode 100644 index 00000000..597e65b4 --- /dev/null +++ b/odata-openapi/examples/authorization.openapi3.json @@ -0,0 +1,512 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace auth.example", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Person{bg:lightslategray}],[People%20{bg:lawngreen}]++-*>[Person])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "People" + } + ], + "paths": { + "/People": { + "get": { + "summary": "Get entities from People", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Person", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/auth.example.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to People", + "tags": [ + "People" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/auth.example.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/auth.example.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from People by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/auth.example.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in People", + "tags": [ + "People" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/auth.example.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from People", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET People HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "auth.example.Person": { + "title": "Person", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "auth.example.Person-create": { + "title": "Person (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "auth.example.Person-update": { + "title": "Person (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "securitySchemes": { + "api_key": { + "description": "Authentication via API key", + "type": "apiKey", + "name": "x-api-key", + "in": "header" + }, + "http_bearer": { + "description": "HTTP authentication with bearer token", + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + }, + "oauth_authcode": { + "description": "Authentication via OAuth2 with authorization code flow", + "type": "oauth2", + "flows": { + "authorizationCode": { + "authorizationUrl": "https://example.com/api/oauth/dialog", + "tokenUrl": "https://example.com/api/oauth/token", + "refreshUrl": "https://example.com/api/oauth/refresh", + "scopes": { + "do:something": "do something" + } + } + } + }, + "oauth_clientcredentials": { + "description": "Authentication via OAuth2 with client credentials flow", + "type": "oauth2", + "flows": { + "clientCredentials": { + "tokenUrl": "https://example.com/api/oauth/token", + "refreshUrl": "https://example.com/api/oauth/refresh", + "scopes": { + "do:something": "do something" + } + } + } + }, + "oauth_implicit": { + "description": "Authentication via OAuth2 with implicit flow", + "type": "oauth2", + "flows": { + "implicit": { + "authorizationUrl": "https://example.com/api/oauth/dialog", + "refreshUrl": "https://example.com/api/oauth/refresh", + "scopes": { + "write:foo": "modify foo", + "read:foo": "read foo" + } + } + } + }, + "oauth_password": { + "description": "Authentication via OAuth2 with resource owner password flow", + "type": "oauth2", + "flows": { + "password": { + "tokenUrl": "https://example.com/api/oauth/token", + "refreshUrl": "https://example.com/api/oauth/refresh", + "scopes": { + "do:something": "do something" + } + } + } + }, + "open_id": { + "description": "Authentication via OpenID Connect", + "type": "openIdConnect", + "openIdConnectUrl": "https://example.com/openid/issuer/location" + } + } + }, + "security": [ + { + "api_key": [] + }, + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] +} \ No newline at end of file diff --git a/odata-openapi/examples/authorization.xml b/odata-openapi/examples/authorization.xml new file mode 100644 index 00000000..67a5a1d6 --- /dev/null +++ b/odata-openapi/examples/authorization.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + write:pets + read:pets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/containment.openapi3.json b/odata-openapi/examples/containment.openapi3.json new file mode 100644 index 00000000..eecd3528 --- /dev/null +++ b/odata-openapi/examples/containment.openapi3.json @@ -0,0 +1,5294 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace Containment", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Whole{bg:lightslategray}],[Whole]++-0..1>[Part],[Whole]++-*>[Part],[Part{bg:lightslategray}],[Part]++-0..1>[SubPart],[Part]++-*>[SubPart],[Part]++-*>[SubPart],[Part]++-*>[SubPart],[SubPart{bg:lightslategray}],[Folder{bg:lightslategray}],[Folder]++-*>[Folder],[Folders%20{bg:lawngreen}]++-*>[Folder],[TheWhole%20{bg:lawngreen}]++->[Whole],[Wholes%20{bg:lawngreen}]++-*>[Whole])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Wholes", + "description": "List of containers" + }, + { + "name": "TheWhole", + "description": "Special container" + }, + { + "name": "Folders", + "description": "List of folders" + } + ], + "paths": { + "/Wholes": { + "get": { + "summary": "Get entities from Wholes", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Whole", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Whole" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Wholes", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes/self.Like": { + "post": { + "summary": "I like all of these wholes", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes/self.Likes": { + "get": { + "summary": "How many like these wholes", + "tags": [ + "Wholes" + ], + "parameters": [], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Wholes by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Wholes", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Wholes", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/self.Like": { + "post": { + "summary": "I like this whole", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/Wholes('{ID}')/self.Likes": { + "get": { + "summary": "How many like this whole", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/Wholes('{ID}')/One/self.Likes": { + "get": { + "summary": "How many like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/One": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/Many": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SubPart", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/Many(One={One_2},Two={Two_2})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: One", + "in": "path", + "name": "One_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index", + "index desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Part", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many/self.Like": { + "post": { + "summary": "I like all of these parts", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/Wholes('{ID}')/Many/self.Likes": { + "get": { + "summary": "How many like these parts", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index_1})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index_1})/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ] + } + }, + "/Wholes('{ID}')/Many({index_1})/self.Likes": { + "get": { + "summary": "How many like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index_1})/One": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index_1})/Many": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SubPart", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index_1})/Many(One={One_2},Two={Two_2})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: One", + "in": "path", + "name": "One_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index_1})/ManyReadListOnly": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related ManyReadListOnly", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SubPart", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index_1})/ManyReadByKeyOnly": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ] + }, + "/Wholes('{ID}')/Many({index_1})/ManyReadByKeyOnly(One={One_2},Two={Two_2})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: One", + "in": "path", + "name": "One_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related ManyReadByKeyOnly by key", + "tags": [ + "Wholes" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole": { + "get": { + "summary": "Get TheWhole", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update TheWhole", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/self.Like": { + "post": { + "summary": "I like this whole", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/self.Likes": { + "get": { + "summary": "How many like this whole", + "tags": [ + "TheWhole" + ], + "parameters": [], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One": { + "get": { + "summary": "Get related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/self.Likes": { + "get": { + "summary": "How many like this part", + "tags": [ + "TheWhole" + ], + "parameters": [], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/One": { + "get": { + "summary": "Get related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/Many": { + "get": { + "summary": "Get entities from related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SubPart", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Supports insert", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/Many(One={One_2},Two={Two_2})": { + "parameters": [ + { + "description": "key: One", + "in": "path", + "name": "One_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Supports update", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Supports delete", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many": { + "get": { + "summary": "Get entities from related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index", + "index desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Part", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many/self.Like": { + "post": { + "summary": "I like all of these parts", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many/self.Likes": { + "get": { + "summary": "How many like these parts", + "tags": [ + "TheWhole" + ], + "parameters": [], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index_1})": { + "parameters": [ + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index_1})/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ] + } + }, + "/TheWhole/Many({index_1})/self.Likes": { + "get": { + "summary": "How many like this part", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index_1})/One": { + "parameters": [ + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index_1})/Many": { + "parameters": [ + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SubPart", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index_1})/Many(One={One_2},Two={Two_2})": { + "parameters": [ + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: One", + "in": "path", + "name": "One_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "TheWhole" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index_1})/ManyReadListOnly": { + "parameters": [ + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Supports only read-list", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/components/parameters/count" + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of SubPart", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Does not support any system query options" + } + }, + "/TheWhole/Many({index_1})/ManyReadByKeyOnly": { + "parameters": [ + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ] + }, + "/TheWhole/Many({index_1})/ManyReadByKeyOnly(One={One_2},Two={Two_2})": { + "parameters": [ + { + "description": "key: index", + "in": "path", + "name": "index_1", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: One", + "in": "path", + "name": "One_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "description": "key: Two", + "in": "path", + "name": "Two_2", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Supports only read-by-key", + "tags": [ + "TheWhole" + ], + "parameters": [], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Does not support `$select`" + } + }, + "/Folders": { + "get": { + "summary": "Get entities from Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Folder", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Folder", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name_1}')": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_1", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name_1}')/Folders": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_1", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Folder", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name_1}')/Folders('{Name_2}')": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_1", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_2", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name_1}')/Folders('{Name_2}')/Folders": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_1", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_2", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Folder", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name_1}')/Folders('{Name_2}')/Folders('{Name_3}')": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_1", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_2", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_3", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name_1}')/Folders('{Name_2}')/Folders('{Name_3}')/Folders": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_1", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_2", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_3", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Folder", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name_1}')/Folders('{Name_2}')/Folders('{Name_3}')/Folders('{Name_4}')": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_1", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_2", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_3", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_4", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name_1}')/Folders('{Name_2}')/Folders('{Name_3}')/Folders('{Name_4}')/Folders": { + "parameters": [ + { + "description": "key: Name", + "in": "path", + "name": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_1", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_2", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_3", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "key: Name", + "in": "path", + "name": "Name_4", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Folder", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "Containment.Whole": { + "title": "Whole", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "One": { + "anyOf": [ + { + "$ref": "#/components/schemas/Containment.Part" + } + ], + "nullable": true + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Part" + } + }, + "Many@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "Containment.Whole-create": { + "title": "Whole (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "One": { + "anyOf": [ + { + "$ref": "#/components/schemas/Containment.Part-create" + } + ], + "nullable": true + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Part-create" + } + } + }, + "required": [ + "ID" + ] + }, + "Containment.Whole-update": { + "title": "Whole (for update)", + "type": "object", + "properties": { + "Description": { + "type": "string", + "nullable": true + } + } + }, + "Containment.Part": { + "title": "Part", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int32" + }, + "One": { + "anyOf": [ + { + "$ref": "#/components/schemas/Containment.SubPart" + } + ], + "nullable": true + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + }, + "Many@count": { + "$ref": "#/components/schemas/count" + }, + "ManyReadListOnly": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + }, + "ManyReadListOnly@count": { + "$ref": "#/components/schemas/count" + }, + "ManyReadByKeyOnly": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + }, + "ManyReadByKeyOnly@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "Containment.Part-create": { + "title": "Part (for create)", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int32" + }, + "One": { + "anyOf": [ + { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + ], + "nullable": true + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + }, + "ManyReadListOnly": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + }, + "ManyReadByKeyOnly": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + }, + "required": [ + "index" + ] + }, + "Containment.Part-update": { + "title": "Part (for update)", + "type": "object" + }, + "Containment.SubPart": { + "title": "SubPart", + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + } + }, + "Containment.SubPart-create": { + "title": "SubPart (for create)", + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "One", + "Two" + ] + }, + "Containment.SubPart-update": { + "title": "SubPart (for update)", + "type": "object" + }, + "Containment.Folder": { + "title": "Folder", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "Folders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + }, + "Folders@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "Containment.Folder-create": { + "title": "Folder (for create)", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "Folders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + }, + "required": [ + "Name" + ] + }, + "Containment.Folder-update": { + "title": "Folder (for update)", + "type": "object", + "properties": { + "Description": { + "type": "string", + "nullable": true + } + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/containment.xml b/odata-openapi/examples/containment.xml new file mode 100644 index 00000000..77a0d93f --- /dev/null +++ b/odata-openapi/examples/containment.xml @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + false + + + + + false + + + + + + + + + + + false + + + + + + + false + + + + + true + + + + + + + + + false + + + + + + + false + + + + + + + false + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/csdl-16.1.openapi3.json b/odata-openapi/examples/csdl-16.1.openapi3.json new file mode 100644 index 00000000..dc63e0de --- /dev/null +++ b/odata-openapi/examples/csdl-16.1.openapi3.json @@ -0,0 +1,2507 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace ODataDemo", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:lightslategray}],[Product]*-[Category],[Category{bg:lightslategray}],[Supplier{bg:lightslategray}],[Supplier]++-[Address],[Supplier]0..1-*[Product],[Country{bg:lightslategray}],[Address],[Address]-0..1>[Country],[ProductsByRating{bg:lawngreen}]-*>[Product],[Countries%20{bg:lawngreen}]++-*>[Country],[MainSupplier%20{bg:lawngreen}]++->[Supplier],[Suppliers%20{bg:lawngreen}]++-*>[Supplier],[Categories%20{bg:lawngreen}]++-*>[Category],[Products%20{bg:lawngreen}]++-*>[Product])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "Categories", + "description": "Product Categories" + }, + { + "name": "Suppliers" + }, + { + "name": "MainSupplier", + "description": "Primary Supplier" + }, + { + "name": "Countries" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products('{ID}')/Category": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products('{ID}')/Supplier": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Address/Country", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address/Street", + "Address/Street desc", + "Address/City", + "Address/City desc", + "Address/State", + "Address/State desc", + "Address/ZipCode", + "Address/ZipCode desc", + "Address/CountryName", + "Address/CountryName desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Address/Country", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Supplier", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Address/Country", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers('{ID}')/Address/Country": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Country", + "tags": [ + "Suppliers", + "Countries" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers('{ID}')/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/MainSupplier": { + "get": { + "summary": "Get MainSupplier", + "tags": [ + "MainSupplier" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Address/Country", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update MainSupplier", + "tags": [ + "MainSupplier" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/MainSupplier/Address/Country": { + "get": { + "summary": "Get related Country", + "tags": [ + "MainSupplier" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/MainSupplier/Products": { + "get": { + "summary": "Get entities from related Products", + "tags": [ + "MainSupplier", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "MainSupplier", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Countries": { + "get": { + "summary": "Get entities from Countries", + "tags": [ + "Countries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Code desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Country", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Country" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Countries", + "tags": [ + "Countries" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Countries('{Code}')": { + "parameters": [ + { + "description": "key: Code", + "in": "path", + "name": "Code", + "required": true, + "schema": { + "type": "string", + "maxLength": 2 + } + } + ], + "get": { + "summary": "Get entity from Countries by key", + "tags": [ + "Countries" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Countries", + "tags": [ + "Countries" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Countries", + "tags": [ + "Countries" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductsByRating": { + "get": { + "summary": "Invoke function ProductsByRating", + "tags": [ + "Products" + ], + "parameters": [ + { + "required": true, + "in": "query", + "name": "Rating", + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "ODataDemo.Product": { + "title": "Product", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "DiscontinuedDate": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "nullable": true + }, + "Currency": { + "type": "string", + "maxLength": 3, + "nullable": true + }, + "Category": { + "$ref": "#/components/schemas/ODataDemo.Category" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + ], + "nullable": true + } + } + }, + "ODataDemo.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "DiscontinuedDate": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "nullable": true + }, + "Currency": { + "type": "string", + "maxLength": 3, + "nullable": true + }, + "Category": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "DiscontinuedDate": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "nullable": true + }, + "Currency": { + "type": "string", + "maxLength": 3, + "nullable": true + } + } + }, + "ODataDemo.Category": { + "title": "Category", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + }, + "Products@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "ODataDemo.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string" + } + } + }, + "ODataDemo.Supplier": { + "title": "Supplier", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "$ref": "#/components/schemas/ODataDemo.Address" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + }, + "Products@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "ODataDemo.Supplier-create": { + "title": "Supplier (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "$ref": "#/components/schemas/ODataDemo.Address-create" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Supplier-update": { + "title": "Supplier (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "$ref": "#/components/schemas/ODataDemo.Address-update" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + } + }, + "ODataDemo.Country": { + "title": "Country", + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 2 + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Country-create": { + "title": "Country (for create)", + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 2 + }, + "Name": { + "type": "string", + "nullable": true + } + }, + "required": [ + "Code" + ] + }, + "ODataDemo.Country-update": { + "title": "Country (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Address": { + "title": "Address", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "CountryName": { + "type": "string", + "nullable": true + }, + "Country": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Country" + } + ], + "nullable": true + } + } + }, + "ODataDemo.Address-create": { + "title": "Address (for create)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "CountryName": { + "type": "string", + "nullable": true + }, + "Country": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Country-create" + } + ], + "nullable": true + } + } + }, + "ODataDemo.Address-update": { + "title": "Address (for update)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "CountryName": { + "type": "string", + "nullable": true + } + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/csdl-16.1.xml b/odata-openapi/examples/csdl-16.1.xml new file mode 100644 index 00000000..dd87d986 --- /dev/null +++ b/odata-openapi/examples/csdl-16.1.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Concurrency + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/csdl-16.2.openapi3.json b/odata-openapi/examples/csdl-16.2.openapi3.json new file mode 100644 index 00000000..1f0d0d43 --- /dev/null +++ b/odata-openapi/examples/csdl-16.2.openapi3.json @@ -0,0 +1,12 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "OData CSDL document", + "description": "", + "version": "" + }, + "paths": {}, + "components": { + "schemas": {} + } +} \ No newline at end of file diff --git a/odata-openapi/examples/csdl-16.2.xml b/odata-openapi/examples/csdl-16.2.xml new file mode 100644 index 00000000..6e925dbf --- /dev/null +++ b/odata-openapi/examples/csdl-16.2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + Name + in + Address/CountryName + + + + + + + MasterData + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/descriptions.openapi3.json b/odata-openapi/examples/descriptions.openapi3.json new file mode 100644 index 00000000..d9e45cb4 --- /dev/null +++ b/odata-openapi/examples/descriptions.openapi3.json @@ -0,0 +1,1425 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Container - Description", + "description": "Container - LongDescription\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[entity{bg:lightslategray}],[functionimport_no_descriptions{bg:lawngreen}],[functionimport_ext{bg:lawngreen}],[functionimport{bg:lawngreen}],[actionimport_no_descriptions{bg:lawngreen}],[actionimport_ext{bg:lawngreen}],[actionimport{bg:lawngreen}],[single_ext%20{bg:lawngreen}]++->[entity],[single%20{bg:lawngreen}]++->[entity],[entities_ext%20{bg:lawngreen}]++-*>[entity],[entities%20{bg:lawngreen}]++-*>[entity])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "0.0.1" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "entities", + "description": "Entity Set - Description" + }, + { + "name": "entities_ext", + "description": "Entity Set Ext - Description" + }, + { + "name": "single", + "description": "Singleton - Description" + }, + { + "name": "single_ext", + "description": "Singleton Ext - Description" + } + ], + "paths": { + "/entities": { + "get": { + "summary": "Query Entity Set - Description", + "tags": [ + "entities" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id", + "id desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of entity", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Query Entity Set - LongDescription" + }, + "post": { + "summary": "Create Entity - Description", + "tags": [ + "entities" + ], + "requestBody": { + "description": "Entity Type - Description", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Create Entity - LongDescription" + } + }, + "/entities('{id}')": { + "parameters": [ + { + "description": "Property - Description \nProperty - LongDescription", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "maxLength": 70 + } + } + ], + "get": { + "summary": "Read Entity by Key - Description", + "tags": [ + "entities" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Read Entity by Key - LongDescription" + }, + "patch": { + "summary": "Update Entity - Description", + "tags": [ + "entities" + ], + "requestBody": { + "description": "Entity Type - Description", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Update Entity - LongDescription" + }, + "delete": { + "summary": "Delete Entity - Description", + "tags": [ + "entities" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Delete Entity - LongDescription" + } + }, + "/entities('{id}')/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "tags": [ + "entities" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Action Bound Overload - LongDescription", + "parameters": [ + { + "description": "Property - Description \nProperty - LongDescription", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "maxLength": 70 + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + } + } + } + }, + "/entities('{id}')/self.function": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "tags": [ + "entities" + ], + "parameters": [ + { + "description": "Property - Description \nProperty - LongDescription", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "maxLength": 70 + } + }, + { + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "in": "query", + "name": "nonbinding", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Function Bound Overload - LongDescription" + } + }, + "/entities_ext": { + "get": { + "summary": "Query Entity Set Ext - Description", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id", + "id desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of entity", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Query Entity Set Ext - LongDescription" + }, + "post": { + "summary": "Create Entity Ext - Description", + "tags": [ + "entities_ext" + ], + "requestBody": { + "description": "Entity Type - Description", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Create Entity Ext - LongDescription" + } + }, + "/entities_ext('{id}')": { + "parameters": [ + { + "description": "Property - Description \nProperty - LongDescription", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "maxLength": 70 + } + } + ], + "get": { + "summary": "Read Entity Set by Key Ext - Description", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Read Entity Set by Key Ext - LongDescription" + }, + "patch": { + "summary": "Update Entity Ext - Description", + "tags": [ + "entities_ext" + ], + "requestBody": { + "description": "Entity Type - Description", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Update Entity Ext - LongDescription" + }, + "delete": { + "summary": "Delete Entity Ext - Description", + "tags": [ + "entities_ext" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Delete Entity Ext - LongDescription" + } + }, + "/entities_ext('{id}')/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "tags": [ + "entities_ext" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Action Bound Overload - LongDescription", + "parameters": [ + { + "description": "Property - Description \nProperty - LongDescription", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "maxLength": 70 + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + } + } + } + }, + "/entities_ext('{id}')/self.function": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "description": "Property - Description \nProperty - LongDescription", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + "maxLength": 70 + } + }, + { + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "in": "query", + "name": "nonbinding", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Function Bound Overload - LongDescription" + } + }, + "/single": { + "get": { + "summary": "Read Singleton - Description", + "tags": [ + "single" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Read Singleton - LongDescription" + }, + "patch": { + "summary": "Update Singleton - Description", + "tags": [ + "single" + ], + "requestBody": { + "description": "Entity Type - Description", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Update Singleton - LongDescription" + } + }, + "/single/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "tags": [ + "single" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Action Bound Overload - LongDescription", + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + } + } + } + }, + "/single/self.function": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "tags": [ + "single" + ], + "parameters": [ + { + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "in": "query", + "name": "nonbinding", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Function Bound Overload - LongDescription" + } + }, + "/single_ext": { + "get": { + "summary": "Read Singleton Ext - Description", + "tags": [ + "single_ext" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Read Singleton Ext - LongDescription" + }, + "patch": { + "summary": "Update Singleton Ext - Description", + "tags": [ + "single_ext" + ], + "requestBody": { + "description": "Entity Type - Description", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Update Singleton Ext - LongDescription" + } + }, + "/single_ext/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "tags": [ + "single_ext" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Action Bound Overload - LongDescription", + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + } + } + } + }, + "/single_ext/self.function": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "tags": [ + "single_ext" + ], + "parameters": [ + { + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "in": "query", + "name": "nonbinding", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Function Bound Overload - LongDescription" + } + }, + "/actionimport": { + "post": { + "summary": "Action Import - Description", + "tags": [ + "Service Operations" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Return Type - Description", + "description": "Action Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Action Import - LongDescription", + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Parameter - Description", + "description": "Action Unbound Overload Parameter Ext - LongDescription" + } + } + } + } + } + } + } + }, + "/actionimport_ext": { + "post": { + "summary": "Action Import Ext - Description", + "tags": [ + "Service Operations" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Return Type - Description", + "description": "Action Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Action Import Ext - LongDescription", + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Parameter - Description", + "description": "Action Unbound Overload Parameter Ext - LongDescription" + } + } + } + } + } + } + } + }, + "/actionimport_no_descriptions": { + "post": { + "summary": "Action Unbound Overload - Description", + "tags": [ + "Service Operations" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Return Type - Description", + "description": "Action Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Action Unbound Overload Ext - LongDescription", + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Parameter - Description", + "description": "Action Unbound Overload Parameter Ext - LongDescription" + } + } + } + } + } + } + } + }, + "/functionimport": { + "get": { + "summary": "Function Import - Description", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "required": true, + "description": "Function Unbound Overload Parameter - Description \nFunction Unbound Overload Parameter Ext - LongDescription", + "in": "query", + "name": "nonbinding", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Unbound Overload Return Type - Description", + "description": "Function Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Function Import - LongDescription" + } + }, + "/functionimport_ext": { + "get": { + "summary": "Function Import Ext - Description", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "required": true, + "description": "Function Unbound Overload Parameter - Description \nFunction Unbound Overload Parameter Ext - LongDescription", + "in": "query", + "name": "nonbinding", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Unbound Overload Return Type - Description", + "description": "Function Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Function Import Ext - LongDescription" + } + }, + "/functionimport_no_descriptions": { + "get": { + "summary": "Function Unbound Overload - Description", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "required": true, + "description": "Function Unbound Overload Parameter - Description \nFunction Unbound Overload Parameter Ext - LongDescription", + "in": "query", + "name": "nonbinding", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Unbound Overload Return Type - Description", + "description": "Function Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "Function Unbound Overload Ext - LongDescription" + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET entities HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "descriptions.entity": { + "title": "Entity Type - Description", + "type": "object", + "properties": { + "id": { + "type": "string", + "maxLength": 70, + "title": "Property - Description", + "description": "Property - LongDescription" + } + }, + "description": "Entity Type - LongDescription" + }, + "descriptions.entity-create": { + "title": "Entity Type - Description (for create)", + "type": "object", + "properties": { + "id": { + "type": "string", + "maxLength": 70, + "title": "Property - Description", + "description": "Property - LongDescription" + } + }, + "required": [ + "id" + ], + "description": "Entity Type - LongDescription" + }, + "descriptions.entity-update": { + "title": "Entity Type - Description (for update)", + "type": "object", + "description": "Entity Type - LongDescription" + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/descriptions.xml b/odata-openapi/examples/descriptions.xml new file mode 100644 index 00000000..60200d66 --- /dev/null +++ b/odata-openapi/examples/descriptions.xml @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/example.openapi3.json b/odata-openapi/examples/example.openapi3.json new file mode 100644 index 00000000..0644eeb0 --- /dev/null +++ b/odata-openapi/examples/example.openapi3.json @@ -0,0 +1,4385 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace ODataDemo", + "description": "This service is located at [https://services.odata.org/V4/OData/(S(nsga2k1tyctb0cn0ofcgcn4o))/OData.svc/](https://services.odata.org/V4/OData/%28S%28nsga2k1tyctb0cn0ofcgcn4o%29%29/OData.svc/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:lightslategray}],[Product]*-*[Category],[Product]^[FeaturedProduct{bg:lightslategray}],[FeaturedProduct]0..1-0..1[Advertisement],[ProductDetail{bg:lightslategray}],[ProductDetail]0..1-0..1[Product],[Category{bg:lightslategray}],[Supplier{bg:lightslategray}],[Supplier]++-0..1[Address],[Supplier]0..1-*[Product],[Address],[Person{bg:lightslategray}],[Person]^[Customer{bg:lightslategray}],[Person]^[Employee{bg:lightslategray}],[PersonDetail{bg:lightslategray}],[PersonDetail]++-0..1[Address],[PersonDetail]0..1-0..1[Person],[Advertisement{bg:lightslategray}],[IncreaseSalaries{bg:lawngreen}],[Advertisements%20{bg:lawngreen}]++-*>[Advertisement],[PersonDetails%20{bg:lawngreen}]++-*>[PersonDetail],[Persons%20{bg:lawngreen}]++-*>[Person],[Suppliers%20{bg:lawngreen}]++-*>[Supplier],[Categories%20{bg:lawngreen}]++-*>[Category],[ProductDetails%20{bg:lawngreen}]++-*>[ProductDetail],[Products%20{bg:lawngreen}]++-*>[Product])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://services.odata.org/V4/OData/(S(nsga2k1tyctb0cn0ofcgcn4o))/OData.svc" + } + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "ProductDetails" + }, + { + "name": "Categories" + }, + { + "name": "Suppliers" + }, + { + "name": "Persons" + }, + { + "name": "PersonDetails" + }, + { + "name": "Advertisements" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/ODataDemo.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "Products" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/Products({ID})/Categories": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Categories", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Categories", + "tags": [ + "Products", + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/Supplier": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/ProductDetail": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related ProductDetail", + "tags": [ + "Products", + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails": { + "get": { + "summary": "Get entities from ProductDetails", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "Details", + "Details desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of ProductDetail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to ProductDetails", + "tags": [ + "ProductDetails" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from ProductDetails by key", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in ProductDetails", + "tags": [ + "ProductDetails" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from ProductDetails", + "tags": [ + "ProductDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})/Product": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "ProductDetails", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})/Product/ODataDemo.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "ProductDetails" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address/Street", + "Address/Street desc", + "Address/City", + "Address/City desc", + "Address/State", + "Address/State desc", + "Address/ZipCode", + "Address/ZipCode desc", + "Address/Country", + "Address/Country desc", + "Location", + "Location desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Supplier", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({ID})/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Persons": { + "get": { + "summary": "Get entities from Persons", + "tags": [ + "Persons" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Person", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Persons", + "tags": [ + "Persons" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Persons({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Persons by key", + "tags": [ + "Persons" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Persons", + "tags": [ + "Persons" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Persons", + "tags": [ + "Persons" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Persons({ID})/PersonDetail": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related PersonDetail", + "tags": [ + "Persons", + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails": { + "get": { + "summary": "Get entities from PersonDetails", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "PersonID desc", + "Age", + "Age desc", + "Gender", + "Gender desc", + "Phone", + "Phone desc", + "Address/Street", + "Address/Street desc", + "Address/City", + "Address/City desc", + "Address/State", + "Address/State desc", + "Address/ZipCode", + "Address/ZipCode desc", + "Address/Country", + "Address/Country desc", + "Photo", + "Photo desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of PersonDetail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to PersonDetails", + "tags": [ + "PersonDetails" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails({PersonID})": { + "parameters": [ + { + "description": "key: PersonID", + "in": "path", + "name": "PersonID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from PersonDetails by key", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in PersonDetails", + "tags": [ + "PersonDetails" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from PersonDetails", + "tags": [ + "PersonDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails({PersonID})/Person": { + "parameters": [ + { + "description": "key: PersonID", + "in": "path", + "name": "PersonID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Person", + "tags": [ + "PersonDetails", + "Persons" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements": { + "get": { + "summary": "Get entities from Advertisements", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "AirDate", + "AirDate desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Advertisement", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Advertisements", + "tags": [ + "Advertisements" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Get entity from Advertisements by key", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Advertisements", + "tags": [ + "Advertisements" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Advertisements", + "tags": [ + "Advertisements" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements({ID})/FeaturedProduct": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Get related FeaturedProduct", + "tags": [ + "Advertisements", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail", + "Advertisement" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/IncreaseSalaries": { + "post": { + "summary": "Invoke action IncreaseSalaries", + "tags": [ + "Service Operations" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "percentage": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0 + } + } + } + } + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "ODataDemo.Product": { + "title": "Product", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + }, + "Categories@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + ], + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct" + }, + {} + ] + }, + "ODataDemo.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct-create" + }, + {} + ] + }, + "ODataDemo.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct-update" + }, + {} + ] + }, + "ODataDemo.FeaturedProduct": { + "title": "FeaturedProduct", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + }, + "Categories@odata.count": { + "$ref": "#/components/schemas/count" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + ], + "nullable": true + }, + "Advertisement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + ], + "nullable": true + } + } + }, + "ODataDemo.FeaturedProduct-create": { + "title": "FeaturedProduct (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-create" + } + ], + "nullable": true + }, + "Advertisement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Advertisement-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.FeaturedProduct-update": { + "title": "FeaturedProduct (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + }, + "ODataDemo.ProductDetail": { + "title": "ProductDetail", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": "string", + "nullable": true + }, + "Product": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Product" + } + ], + "nullable": true + } + } + }, + "ODataDemo.ProductDetail-create": { + "title": "ProductDetail (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": "string", + "nullable": true + }, + "Product": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + ], + "nullable": true + } + }, + "required": [ + "ProductID" + ] + }, + "ODataDemo.ProductDetail-update": { + "title": "ProductDetail (for update)", + "type": "object", + "properties": { + "Details": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Category": { + "title": "Category", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "ODataDemo.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Supplier": { + "title": "Supplier", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address" + } + ], + "nullable": true + }, + "Location": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "ODataDemo.Supplier-create": { + "title": "Supplier (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-create" + } + ], + "nullable": true + }, + "Location": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Supplier-update": { + "title": "Supplier (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-update" + } + ], + "nullable": true + }, + "Location": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + } + }, + "ODataDemo.Address": { + "title": "Address", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Address-create": { + "title": "Address (for create)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Address-update": { + "title": "Address (for update)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Person": { + "title": "Person", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + ], + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Customer" + }, + { + "$ref": "#/components/schemas/ODataDemo.Employee" + }, + {} + ] + }, + "ODataDemo.Person-create": { + "title": "Person (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Customer-create" + }, + { + "$ref": "#/components/schemas/ODataDemo.Employee-create" + }, + {} + ] + }, + "ODataDemo.Person-update": { + "title": "Person (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Customer-update" + }, + { + "$ref": "#/components/schemas/ODataDemo.Employee-update" + }, + {} + ] + }, + "ODataDemo.Customer": { + "title": "Customer", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + ], + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "ODataDemo.Customer-create": { + "title": "Customer (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + ], + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Customer-update": { + "title": "Customer (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "ODataDemo.Employee": { + "title": "Employee", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + ], + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + } + }, + "ODataDemo.Employee-create": { + "title": "Employee (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + ], + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Employee-update": { + "title": "Employee (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + } + }, + "ODataDemo.PersonDetail": { + "title": "PersonDetail", + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address" + } + ], + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Person" + } + ], + "nullable": true + } + } + }, + "ODataDemo.PersonDetail-create": { + "title": "PersonDetail (for create)", + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-create" + } + ], + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Person-create" + } + ], + "nullable": true + } + }, + "required": [ + "PersonID" + ] + }, + "ODataDemo.PersonDetail-update": { + "title": "PersonDetail (for update)", + "type": "object", + "properties": { + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-update" + } + ], + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url" + } + } + }, + "ODataDemo.Advertisement": { + "title": "Advertisement", + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct" + } + ], + "nullable": true + } + } + }, + "ODataDemo.Advertisement-create": { + "title": "Advertisement (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Advertisement-update": { + "title": "Advertisement (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + } + }, + "geoPoint": { + "type": "object", + "properties": { + "coordinates": { + "$ref": "#/components/schemas/geoPosition" + }, + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/example.xml b/odata-openapi/examples/example.xml new file mode 100644 index 00000000..d4fc5ba4 --- /dev/null +++ b/odata-openapi/examples/example.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/key-aliases.openapi3.json b/odata-openapi/examples/key-aliases.openapi3.json new file mode 100644 index 00000000..27b76451 --- /dev/null +++ b/odata-openapi/examples/key-aliases.openapi3.json @@ -0,0 +1,445 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace key.aliases", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Category{bg:lightslategray}],[Category]++-[EntityInfo],[EntityInfo],[Categories%20{bg:lawngreen}]++-*>[Category])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Categories" + } + ], + "paths": { + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Info/ID", + "Info/ID desc", + "Info/Created", + "Info/Created desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Info", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/key.aliases.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/key.aliases.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/key.aliases.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({EntityInfoID})": { + "parameters": [ + { + "description": "ID within EntityInfo", + "in": "path", + "name": "EntityInfoID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Info", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/key.aliases.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/key.aliases.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "key.aliases.Category": { + "title": "Category", + "type": "object", + "properties": { + "Info": { + "$ref": "#/components/schemas/key.aliases.EntityInfo" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "key.aliases.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "Info": { + "$ref": "#/components/schemas/key.aliases.EntityInfo-create" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "key.aliases.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "Info": { + "$ref": "#/components/schemas/key.aliases.EntityInfo-update" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "key.aliases.EntityInfo": { + "title": "EntityInfo", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32", + "title": "ID within EntityInfo" + }, + "Created": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "key.aliases.EntityInfo-create": { + "title": "EntityInfo (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32", + "title": "ID within EntityInfo" + }, + "Created": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "key.aliases.EntityInfo-update": { + "title": "EntityInfo (for update)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32", + "title": "ID within EntityInfo" + }, + "Created": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/key-aliases.xml b/odata-openapi/examples/key-aliases.xml new file mode 100644 index 00000000..6ab17f67 --- /dev/null +++ b/odata-openapi/examples/key-aliases.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/miscellaneous.openapi3.json b/odata-openapi/examples/miscellaneous.openapi3.json new file mode 100644 index 00000000..6ea1c0f1 --- /dev/null +++ b/odata-openapi/examples/miscellaneous.openapi3.json @@ -0,0 +1,6236 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Examples from Part 3: CSDL", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Measurement],[Example7to11],[Product{bg:lightslategray}],[Product]*-[Category],[Product]-0..1>[Supplier],[Supplier{bg:lightslategray}],[Customer{bg:lightslategray}],[Order{bg:lightslategray}],[Category{bg:lightslategray}],[Employee{bg:lightslategray}],[Employee]-0..1>[Manager],[Employee]^[Manager{bg:lightslategray}],[Manager]-*>[Employee],[Category17{bg:lightslategray}],[Category18{bg:lightslategray}],[Category18]++-[EntityInfo],[EntityInfo],[OrderLine{bg:lightslategray}],[Dimensions],[Product22{bg:lightslategray}],[Product22]++-0..1[Dimensions],[Product22]++-0..1[Dimensions],[ShipmentBox{bg:lightslategray}],[ShipmentBox]++-0..1[Dimensions],[Size],[Size]++-0..1[Length],[Size]++-0..1[Weight],[Product2{bg:lightslategray}],[NullablePrimitiveTypes],[NullablePrimitiveTypes]++-0..1[Color],[NullablePrimitiveTypes]++-0..1[IntegerDecimal],[NonNullablePrimitiveTypes],[NonNullablePrimitiveTypes]++-[Color],[NonNullablePrimitiveTypes]++-[IntegerDecimal],[NonNullablePrimitiveTypes]++-[Text],[Weird{bg:lightslategray}],[Weird]++-[Core.Permission{bg:whitesmoke}],[Weird]++-0..1[Core.Permission{bg:whitesmoke}],[Address],[Address]-0..1>[City],[Address]-0..1>[Region],[Address]-0..1>[Country],[City{bg:lightslategray}],[Region{bg:lightslategray}],[Country{bg:lightslategray}],[Planet{bg:lightslategray}],[NavigationOnly],[NavigationOnly]-0..1>[Planet],[AnnotationOnly],[Order{bg:lightslategray}],[PersonType],[MovieType],[FriendType{bg:lightslategray}],[PersonType]^[DeveloperType],[ScrumTeamType],[ScrumTeamType]++-0..1[DeveloperType],[MovieType]^[ArchivedMovieType],[SomeThingType],[SomeThingType]++-*[PersonType],[SomeThingType]-*>[FriendType],[ChangeTrackingType],[Categories35%20{bg:lawngreen}]++-*>[Category],[Categories34%20{bg:lawngreen}]++-*>[Category],[ProductsByRating{bg:lawngreen}]-*>[Product],[LeaveRequestApproval{bg:lawngreen}],[MainSupplier%20{bg:lawngreen}]++->[Supplier],[Suppliers%20{bg:lawngreen}]++-*>[Supplier],[Categories%20{bg:lawngreen}]++-*>[Category],[Products%20{bg:lawngreen}]++-*>[Product],[TopSellingProducts{bg:lawngreen}]-*>[Product],[Orders%20{bg:lawngreen}]++-*>[Order],[PreferredCustomers%20{bg:lawngreen}]++-*>[Customer],[StandardCustomers%20{bg:lawngreen}]++-*>[Customer])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "StandardCustomers" + }, + { + "name": "PreferredCustomers" + }, + { + "name": "Orders" + }, + { + "name": "Products" + }, + { + "name": "Categories" + }, + { + "name": "Suppliers" + }, + { + "name": "MainSupplier" + }, + { + "name": "Categories34" + }, + { + "name": "Categories35" + } + ], + "paths": { + "/StandardCustomers": { + "get": { + "summary": "Get entities from StandardCustomers", + "tags": [ + "StandardCustomers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to StandardCustomers", + "tags": [ + "StandardCustomers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/StandardCustomers('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from StandardCustomers by key", + "tags": [ + "StandardCustomers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in StandardCustomers", + "tags": [ + "StandardCustomers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Customer-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from StandardCustomers", + "tags": [ + "StandardCustomers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PreferredCustomers": { + "get": { + "summary": "Get entities from PreferredCustomers", + "tags": [ + "PreferredCustomers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Customer", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to PreferredCustomers", + "tags": [ + "PreferredCustomers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PreferredCustomers('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from PreferredCustomers by key", + "tags": [ + "PreferredCustomers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in PreferredCustomers", + "tags": [ + "PreferredCustomers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Customer-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from PreferredCustomers", + "tags": [ + "PreferredCustomers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders": { + "get": { + "summary": "Get entities from Orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Order", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + } + } + ], + "get": { + "summary": "Get entity from Orders by key", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Order-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders", + "tags": [ + "Orders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TopSellingProducts(Year='{Year}')": { + "get": { + "summary": "Return the top-selling products for a given year", + "tags": [ + "Products" + ], + "parameters": [ + { + "required": true, + "description": "Year in form YYYY", + "in": "path", + "name": "Year", + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "maximum": 9999, + "minimum": -9999, + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "description": "The response uses server-driven paging" + } + }, + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "CategoryID", + "CategoryID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "CategoryID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/M1.BestSelling()": { + "get": { + "summary": "Return the best-selling product in the given collection", + "tags": [ + "Products" + ], + "parameters": [], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/M1.Replenish": { + "post": { + "summary": "Replenish stock for products in the given collection", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "CategoryID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products('{ID}')/Category": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products('{ID}')/Supplier": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories('{ID}')/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "CategoryID", + "CategoryID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "CategoryID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories('{ID}')/Products/M1.BestSelling()": { + "get": { + "summary": "Return the best-selling product in the given collection", + "tags": [ + "Categories" + ], + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories('{ID}')/Products/M1.Replenish": { + "post": { + "summary": "Replenish stock for products in the given collection", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Supplier", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/MainSupplier": { + "get": { + "summary": "Get MainSupplier", + "tags": [ + "MainSupplier" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update MainSupplier", + "tags": [ + "MainSupplier" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/LeaveRequestApproval": { + "post": { + "summary": "Invoke action Approval", + "tags": [ + "Service Operations" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductsByRating(Rating='{Rating}')": { + "get": { + "summary": "Invoke function ProductsByRating", + "tags": [ + "Products" + ], + "parameters": [ + { + "required": true, + "in": "path", + "name": "Rating", + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "maximum": 9999, + "minimum": -9999, + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories34": { + "get": { + "summary": "Get entities from Categories34", + "tags": [ + "Categories34" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories34", + "tags": [ + "Categories34" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories34('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Categories34 by key", + "tags": [ + "Categories34" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories34", + "tags": [ + "Categories34" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories34", + "tags": [ + "Categories34" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories34('{ID}')/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories34" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "CategoryID", + "CategoryID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "CategoryID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories34('{ID}')/Products/M1.BestSelling()": { + "get": { + "summary": "Return the best-selling product in the given collection", + "tags": [ + "Categories34" + ], + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories34('{ID}')/Products/M1.Replenish": { + "post": { + "summary": "Replenish stock for products in the given collection", + "tags": [ + "Categories34" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/Categories35": { + "get": { + "summary": "Get entities from Categories35", + "tags": [ + "Categories35" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories35", + "tags": [ + "Categories35" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories35('{ID}')": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Categories35 by key", + "tags": [ + "Categories35" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories35", + "tags": [ + "Categories35" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories35", + "tags": [ + "Categories35" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories35('{ID}')/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories35" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "CategoryID", + "CategoryID desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "CategoryID" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories35('{ID}')/Products/M1.BestSelling()": { + "get": { + "summary": "Return the best-selling product in the given collection", + "tags": [ + "Categories35" + ], + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/org.example.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories35('{ID}')/Products/M1.Replenish": { + "post": { + "summary": "Replenish stock for products in the given collection", + "tags": [ + "Categories35" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET StandardCustomers HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "org.example.Measurement": { + "title": "Measurement", + "type": "object", + "properties": { + "Dimension": { + "type": "string", + "maxLength": 50, + "default": "Unspecified" + }, + "Length": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.01 + } + } + }, + "org.example.Measurement-create": { + "title": "Measurement (for create)", + "type": "object", + "properties": { + "Dimension": { + "type": "string", + "maxLength": 50, + "default": "Unspecified" + }, + "Length": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.01 + } + } + }, + "org.example.Measurement-update": { + "title": "Measurement (for update)", + "type": "object", + "properties": { + "Dimension": { + "type": "string", + "maxLength": 50, + "default": "Unspecified" + }, + "Length": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.01 + } + } + }, + "org.example.Example7to11": { + "title": "Example7to11", + "type": "object", + "properties": { + "Units": { + "type": "array", + "items": { + "type": "string" + } + }, + "SuggestedTimes": { + "type": "array", + "items": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04.000000Z" + } + }, + "Amount9": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.01, + "maximum": 9.99, + "minimum": -9.99, + "nullable": true + }, + "Amount11": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "maximum": 999, + "minimum": -999, + "nullable": true + } + } + }, + "org.example.Example7to11-create": { + "title": "Example7to11 (for create)", + "type": "object", + "properties": { + "Units": { + "type": "array", + "items": { + "type": "string" + } + }, + "SuggestedTimes": { + "type": "array", + "items": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04.000000Z" + } + }, + "Amount9": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.01, + "maximum": 9.99, + "minimum": -9.99, + "nullable": true + }, + "Amount11": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "maximum": 999, + "minimum": -999, + "nullable": true + } + } + }, + "org.example.Example7to11-update": { + "title": "Example7to11 (for update)", + "type": "object", + "properties": { + "Units": { + "type": "array", + "items": { + "type": "string" + } + }, + "SuggestedTimes": { + "type": "array", + "items": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04.000000Z" + } + }, + "Amount9": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.01, + "maximum": 9.99, + "minimum": -9.99, + "nullable": true + }, + "Amount11": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "maximum": 999, + "minimum": -999, + "nullable": true + } + } + }, + "org.example.Product": { + "title": "Product", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "CategoryID": { + "type": "string" + }, + "Category": { + "$ref": "#/components/schemas/org.example.Category" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Supplier" + } + ], + "nullable": true + } + } + }, + "org.example.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "CategoryID": { + "type": "string" + }, + "Category": { + "$ref": "#/components/schemas/org.example.Category-create" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Supplier-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "org.example.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "CategoryID": { + "type": "string" + } + } + }, + "org.example.Supplier": { + "title": "Supplier", + "type": "object", + "properties": { + "ID": { + "type": "string" + } + } + }, + "org.example.Supplier-create": { + "title": "Supplier (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + } + }, + "required": [ + "ID" + ] + }, + "org.example.Supplier-update": { + "title": "Supplier (for update)", + "type": "object" + }, + "org.example.Customer": { + "title": "Customer", + "type": "object", + "properties": { + "ID": { + "type": "string" + } + } + }, + "org.example.Customer-create": { + "title": "Customer (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + } + }, + "required": [ + "ID" + ] + }, + "org.example.Customer-update": { + "title": "Customer (for update)", + "type": "object" + }, + "org.example.Order": { + "title": "Order", + "type": "object", + "properties": { + "ID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + } + } + }, + "org.example.Order-create": { + "title": "Order (for create)", + "type": "object", + "properties": { + "ID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + } + }, + "required": [ + "ID" + ] + }, + "org.example.Order-update": { + "title": "Order (for update)", + "type": "object" + }, + "org.example.Category": { + "title": "Category", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Product" + } + }, + "Products@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "org.example.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Product-create" + } + } + }, + "required": [ + "ID" + ] + }, + "org.example.Category-update": { + "title": "Category (for update)", + "type": "object" + }, + "org.example.Employee": { + "title": "Employee", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Manager": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Manager" + } + ], + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Manager" + }, + {} + ] + }, + "org.example.Employee-create": { + "title": "Employee (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Manager": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Manager-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Manager-create" + }, + {} + ] + }, + "org.example.Employee-update": { + "title": "Employee (for update)", + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Manager-update" + }, + {} + ] + }, + "org.example.Manager": { + "title": "Manager", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Manager": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Manager" + } + ], + "nullable": true + }, + "AnnualBudget": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "nullable": true + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Employee" + } + }, + "Employees@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "org.example.Manager-create": { + "title": "Manager (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Manager": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Manager-create" + } + ], + "nullable": true + }, + "AnnualBudget": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "nullable": true + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/org.example.Employee-create" + } + } + }, + "required": [ + "ID" + ] + }, + "org.example.Manager-update": { + "title": "Manager (for update)", + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "AnnualBudget": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "nullable": true + } + } + }, + "org.example.Category17": { + "title": "Category17", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "org.example.Category17-create": { + "title": "Category17 (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "org.example.Category17-update": { + "title": "Category17 (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + } + }, + "org.example.Category18": { + "title": "Category18", + "type": "object", + "properties": { + "Info": { + "$ref": "#/components/schemas/org.example.EntityInfo" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "org.example.Category18-create": { + "title": "Category18 (for create)", + "type": "object", + "properties": { + "Info": { + "$ref": "#/components/schemas/org.example.EntityInfo-create" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "org.example.Category18-update": { + "title": "Category18 (for update)", + "type": "object", + "properties": { + "Info": { + "$ref": "#/components/schemas/org.example.EntityInfo-update" + }, + "Name": { + "type": "string", + "nullable": true + } + } + }, + "org.example.EntityInfo": { + "title": "EntityInfo", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Created": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "org.example.EntityInfo-create": { + "title": "EntityInfo (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Created": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "org.example.EntityInfo-update": { + "title": "EntityInfo (for update)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Created": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + } + } + }, + "org.example.OrderLine": { + "title": "OrderLine", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "LineNumber": { + "type": "integer", + "format": "int32" + } + } + }, + "org.example.OrderLine-create": { + "title": "OrderLine (for create)", + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "LineNumber": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "OrderID", + "LineNumber" + ] + }, + "org.example.OrderLine-update": { + "title": "OrderLine (for update)", + "type": "object" + }, + "org.example.Dimensions": { + "title": "Dimensions", + "type": "object", + "properties": { + "Height": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Weight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Length": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "org.example.Dimensions-create": { + "title": "Dimensions (for create)", + "type": "object", + "properties": { + "Height": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Weight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Length": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "org.example.Dimensions-update": { + "title": "Dimensions (for update)", + "type": "object", + "properties": { + "Height": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Weight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + }, + "Length": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "org.example.Product22": { + "title": "Product22", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "ProductDimensions": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Dimensions" + } + ], + "nullable": true + }, + "ShippingDimensions": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Dimensions" + } + ], + "nullable": true + } + } + }, + "org.example.Product22-create": { + "title": "Product22 (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "ProductDimensions": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Dimensions-create" + } + ], + "nullable": true + }, + "ShippingDimensions": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Dimensions-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "org.example.Product22-update": { + "title": "Product22 (for update)", + "type": "object", + "properties": { + "ProductDimensions": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Dimensions-update" + } + ], + "nullable": true + }, + "ShippingDimensions": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Dimensions-update" + } + ], + "nullable": true + } + } + }, + "org.example.ShipmentBox": { + "title": "ShipmentBox", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Dimensions": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Dimensions" + } + ], + "nullable": true + } + } + }, + "org.example.ShipmentBox-create": { + "title": "ShipmentBox (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Dimensions": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Dimensions-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "org.example.ShipmentBox-update": { + "title": "ShipmentBox (for update)", + "type": "object", + "properties": { + "Dimensions": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Dimensions-update" + } + ], + "nullable": true + } + } + }, + "org.example.FileAccess": { + "type": "string", + "title": "FileAccess", + "enum": [ + "Read", + "Write", + "Create", + "Delete" + ] + }, + "org.example.ShippingMethod": { + "type": "string", + "title": "Method of shipping", + "enum": [ + "FirstClass", + "TwoDay", + "Overnight" + ] + }, + "org.example.Pattern": { + "type": "string", + "title": "Pattern", + "enum": [ + "Plain", + "Red", + "Blue", + "Yellow", + "Solid", + "Striped", + "SolidRed", + "SolidBlue", + "SolidYellow", + "RedBlueStriped", + "RedYellowStriped", + "BlueYellowStriped" + ] + }, + "org.example.Length": { + "type": "integer", + "format": "int32", + "title": "Length" + }, + "org.example.Weight": { + "type": "integer", + "format": "int32", + "title": "Weight" + }, + "org.example.Size": { + "title": "Size", + "type": "object", + "properties": { + "Height": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Length" + } + ], + "nullable": true + }, + "Weight": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Weight" + } + ], + "nullable": true + } + } + }, + "org.example.Size-create": { + "title": "Size (for create)", + "type": "object", + "properties": { + "Height": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Length" + } + ], + "nullable": true + }, + "Weight": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Weight" + } + ], + "nullable": true + } + } + }, + "org.example.Size-update": { + "title": "Size (for update)", + "type": "object", + "properties": { + "Height": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Length" + } + ], + "nullable": true + }, + "Weight": { + "anyOf": [ + { + "$ref": "#/components/schemas/org.example.Weight" + } + ], + "nullable": true + } + } + }, + "org.example.Product2": { + "title": "Product2", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + } + } + }, + "org.example.Product2-create": { + "title": "Product2 (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "org.example.Product2-update": { + "title": "Product2 (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + } + } + }, + "Model1.NullablePrimitiveTypes": { + "title": "NullablePrimitiveTypes", + "type": "object", + "properties": { + "NullValue": { + "type": "boolean", + "nullable": true, + "default": null + }, + "TrueValue": { + "type": "boolean", + "nullable": true, + "default": true + }, + "FalseValue": { + "type": "boolean", + "nullable": true, + "default": false + }, + "BinaryValue": { + "type": "string", + "format": "base64url", + "maxLength": 42, + "nullable": true, + "default": "T0RhdGE" + }, + "IntegerValue": { + "type": "integer", + "format": "int32", + "nullable": true, + "default": -128 + }, + "DoubleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14, + "nullable": true, + "default": 3.141592653589793 + }, + "SingleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14, + "nullable": true + }, + "DecimalValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "nullable": true, + "default": 34.95 + }, + "StringValue": { + "type": "string", + "nullable": true, + "default": "Say \"Hello\",\nthen go" + }, + "DateValue": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true, + "default": "2012-12-03" + }, + "DateTimeOffsetValue": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true, + "default": "2012-12-03T07:16:23Z" + }, + "DurationValue": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true, + "default": "P12DT23H59M59.999999999999S" + }, + "TimeOfDayValue": { + "type": "string", + "format": "time", + "example": "15:51:04", + "nullable": true, + "default": "07:59:59.999" + }, + "GuidValue": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, + "default": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Int64Value": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42", + "nullable": true, + "default": 0 + }, + "ColorEnumValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Color" + } + ], + "nullable": true, + "default": "yellow" + }, + "GeographyPoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true, + "default": "SRID=0;Point(142.1 64.1)" + }, + "StreamValue": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "TypeDefValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.IntegerDecimal" + } + ], + "nullable": true, + "default": 42 + }, + "PrimitiveValue": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true + } + } + }, + "Model1.NullablePrimitiveTypes-create": { + "title": "NullablePrimitiveTypes (for create)", + "type": "object", + "properties": { + "NullValue": { + "type": "boolean", + "nullable": true, + "default": null + }, + "TrueValue": { + "type": "boolean", + "nullable": true, + "default": true + }, + "FalseValue": { + "type": "boolean", + "nullable": true, + "default": false + }, + "BinaryValue": { + "type": "string", + "format": "base64url", + "maxLength": 42, + "nullable": true, + "default": "T0RhdGE" + }, + "IntegerValue": { + "type": "integer", + "format": "int32", + "nullable": true, + "default": -128 + }, + "DoubleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14, + "nullable": true, + "default": 3.141592653589793 + }, + "SingleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14, + "nullable": true + }, + "DecimalValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "nullable": true, + "default": 34.95 + }, + "StringValue": { + "type": "string", + "nullable": true, + "default": "Say \"Hello\",\nthen go" + }, + "DateValue": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true, + "default": "2012-12-03" + }, + "DateTimeOffsetValue": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true, + "default": "2012-12-03T07:16:23Z" + }, + "DurationValue": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true, + "default": "P12DT23H59M59.999999999999S" + }, + "TimeOfDayValue": { + "type": "string", + "format": "time", + "example": "15:51:04", + "nullable": true, + "default": "07:59:59.999" + }, + "GuidValue": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, + "default": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Int64Value": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42", + "nullable": true, + "default": 0 + }, + "ColorEnumValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Color" + } + ], + "nullable": true, + "default": "yellow" + }, + "GeographyPoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true, + "default": "SRID=0;Point(142.1 64.1)" + }, + "StreamValue": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "TypeDefValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.IntegerDecimal" + } + ], + "nullable": true, + "default": 42 + }, + "PrimitiveValue": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true + } + } + }, + "Model1.NullablePrimitiveTypes-update": { + "title": "NullablePrimitiveTypes (for update)", + "type": "object", + "properties": { + "NullValue": { + "type": "boolean", + "nullable": true, + "default": null + }, + "TrueValue": { + "type": "boolean", + "nullable": true, + "default": true + }, + "FalseValue": { + "type": "boolean", + "nullable": true, + "default": false + }, + "BinaryValue": { + "type": "string", + "format": "base64url", + "maxLength": 42, + "nullable": true, + "default": "T0RhdGE" + }, + "IntegerValue": { + "type": "integer", + "format": "int32", + "nullable": true, + "default": -128 + }, + "DoubleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14, + "nullable": true, + "default": 3.141592653589793 + }, + "SingleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14, + "nullable": true + }, + "DecimalValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "nullable": true, + "default": 34.95 + }, + "StringValue": { + "type": "string", + "nullable": true, + "default": "Say \"Hello\",\nthen go" + }, + "DateValue": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true, + "default": "2012-12-03" + }, + "DateTimeOffsetValue": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true, + "default": "2012-12-03T07:16:23Z" + }, + "DurationValue": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "nullable": true, + "default": "P12DT23H59M59.999999999999S" + }, + "TimeOfDayValue": { + "type": "string", + "format": "time", + "example": "15:51:04", + "nullable": true, + "default": "07:59:59.999" + }, + "GuidValue": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "nullable": true, + "default": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Int64Value": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42", + "nullable": true, + "default": 0 + }, + "ColorEnumValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Color" + } + ], + "nullable": true, + "default": "yellow" + }, + "GeographyPoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true, + "default": "SRID=0;Point(142.1 64.1)" + }, + "StreamValue": { + "type": "string", + "format": "base64url", + "nullable": true + }, + "TypeDefValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.IntegerDecimal" + } + ], + "nullable": true, + "default": 42 + }, + "PrimitiveValue": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true + } + } + }, + "Model1.NonNullablePrimitiveTypes": { + "title": "NonNullablePrimitiveTypes", + "type": "object", + "properties": { + "NullValue": { + "type": "boolean", + "default": null + }, + "TrueValue": { + "type": "boolean", + "default": true + }, + "FalseValue": { + "type": "boolean", + "default": false + }, + "BinaryValue": { + "type": "string", + "format": "base64url", + "maxLength": 42, + "default": "T0RhdGE" + }, + "IntegerValue": { + "type": "integer", + "format": "int32", + "default": -128 + }, + "DoubleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14, + "default": 3.141592653589793 + }, + "SingleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14, + "default": "-INF" + }, + "DecimalValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "default": 34.95 + }, + "StringValue": { + "type": "string", + "default": "Say \"Hello\",\nthen go" + }, + "DateValue": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "default": "2012-12-03" + }, + "DateTimeOffsetValue": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "default": "2012-12-03T07:16:23Z" + }, + "DurationValue": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "default": "P12DT23H59M59.999999999999S" + }, + "TimeOfDayValue": { + "type": "string", + "format": "time", + "example": "15:51:04", + "default": "07:59:59.999" + }, + "GuidValue": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "default": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Int64Value": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42", + "default": 0 + }, + "ColorEnumValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Color" + } + ], + "default": "yellow" + }, + "GeographyPoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "default": "SRID=0;Point(142.1 64.1)" + }, + "StreamValue": { + "type": "string", + "format": "base64url" + }, + "TypeDefValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.IntegerDecimal" + } + ], + "default": 42 + }, + "TextValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Text" + } + ], + "maxLength": 60, + "default": 42 + }, + "PrimitiveValue": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + } + } + }, + "Model1.NonNullablePrimitiveTypes-create": { + "title": "NonNullablePrimitiveTypes (for create)", + "type": "object", + "properties": { + "NullValue": { + "type": "boolean", + "default": null + }, + "TrueValue": { + "type": "boolean", + "default": true + }, + "FalseValue": { + "type": "boolean", + "default": false + }, + "BinaryValue": { + "type": "string", + "format": "base64url", + "maxLength": 42, + "default": "T0RhdGE" + }, + "IntegerValue": { + "type": "integer", + "format": "int32", + "default": -128 + }, + "DoubleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14, + "default": 3.141592653589793 + }, + "SingleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14, + "default": "-INF" + }, + "DecimalValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "default": 34.95 + }, + "StringValue": { + "type": "string", + "default": "Say \"Hello\",\nthen go" + }, + "DateValue": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "default": "2012-12-03" + }, + "DateTimeOffsetValue": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "default": "2012-12-03T07:16:23Z" + }, + "DurationValue": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "default": "P12DT23H59M59.999999999999S" + }, + "TimeOfDayValue": { + "type": "string", + "format": "time", + "example": "15:51:04", + "default": "07:59:59.999" + }, + "GuidValue": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "default": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Int64Value": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42", + "default": 0 + }, + "ColorEnumValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Color" + } + ], + "default": "yellow" + }, + "GeographyPoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "default": "SRID=0;Point(142.1 64.1)" + }, + "StreamValue": { + "type": "string", + "format": "base64url" + }, + "TypeDefValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.IntegerDecimal" + } + ], + "default": 42 + }, + "TextValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Text" + } + ], + "maxLength": 60, + "default": 42 + }, + "PrimitiveValue": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + } + } + }, + "Model1.NonNullablePrimitiveTypes-update": { + "title": "NonNullablePrimitiveTypes (for update)", + "type": "object", + "properties": { + "NullValue": { + "type": "boolean", + "default": null + }, + "TrueValue": { + "type": "boolean", + "default": true + }, + "FalseValue": { + "type": "boolean", + "default": false + }, + "BinaryValue": { + "type": "string", + "format": "base64url", + "maxLength": 42, + "default": "T0RhdGE" + }, + "IntegerValue": { + "type": "integer", + "format": "int32", + "default": -128 + }, + "DoubleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14, + "default": 3.141592653589793 + }, + "SingleValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14, + "default": "-INF" + }, + "DecimalValue": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "default": 34.95 + }, + "StringValue": { + "type": "string", + "default": "Say \"Hello\",\nthen go" + }, + "DateValue": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "default": "2012-12-03" + }, + "DateTimeOffsetValue": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "default": "2012-12-03T07:16:23Z" + }, + "DurationValue": { + "type": "string", + "format": "duration", + "example": "P4DT15H51M04S", + "default": "P12DT23H59M59.999999999999S" + }, + "TimeOfDayValue": { + "type": "string", + "format": "time", + "example": "15:51:04", + "default": "07:59:59.999" + }, + "GuidValue": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "default": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Int64Value": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42", + "default": 0 + }, + "ColorEnumValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Color" + } + ], + "default": "yellow" + }, + "GeographyPoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "default": "SRID=0;Point(142.1 64.1)" + }, + "StreamValue": { + "type": "string", + "format": "base64url" + }, + "TypeDefValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.IntegerDecimal" + } + ], + "default": 42 + }, + "TextValue": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Text" + } + ], + "maxLength": 60, + "default": 42 + }, + "PrimitiveValue": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + } + } + }, + "Model1.Size": { + "type": "string", + "title": "T-Shirt Size", + "enum": [ + "S", + "M", + "L" + ], + "description": "Size, expressed with letters familiar from e.g. T-Shirt sizes" + }, + "Model1.Color": { + "type": "string", + "title": "Color", + "enum": [ + "Yellow", + "Striped" + ] + }, + "Model1.Weird": { + "title": "Weird", + "type": "object", + "properties": { + "TheKey": { + "type": "string", + "pattern": ".+" + }, + "TheValue": { + "type": "string", + "nullable": true + }, + "TheString": { + "type": "string", + "maxLength": 20, + "enum": [ + "success", + "info", + "warning", + "error" + ], + "nullable": true + }, + "Tags": { + "type": "array", + "items": { + "type": "string", + "nullable": true + } + }, + "Dates": { + "type": "array", + "items": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + } + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.001, + "maximum": 999999999999.999, + "minimum": 0, + "nullable": true + }, + "Quantity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.001, + "maximum": 999999999999.999, + "minimum": 0, + "nullable": true, + "exclusiveMinimum": true + }, + "PercentComplete": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "maximum": 100, + "minimum": 0, + "nullable": true + }, + "PercentOfLightSpeed": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "nullable": true, + "maximum": 100, + "exclusiveMaximum": true, + "minimum": 0 + }, + "Permission": { + "$ref": "/vocabularies/Org.OData.Core.V1.openapi3.json#/components/schemas/Org.OData.Core.V1.Permission" + }, + "AliasPermission": { + "anyOf": [ + { + "$ref": "/vocabularies/Org.OData.Core.V1.openapi3.json#/components/schemas/Org.OData.Core.V1.Permission" + } + ], + "nullable": true + } + } + }, + "Model1.Weird-create": { + "title": "Weird (for create)", + "type": "object", + "properties": { + "TheKey": { + "type": "string", + "pattern": ".+" + }, + "TheValue": { + "type": "string", + "nullable": true + }, + "TheString": { + "type": "string", + "maxLength": 20, + "enum": [ + "success", + "info", + "warning", + "error" + ], + "nullable": true + }, + "Tags": { + "type": "array", + "items": { + "type": "string", + "nullable": true + } + }, + "Dates": { + "type": "array", + "items": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + } + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.001, + "maximum": 999999999999.999, + "minimum": 0, + "nullable": true + }, + "Quantity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.001, + "maximum": 999999999999.999, + "minimum": 0, + "nullable": true, + "exclusiveMinimum": true + }, + "PercentComplete": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "maximum": 100, + "minimum": 0, + "nullable": true + }, + "PercentOfLightSpeed": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "nullable": true, + "maximum": 100, + "exclusiveMaximum": true, + "minimum": 0 + }, + "Permission": { + "$ref": "/vocabularies/Org.OData.Core.V1.openapi3.json#/components/schemas/Org.OData.Core.V1.Permission" + }, + "AliasPermission": { + "anyOf": [ + { + "$ref": "/vocabularies/Org.OData.Core.V1.openapi3.json#/components/schemas/Org.OData.Core.V1.Permission" + } + ], + "nullable": true + } + }, + "required": [ + "TheKey" + ] + }, + "Model1.Weird-update": { + "title": "Weird (for update)", + "type": "object", + "properties": { + "TheValue": { + "type": "string", + "nullable": true + }, + "TheString": { + "type": "string", + "maxLength": 20, + "enum": [ + "success", + "info", + "warning", + "error" + ], + "nullable": true + }, + "Tags": { + "type": "array", + "items": { + "type": "string", + "nullable": true + } + }, + "Dates": { + "type": "array", + "items": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + } + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.001, + "maximum": 999999999999.999, + "minimum": 0, + "nullable": true + }, + "Quantity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 0.001, + "maximum": 999999999999.999, + "minimum": 0, + "nullable": true, + "exclusiveMinimum": true + }, + "PercentComplete": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "maximum": 100, + "minimum": 0, + "nullable": true + }, + "PercentOfLightSpeed": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "nullable": true, + "maximum": 100, + "exclusiveMaximum": true, + "minimum": 0 + }, + "Permission": { + "$ref": "/vocabularies/Org.OData.Core.V1.openapi3.json#/components/schemas/Org.OData.Core.V1.Permission" + }, + "AliasPermission": { + "anyOf": [ + { + "$ref": "/vocabularies/Org.OData.Core.V1.openapi3.json#/components/schemas/Org.OData.Core.V1.Permission" + } + ], + "nullable": true + } + } + }, + "Model1.Address": { + "title": "Address", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.City" + } + ], + "nullable": true + }, + "Region": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Region" + } + ], + "nullable": true + }, + "Country": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Country" + } + ], + "nullable": true + }, + "MapLocation": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Numbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int16" + } + } + } + }, + "Model1.Address-create": { + "title": "Address (for create)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.City-create" + } + ], + "nullable": true + }, + "Region": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Region-create" + } + ], + "nullable": true + }, + "Country": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Country-create" + } + ], + "nullable": true + }, + "MapLocation": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Numbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int16" + } + } + } + }, + "Model1.Address-update": { + "title": "Address (for update)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "MapLocation": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Numbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int16" + } + } + } + }, + "Model1.City": { + "title": "City", + "type": "object" + }, + "Model1.City-create": { + "title": "City (for create)", + "type": "object" + }, + "Model1.City-update": { + "title": "City (for update)", + "type": "object" + }, + "Model1.Region": { + "title": "Region", + "type": "object" + }, + "Model1.Region-create": { + "title": "Region (for create)", + "type": "object" + }, + "Model1.Region-update": { + "title": "Region (for update)", + "type": "object" + }, + "Model1.Country": { + "title": "Country", + "type": "object" + }, + "Model1.Country-create": { + "title": "Country (for create)", + "type": "object" + }, + "Model1.Country-update": { + "title": "Country (for update)", + "type": "object" + }, + "Model1.Planet": { + "title": "Planet", + "type": "object" + }, + "Model1.Planet-create": { + "title": "Planet (for create)", + "type": "object" + }, + "Model1.Planet-update": { + "title": "Planet (for update)", + "type": "object" + }, + "Model1.NavigationOnly": { + "title": "NavigationOnly", + "type": "object", + "properties": { + "Planet": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Planet" + } + ], + "nullable": true + } + } + }, + "Model1.NavigationOnly-create": { + "title": "NavigationOnly (for create)", + "type": "object", + "properties": { + "Planet": { + "anyOf": [ + { + "$ref": "#/components/schemas/Model1.Planet-create" + } + ], + "nullable": true + } + } + }, + "Model1.NavigationOnly-update": { + "title": "NavigationOnly (for update)", + "type": "object" + }, + "Model1.AnnotationOnly": { + "title": "AnnotationOnly", + "type": "object" + }, + "Model1.AnnotationOnly-create": { + "title": "AnnotationOnly (for create)", + "type": "object" + }, + "Model1.AnnotationOnly-update": { + "title": "AnnotationOnly (for update)", + "type": "object" + }, + "Model1.Order": { + "title": "Order", + "type": "object", + "properties": { + "Quantity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "nullable": true + }, + "ShippingUnit": { + "type": "string", + "nullable": true, + "title": "Contains the unit for property Quantity" + } + } + }, + "Model1.Order-create": { + "title": "Order (for create)", + "type": "object", + "properties": { + "Quantity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "nullable": true + }, + "ShippingUnit": { + "type": "string", + "nullable": true, + "title": "Contains the unit for property Quantity" + } + } + }, + "Model1.Order-update": { + "title": "Order (for update)", + "type": "object", + "properties": { + "Quantity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "nullable": true + }, + "ShippingUnit": { + "type": "string", + "nullable": true, + "title": "Contains the unit for property Quantity" + } + } + }, + "Model1.SpecialByte": { + "type": "integer", + "format": "uint8", + "title": "SpecialByte" + }, + "Model1.Text50": { + "type": "string", + "maxLength": 50, + "title": "Text50" + }, + "Model1.Text": { + "type": "string", + "title": "Text" + }, + "Model1.LanguageDependentText": { + "type": "string", + "title": "LanguageDependentText" + }, + "Model1.IntegerDecimal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "title": "A decimal without fractional part" + }, + "Model1.IntegerDecimal10": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1, + "maximum": 9999999999, + "minimum": -9999999999, + "title": "A ten-digit integer" + }, + "Model1.VariableDecimal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "title": "A floating decimal" + }, + "Model1.ExactTimestamp": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04.000000000000Z", + "title": "ExactTimestamp" + }, + "X.PersonType": { + "title": "PersonType", + "type": "object", + "anyOf": [ + { + "$ref": "#/components/schemas/Y.DeveloperType" + }, + {} + ] + }, + "X.PersonType-create": { + "title": "PersonType (for create)", + "type": "object", + "anyOf": [ + { + "$ref": "#/components/schemas/Y.DeveloperType-create" + }, + {} + ] + }, + "X.PersonType-update": { + "title": "PersonType (for update)", + "type": "object", + "anyOf": [ + { + "$ref": "#/components/schemas/Y.DeveloperType-update" + }, + {} + ] + }, + "X.MovieType": { + "title": "MovieType", + "type": "object", + "anyOf": [ + { + "$ref": "#/components/schemas/Y.ArchivedMovieType" + }, + {} + ] + }, + "X.MovieType-create": { + "title": "MovieType (for create)", + "type": "object", + "anyOf": [ + { + "$ref": "#/components/schemas/Y.ArchivedMovieType-create" + }, + {} + ] + }, + "X.MovieType-update": { + "title": "MovieType (for update)", + "type": "object", + "anyOf": [ + { + "$ref": "#/components/schemas/Y.ArchivedMovieType-update" + }, + {} + ] + }, + "X.FriendType": { + "title": "FriendType", + "type": "object" + }, + "X.FriendType-create": { + "title": "FriendType (for create)", + "type": "object" + }, + "X.FriendType-update": { + "title": "FriendType (for update)", + "type": "object" + }, + "Y.DeveloperType": { + "title": "DeveloperType", + "type": "object" + }, + "Y.DeveloperType-create": { + "title": "DeveloperType (for create)", + "type": "object" + }, + "Y.DeveloperType-update": { + "title": "DeveloperType (for update)", + "type": "object" + }, + "Y.ScrumTeamType": { + "title": "ScrumTeamType", + "type": "object", + "properties": { + "ScrumMaster": { + "anyOf": [ + { + "$ref": "#/components/schemas/Y.DeveloperType" + } + ], + "nullable": true + } + } + }, + "Y.ScrumTeamType-create": { + "title": "ScrumTeamType (for create)", + "type": "object", + "properties": { + "ScrumMaster": { + "anyOf": [ + { + "$ref": "#/components/schemas/Y.DeveloperType-create" + } + ], + "nullable": true + } + } + }, + "Y.ScrumTeamType-update": { + "title": "ScrumTeamType (for update)", + "type": "object", + "properties": { + "ScrumMaster": { + "anyOf": [ + { + "$ref": "#/components/schemas/Y.DeveloperType-update" + } + ], + "nullable": true + } + } + }, + "Y.ArchivedMovieType": { + "title": "ArchivedMovieType", + "type": "object", + "properties": { + "ArchivedAt": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + } + } + }, + "Y.ArchivedMovieType-create": { + "title": "ArchivedMovieType (for create)", + "type": "object", + "properties": { + "ArchivedAt": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + } + } + }, + "Y.ArchivedMovieType-update": { + "title": "ArchivedMovieType (for update)", + "type": "object", + "properties": { + "ArchivedAt": { + "type": "string", + "format": "date", + "example": "2017-04-13", + "nullable": true + } + } + }, + "Y.SomeThingType": { + "title": "SomeThingType", + "type": "object", + "properties": { + "SomeProperty": { + "type": "string", + "nullable": true + }, + "Contacts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/X.PersonType" + } + }, + "VIPs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/X.FriendType" + } + }, + "VIPs@odata.count": { + "$ref": "#/components/schemas/count" + } + } + }, + "Y.SomeThingType-create": { + "title": "SomeThingType (for create)", + "type": "object", + "properties": { + "SomeProperty": { + "type": "string", + "nullable": true + }, + "Contacts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/X.PersonType-create" + } + }, + "VIPs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/X.FriendType-create" + } + } + } + }, + "Y.SomeThingType-update": { + "title": "SomeThingType (for update)", + "type": "object", + "properties": { + "SomeProperty": { + "type": "string", + "nullable": true + }, + "Contacts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/X.PersonType-update" + } + } + } + }, + "Y.ChangeTrackingType": { + "title": "ChangeTrackingType", + "type": "object", + "properties": { + "InlineableStreamProperties": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Change tracking supports inlining these stream properties" + } + } + }, + "Y.ChangeTrackingType-create": { + "title": "ChangeTrackingType (for create)", + "type": "object", + "properties": { + "InlineableStreamProperties": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Change tracking supports inlining these stream properties" + } + } + }, + "Y.ChangeTrackingType-update": { + "title": "ChangeTrackingType (for update)", + "type": "object", + "properties": { + "InlineableStreamProperties": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Change tracking supports inlining these stream properties" + } + } + }, + "geoPoint": { + "type": "object", + "properties": { + "coordinates": { + "$ref": "#/components/schemas/geoPosition" + }, + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/miscellaneous.xml b/odata-openapi/examples/miscellaneous.xml new file mode 100644 index 00000000..53c3a906 --- /dev/null +++ b/odata-openapi/examples/miscellaneous.xml @@ -0,0 +1,1114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Supplier Directory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Products( + ID + ) + + + + + + + + + Properties and terms annotated with this term MUST contain a valid URL + + + + + + + + + + + + + + T0RhdGE + + + + + true + + + + + 2000-01-01 + + + + + 2000-01-01T16:00:00.000-09:00 + + + + + 3.14 + + + + + P11DT23H59M59.999999999999S + + + + + org.example.Pattern/Red + + + + + org.example.Pattern/Red org.example.Pattern/Striped + + + + + 3.14 + + + + + 21EC2020-3AEA-1069-A2DD-08002B30309D + + + + + 42 + + + + + Product Catalog + + + + + 21:45:00 + + + + + + IsMale + IsMarried + + + IsMale + IsMarried + + + IsMale + + + + IsMale + + + + IsMale + + + Price + 20 + + + Price + 10 + + + Price + 20 + + + Price + 100 + + + + + + + + Supplier/@Communication.Contact + Customer/@Communication.Contact + + + + + + Product: + ProductName + ( + Available/Quantity + + Available/Unit + available) + + + + + + http://host/someAPI/Actors/{actorName}/CV + + + + + + + http://host/service/Genres({genreName}) + + + NameOfMovieGenre + + + + + + + + Average + + + + + + Product + Supplier + Customer + + + + + + IsFemale + Female + Male + + + + + + Customer + + + + + + + + + FirstName + + + + + Model.CustomerFirstName + + + + + + + + + + + + + + + + + Supplier + Category + + + + + + + + @vCard.Address#work/FullName + + + + + + + + CreatedAt + ChangedAt + + + + + + + + + + + + + + http://host/anotherservice/CostCenters('{ccid}') + + + + + + + + + + + http://host/service/Suppliers({suppID}) + + + SupplierId + + + + + + + + http://host/wiki/HowToUse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1234 + + + + + + + + + + + 1.23456789e4 + + + + + + + A/"good" story\for kids + + + + 86a96539-871b-45cf-b96b-93dbc235105e + + + + + + + + Supplier + Category + + + + + + + + + + + + Products( + ID + ) + + + + + + + + IsFemale + Female + Male + + + + + Supplier/@Communication.Contact + Customer/@Communication.Contact + + + + + + + + + + + + + + + + + + + + + + + + + + + INF + + + + + + + + true + Then + + + + + false + Then + Else + + + + + + + + + + + + + + + + + + + + + + Hugo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SomeString + MyAddress/vCard.Address#work/Street + + Model1.Attribute + + Hello + + Model1.Element + + + + + + + + + + + + + + + + Model1.Record + + + + + http://www.odata.org + + + + + + + http://host/service/Suppliers({suppID}) + + + SupplierId + 2013-04-08T23:00:00.0Z + + + + + + + + Product Catalog + + + + + 3.14 + + + + + Customer/$count + + + + + + + + HugoHase-_ab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SomeCollectionNavProp/@Y.Developer + + + + + + + + + + + + + + + + + + + + + + + + + AllMyMovies + + + + + AllMyMovies + + + + + + + + + + + + + MoviesInStorage + + + + + + + + + + + + + + + + + + A string with spaces + + + + P20D + + + + MyContacts + + + + MyBestFriends + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/examples/odata-definitions.json b/odata-openapi/examples/odata-definitions.json new file mode 100644 index 00000000..de13199e --- /dev/null +++ b/odata-openapi/examples/odata-definitions.json @@ -0,0 +1,377 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "description": "OData OpenAPI Definitions", + "definitions": { + "Edm.ComplexType": { + "type": "object" + }, + "Edm.EntityType": { + "type": "object" + }, + "Edm.PrimitiveType": { + "type": [ + "boolean", + "number", + "string" + ] + }, + "Edm.AnnotationPath": { + "type": "string" + }, + "Edm.NavigationPropertyPath": { + "type": "string" + }, + "Edm.PropertyPath": { + "type": "string" + }, + "Edm.Binary": { + "type": "string", + "format": "base64url", + "pattern": "^([A-Za-z0-9_-]{4})*([A-Za-z0-9_-]{3}[A-Za-z0-9_-]|[A-Za-z0-9_-]{2}[AEIMQUYcgkosw048]=?|[A-Za-z0-9_-][AQgw](==)?)?$" + }, + "Edm.Byte": { + "type": "integer", + "format": "uint8", + "minimum": 0, + "maximum": 255 + }, + "Edm.Date": { + "type": "string", + "format": "date", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" + }, + "Edm.DateTimeOffset": { + "type": "string", + "format": "date-time", + "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$" + }, + "Edm.Double": { + "anyOf": [ + { + "type": "number", + "format": "double" + }, + { + "enum": [ + "-INF", + "INF", + "NaN" + ] + } + ] + }, + "Edm.Duration": { + "type": "string", + "format": "duration", + "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$" + }, + "Edm.Guid": { + "type": "string", + "format": "uuid", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" + }, + "Edm.Int16": { + "type": "integer", + "format": "int16", + "minimum": -32768, + "maximum": 32767 + }, + "Edm.Int32": { + "type": "integer", + "format": "int32", + "minimum": -2147483648, + "maximum": 2147483647 + }, + "Edm.Int64": { + "type": "integer", + "format": "int64", + "minimum": -9223372036854775808, + "maximum": 9223372036854775807 + }, + "Edm.SByte": { + "type": "integer", + "format": "int8", + "minimum": -128, + "maximum": 127 + }, + "Edm.Single": { + "anyOf": [ + { + "type": "number", + "format": "single" + }, + { + "enum": [ + "-INF", + "INF", + "NaN" + ] + } + ] + }, + "Edm.Stream": { + "type": "string", + "format": "base64url" + }, + "Edm.TimeOfDay": { + "type": "string", + "format": "time", + "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?$" + }, + "Edm.Geography": { + "$ref": "#/definitions/Edm.Geometry" + }, + "Edm.GeographyPoint": { + "$ref": "#/definitions/Edm.GeometryPoint" + }, + "Edm.GeographyLineString": { + "$ref": "#/definitions/Edm.GeometryLineString" + }, + "Edm.GeographyPolygon": { + "$ref": "#/definitions/Edm.GeometryPolygon" + }, + "Edm.GeographyMultiPoint": { + "$ref": "#/definitions/Edm.GeometryMultiPoint" + }, + "Edm.GeographyMultiLineString": { + "$ref": "#/definitions/Edm.GeometryMultiLineString" + }, + "Edm.GeographyMultiPolygon": { + "$ref": "#/definitions/Edm.GeometryMultiPolygon" + }, + "Edm.GeographyCollection": { + "$ref": "#/definitions/Edm.GeometryCollection" + }, + "Edm.Geometry": { + "type": "object", + "@TODO": "This is not allowed in OpenAPI 2.0 - place it in description and reduce the structure to type property with enum list of all seven subtypes", + "anyOf": [ + { + "$ref": "#/definitions/Edm.GeometryPoint" + }, + { + "$ref": "#/definitions/Edm.GeometryLineString" + }, + { + "$ref": "#/definitions/Edm.GeometryPolygon" + }, + { + "$ref": "#/definitions/Edm.GeometryMultiPoint" + }, + { + "$ref": "#/definitions/Edm.GeometryMultiLineString" + }, + { + "$ref": "#/definitions/Edm.GeometryMultiPolygon" + }, + { + "$ref": "#/definitions/Edm.GeometryCollection" + } + ] + }, + "Edm.GeometryPoint": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + }, + "coordinates": { + "$ref": "#/definitions/GeoJSON.position" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "Edm.GeometryLineString": { + "type": "object", + "properties": { + "type": { + "enum": [ + "LineString" + ] + }, + "coordinates": { + "type": "array", + "items": { + "$ref": "#/definitions/GeoJSON.position" + }, + "minItems": 2 + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "Edm.GeometryPolygon": { + "type": "object", + "properties": { + "type": { + "enum": [ + "Polygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GeoJSON.position" + }, + "minItems": 4 + } + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "Edm.GeometryMultiPoint": { + "type": "object", + "properties": { + "type": { + "enum": [ + "MultiPoint" + ] + }, + "coordinates": { + "type": "array", + "items": { + "$ref": "#/definitions/GeoJSON.position" + } + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "Edm.GeometryMultiLineString": { + "type": "object", + "properties": { + "type": { + "enum": [ + "MultiLineString" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GeoJSON.position" + }, + "minItems": 2 + } + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "Edm.GeometryMultiPolygon": { + "type": "object", + "properties": { + "type": { + "enum": [ + "MultiPolygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/GeoJSON.position" + }, + "minItems": 4 + } + } + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "Edm.GeometryCollection": { + "type": "object", + "properties": { + "type": { + "enum": [ + "GeometryCollection" + ] + }, + "geometries": { + "type": "array", + "items": { + "$ref": "#/definitions/Edm.Geometry" + } + } + } + }, + "GeoJSON.position": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2 + }, + "odata.error": { + "type": "object", + "properties": { + "error": { + "$ref": "#/definitions/odata.error.main" + } + } + }, + "odata.error.main": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/odata.error.detail" + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + }, + "odata.error.detail": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + } +} diff --git a/odata-openapi/examples/odata-rw-v3.openapi3.json b/odata-openapi/examples/odata-rw-v3.openapi3.json new file mode 100644 index 00000000..ec13a5be --- /dev/null +++ b/odata-openapi/examples/odata-rw-v3.openapi3.json @@ -0,0 +1,4373 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Service for namespace ODataDemo", + "description": "This service is located at [https://services.odata.org/V3/(S(1urrjxgkuh4r30yqim0hqrtj))/OData/OData.svc/](https://services.odata.org/V3/%28S%281urrjxgkuh4r30yqim0hqrtj%29%29/OData/OData.svc/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:lightslategray}],[Product]*-*[Category],[Product]^[FeaturedProduct{bg:lightslategray}],[FeaturedProduct]0..1-0..1[Advertisement],[ProductDetail{bg:lightslategray}],[ProductDetail]0..1-0..1[Product],[Category{bg:lightslategray}],[Supplier{bg:lightslategray}],[Supplier]++-0..1[Address],[Supplier]0..1-*[Product],[Address],[Person{bg:lightslategray}],[Person]^[Customer{bg:lightslategray}],[Person]^[Employee{bg:lightslategray}],[PersonDetail{bg:lightslategray}],[PersonDetail]++-0..1[Address],[PersonDetail]0..1-0..1[Person],[Advertisement{bg:lightslategray}],[IncreaseSalaries{bg:lawngreen}],[GetProductsByRating{bg:lawngreen}]-*>[Product],[Advertisements%20{bg:lawngreen}]++-*>[Advertisement],[PersonDetails%20{bg:lawngreen}]++-*>[PersonDetail],[Persons%20{bg:lawngreen}]++-*>[Person],[Suppliers%20{bg:lawngreen}]++-*>[Supplier],[Categories%20{bg:lawngreen}]++-*>[Category],[ProductDetails%20{bg:lawngreen}]++-*>[ProductDetail],[Products%20{bg:lawngreen}]++-*>[Product])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:lightslategray}],[EntitySet/Singleton/Operation{bg:lawngreen}])", + "version": "" + }, + "servers": [ + { + "url": "https://services.odata.org/V3/(S(1urrjxgkuh4r30yqim0hqrtj))/OData/OData.svc" + } + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "ProductDetails" + }, + { + "name": "Categories" + }, + { + "name": "Suppliers" + }, + { + "name": "Persons" + }, + { + "name": "PersonDetails" + }, + { + "name": "Advertisements" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/ODataDemo.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "Products" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/Products({ID})/Categories": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Categories", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Categories", + "tags": [ + "Products", + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/Supplier": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/ProductDetail": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related ProductDetail", + "tags": [ + "Products", + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails": { + "get": { + "summary": "Get entities from ProductDetails", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "Details", + "Details desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of ProductDetail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to ProductDetails", + "tags": [ + "ProductDetails" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from ProductDetails by key", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in ProductDetails", + "tags": [ + "ProductDetails" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from ProductDetails", + "tags": [ + "ProductDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})/Product": { + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "ProductDetails", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})/Product/ODataDemo.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "ProductDetails" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "parameters": [ + { + "description": "key: ProductID", + "in": "path", + "name": "ProductID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Category", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address/Street", + "Address/Street desc", + "Address/City", + "Address/City desc", + "Address/State", + "Address/State desc", + "Address/ZipCode", + "Address/ZipCode desc", + "Address/Country", + "Address/Country desc", + "Location", + "Location desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Supplier", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({ID})/Products": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Persons": { + "get": { + "summary": "Get entities from Persons", + "tags": [ + "Persons" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Person", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Persons", + "tags": [ + "Persons" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Persons({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Persons by key", + "tags": [ + "Persons" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Persons", + "tags": [ + "Persons" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Persons", + "tags": [ + "Persons" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Persons({ID})/PersonDetail": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related PersonDetail", + "tags": [ + "Persons", + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails": { + "get": { + "summary": "Get entities from PersonDetails", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "PersonID desc", + "Age", + "Age desc", + "Gender", + "Gender desc", + "Phone", + "Phone desc", + "Address/Street", + "Address/Street desc", + "Address/City", + "Address/City desc", + "Address/State", + "Address/State desc", + "Address/ZipCode", + "Address/ZipCode desc", + "Address/Country", + "Address/Country desc", + "Photo", + "Photo desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of PersonDetail", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to PersonDetails", + "tags": [ + "PersonDetails" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails({PersonID})": { + "parameters": [ + { + "description": "key: PersonID", + "in": "path", + "name": "PersonID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from PersonDetails by key", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in PersonDetails", + "tags": [ + "PersonDetails" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from PersonDetails", + "tags": [ + "PersonDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails({PersonID})/Person": { + "parameters": [ + { + "description": "key: PersonID", + "in": "path", + "name": "PersonID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Person", + "tags": [ + "PersonDetails", + "Persons" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements": { + "get": { + "summary": "Get entities from Advertisements", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "AirDate", + "AirDate desc" + ] + } + } + }, + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Advertisement", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Advertisements", + "tags": [ + "Advertisements" + ], + "requestBody": { + "description": "New entity", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements({ID})": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Get entity from Advertisements by key", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Advertisements", + "tags": [ + "Advertisements" + ], + "requestBody": { + "description": "New property values", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Advertisements", + "tags": [ + "Advertisements" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements({ID})/FeaturedProduct": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Get related FeaturedProduct", + "tags": [ + "Advertisements", + "Products" + ], + "parameters": [ + { + "name": "$select", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "in": "query", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail", + "Advertisement" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/GetProductsByRating(rating={rating})": { + "get": { + "summary": "Invoke function GetProductsByRating", + "tags": [ + "Products" + ], + "parameters": [ + { + "required": true, + "in": "path", + "name": "rating", + "schema": { + "type": "integer", + "format": "int16" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Collection of Product", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/IncreaseSalaries": { + "post": { + "summary": "Invoke action IncreaseSalaries", + "tags": [ + "Service Operations" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + }, + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "percentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "202": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "ODataDemo.Product": { + "title": "Product", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + }, + "Categories@count": { + "$ref": "#/components/schemas/count" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + ], + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct" + }, + {} + ] + }, + "ODataDemo.Product-create": { + "title": "Product (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct-create" + }, + {} + ] + }, + "ODataDemo.Product-update": { + "title": "Product (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct-update" + }, + {} + ] + }, + "ODataDemo.FeaturedProduct": { + "title": "FeaturedProduct", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + }, + "Categories@count": { + "$ref": "#/components/schemas/count" + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + ], + "nullable": true + }, + "Advertisement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + ], + "nullable": true + } + } + }, + "ODataDemo.FeaturedProduct-create": { + "title": "FeaturedProduct (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + }, + "Supplier": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + ], + "nullable": true + }, + "ProductDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-create" + } + ], + "nullable": true + }, + "Advertisement": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Advertisement-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.FeaturedProduct-update": { + "title": "FeaturedProduct (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z", + "nullable": true + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + }, + "ODataDemo.ProductDetail": { + "title": "ProductDetail", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": "string", + "nullable": true + }, + "Product": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Product" + } + ], + "nullable": true + } + } + }, + "ODataDemo.ProductDetail-create": { + "title": "ProductDetail (for create)", + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": "string", + "nullable": true + }, + "Product": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + ], + "nullable": true + } + }, + "required": [ + "ProductID" + ] + }, + "ODataDemo.ProductDetail-update": { + "title": "ProductDetail (for update)", + "type": "object", + "properties": { + "Details": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Category": { + "title": "Category", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + }, + "Products@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "ODataDemo.Category-create": { + "title": "Category (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Category-update": { + "title": "Category (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Supplier": { + "title": "Supplier", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address" + } + ], + "nullable": true + }, + "Location": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + }, + "Products@count": { + "$ref": "#/components/schemas/count" + } + } + }, + "ODataDemo.Supplier-create": { + "title": "Supplier (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-create" + } + ], + "nullable": true + }, + "Location": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Supplier-update": { + "title": "Supplier (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-update" + } + ], + "nullable": true + }, + "Location": { + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ], + "nullable": true + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + } + }, + "ODataDemo.Address": { + "title": "Address", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Address-create": { + "title": "Address (for create)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Address-update": { + "title": "Address (for update)", + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + } + }, + "ODataDemo.Person": { + "title": "Person", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + ], + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Customer" + }, + { + "$ref": "#/components/schemas/ODataDemo.Employee" + }, + {} + ] + }, + "ODataDemo.Person-create": { + "title": "Person (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Customer-create" + }, + { + "$ref": "#/components/schemas/ODataDemo.Employee-create" + }, + {} + ] + }, + "ODataDemo.Person-update": { + "title": "Person (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Customer-update" + }, + { + "$ref": "#/components/schemas/ODataDemo.Employee-update" + }, + {} + ] + }, + "ODataDemo.Customer": { + "title": "Customer", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + ], + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "ODataDemo.Customer-create": { + "title": "Customer (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + ], + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Customer-update": { + "title": "Customer (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "example": 0, + "multipleOf": 1 + } + } + }, + "ODataDemo.Employee": { + "title": "Employee", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + ], + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + } + }, + "ODataDemo.Employee-create": { + "title": "Employee (for create)", + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + ], + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Employee-update": { + "title": "Employee (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + } + }, + "ODataDemo.PersonDetail": { + "title": "PersonDetail", + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address" + } + ], + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Person" + } + ], + "nullable": true + } + } + }, + "ODataDemo.PersonDetail-create": { + "title": "PersonDetail (for create)", + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-create" + } + ], + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Person-create" + } + ], + "nullable": true + } + }, + "required": [ + "PersonID" + ] + }, + "ODataDemo.PersonDetail-update": { + "title": "PersonDetail (for update)", + "type": "object", + "properties": { + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-update" + } + ], + "nullable": true + }, + "Photo": { + "type": "string", + "format": "base64url" + } + } + }, + "ODataDemo.Advertisement": { + "title": "Advertisement", + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct" + } + ], + "nullable": true + } + } + }, + "ODataDemo.Advertisement-create": { + "title": "Advertisement (for create)", + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct-create" + } + ], + "nullable": true + } + }, + "required": [ + "ID" + ] + }, + "ODataDemo.Advertisement-update": { + "title": "Advertisement (for update)", + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + } + }, + "geoPoint": { + "type": "object", + "properties": { + "coordinates": { + "$ref": "#/components/schemas/geoPosition" + }, + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "minItems": 2, + "items": { + "type": "number" + } + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "object", + "properties": { + "lang": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "lang", + "value" + ] + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/odata-openapi/examples/odata-rw-v3.xml b/odata-openapi/examples/odata-rw-v3.xml new file mode 100644 index 00000000..550eb5fd --- /dev/null +++ b/odata-openapi/examples/odata-rw-v3.xml @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/lib/README.md b/odata-openapi/lib/README.md new file mode 100644 index 00000000..0d0e6a0b --- /dev/null +++ b/odata-openapi/lib/README.md @@ -0,0 +1,56 @@ +# Convert OData 4.0x CSDL JSON or XML to OpenAPI 3.0.x + +This script converts an OData Version 3.0, 4.0, or 4.01 [CSDL XML](http://docs.oasis-open.org/odata/odata-csdl-xml/v4.01/odata-csdl-xml-v4.01.html) or [CSDL JSON](http://docs.oasis-open.org/odata/odata-csdl-json/v4.01/odata-csdl-json-v4.01.html) (`$metadata`) document into an [OpenAPI 3.0.x](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md) JSON document. + +It's a pure JavaScript implementation, depending only on [`odata-csdl`](https://github.com/oasis-tcs/odata-csdl-schemas/tree/master/lib), which in turn depends on [`sax js`](https://www.npmjs.com/package/sax). + +_Note: this tool does not support OData 2.0, and it does not produce Swagger 2.0. If you need any of the 2.0 versions, use the [XSLT-based tool](../tools#transformjs-for-nodejs)._ + + +## Installation + +Clone or download this repository, go to its root folder and type +```sh +npm install +``` + +To install globally type +```sh +npm install -g +``` + + +## Usage + +Assuming you installed the script globally, and your XML metadata file is `MyMetadata.xml`, then +```sh +odata-openapi3 MyMetadata.xml +``` +will create `MyMetadata.openapi.json` next to it. + +Just type +```sh +odata-openapi3 -h +``` +to get usage hints +``` +Usage: odata-openapi3 +Options: + --basePath base path (default: /service-root) + -d, --diagram include YUML diagram + -h, --help show this info + --host host (default: localhost) + -p, --pretty pretty-print JSON result + --scheme scheme (default: http) + -t, --target target file (default: source file base name + .openapi3.json) + -u, --used-schemas-only produce only schemas that are actually used in + ``` + +If you installed the script locally, start it via +```sh +node lib/cli.js ... +``` + +## Supported Annotations + +The mapping can be fine-tuned via [annotations](../doc/Annotations.md) in the CSDL (`$metadata`) XML documents. diff --git a/odata-openapi/lib/cli.js b/odata-openapi/lib/cli.js new file mode 100755 index 00000000..caf1060c --- /dev/null +++ b/odata-openapi/lib/cli.js @@ -0,0 +1,84 @@ +#!/usr/bin/env node +'use strict'; + +//console.dir(argv); + +//TODO: what to require? +const csdl = require('odata-csdl'); +const lib = require('./csdl2openapi'); +const minimist = require('minimist'); +const path = require('path'); +const fs = require('fs'); + +var unknown = false; + +var argv = minimist(process.argv.slice(2), { + string: ["t", "target", "scheme", "host", "basePath"], + boolean: ["d", "diagram", "h", "help", "p", "pretty", "u", "used-schemas-only"], + alias: { + d: "diagram", + h: "help", + p: "pretty", + t: "target", + u: "used-schemas-only" + }, + default: { + pretty: false + }, + unknown: (arg) => { + if (arg.substring(0, 1) == '-') { + console.error('Unknown option: ' + arg); + unknown = true; + return false; + } + } +}); + +if (unknown || argv._.length == 0 || argv.h) { + console.log(`Usage: odata-openapi3 +Options: + --basePath base path (default: /service-root) + -d, --diagram include YUML diagram + -h, --help show this info + --host host (default: localhost) + -p, --pretty pretty-print JSON result + --scheme scheme (default: http) + -t, --target target file (default: source file basename + .openapi3.json) + -u, --used-schemas-only produce only schemas that are actually used in operation objects`); +} else { + //TODO: further input parameters reserved for e.g. referenced CSDL documents + // for (var i = 0; i < argv._.length; i++) { + // convert(argv._[i]); + // } + convert(argv._[0]); +} + +function convert(source) { + if (!fs.existsSync(source)) { + console.error('Source file not found: ' + source); + return; + } + + const text = fs.readFileSync(source, 'utf8'); + const json = text.startsWith('<') ? csdl.xml2json(text) : JSON.parse(text); + if (json.$Version < '3.0') { + console.error('Only OData Version 3.0 or greater is supported'); + return; + } + + const target = argv.target || (source.lastIndexOf('.') <= 0 ? source : source.substring(0, source.lastIndexOf('.'))) + '.openapi3.json'; + console.log(target); + + const openapi = lib.csdl2openapi( + json, + { + scheme: argv.scheme, + host: argv.host, + basePath: argv.basePath, + diagram: argv.diagram + }); + + if (argv.u) lib.deleteUnreferencedSchemas(openapi); + + fs.writeFileSync(target, JSON.stringify(openapi, null, argv.pretty ? 4 : 0)); +} \ No newline at end of file diff --git a/odata-openapi/lib/csdl2openapi.js b/odata-openapi/lib/csdl2openapi.js new file mode 100644 index 00000000..f5cf1154 --- /dev/null +++ b/odata-openapi/lib/csdl2openapi.js @@ -0,0 +1,2198 @@ +/** + * Converts OData CSDL JSON to OpenAPI 3.0.2 + * + * Latest version: https://github.com/oasis-tcs/odata-openapi/blob/master/lib/csdl2openapi.js +*/ + +//TODO +// - Core.Example for complex types +// - reduce number of loops over schemas +// - inject $Name or $$Name into each model element to make parameter passing easier? +// - allow passing additional files for referenced documents +// - delta: headers Prefer and Preference-Applied +// - custom headers and query options - https://issues.oasis-open.org/browse/ODATA-1099 +// - response codes and descriptions - https://issues.oasis-open.org/browse/ODATA-884 +// - inline definitions for Edm.* to make OpenAPI documents self-contained +// - $Extends for entity container: include /paths from referenced container +// - both "clickable" and freestyle $expand, $select, $orderby - does not work yet, open issue for Swagger UI +// - system query options for actions/functions/imports depending on $Collection +// - 200 response for PATCH +// - ETag for GET / If-Match for PATCH and DELETE depending on @Core.OptimisticConcurrency +// - CountRestrictions for GET collection-valued (containment) navigation - https://issues.oasis-open.org/browse/ODATA-1300 +// - InsertRestrictions/NonInsertableProperties +// - InsertRestrictions/NonInsertableNavigationProperties +// - see //TODO comments below + +/** + * Construct an OpenAPI description from a CSDL document + * @param {object} csdl CSDL document + * @param {object} options Optional parameters + * @return {object} OpenAPI description + */ +module.exports.csdl2openapi = function ( + csdl, + { + scheme = 'https', + host = 'localhost', + basePath = '/service-root', + diagram = false, + maxLevels = 5 + } = {} +) { + const serviceRoot = scheme + '://' + host + basePath; + const queryOptionPrefix = csdl.$Version <= '4.0' ? '$' : ''; + const typesToInline = {}; // filled in schema() and used in inlineTypes() + const boundOverloads = {}; + const derivedTypes = {}; + const alias = {}; + const namespace = { 'Edm': 'Edm' }; + const namespaceUrl = {}; + const voc = {}; + preProcess(csdl, boundOverloads, derivedTypes, alias, namespace, namespaceUrl, voc); + + const entityContainer = csdl.$EntityContainer ? modelElement(csdl.$EntityContainer) : {}; + const keyAsSegment = entityContainer[voc.Capabilities.KeyAsSegmentSupported]; + const deepUpdate = entityContainer[voc.Capabilities.DeepUpdateSupport] && entityContainer[voc.Capabilities.DeepUpdateSupport].Supported; + + const openapi = { + openapi: '3.0.2', + info: info(csdl, entityContainer), + servers: servers(serviceRoot), + tags: tags(entityContainer), + paths: paths(entityContainer), + components: components(csdl, entityContainer) + }; + if (!csdl.$EntityContainer) { + delete openapi.servers; + delete openapi.tags; + } + + security(openapi, entityContainer); + + return openapi; + + + /** + * Collect model info for easier lookup + * @param {object} csdl CSDL document + * @param {object} boundOverloads Map of action/function names to bound overloads + * @param {object} derivedTypes Map of type names to derived types + * @param {object} alias Map of namespace or alias to alias + * @param {object} namespace Map of namespace or alias to namespace + * @param {object} namespaceUrl Map of namespace to reference URL + * @param {object} voc Map of vocabularies and terms + */ + function preProcess(csdl, boundOverloads, derivedTypes, alias, namespace, namespaceUrl, voc) { + Object.keys(csdl.$Reference || {}).forEach(url => { + const reference = csdl.$Reference[url]; + (reference.$Include || []).forEach(include => { + const qualifier = include.$Alias || include.$Namespace; + alias[include.$Namespace] = qualifier; + namespace[qualifier] = include.$Namespace; + namespace[include.$Namespace] = include.$Namespace; + namespaceUrl[include.$Namespace] = url; + }); + }); + + vocabularies(voc, alias); + + Object.keys(csdl).filter(name => isIdentifier(name)).forEach(name => { + const schema = csdl[name]; + const qualifier = schema.$Alias || name; + const isDefaultNamespace = schema[voc.Core.DefaultNamespace]; + + alias[name] = qualifier; + namespace[qualifier] = name; + namespace[name] = name; + + Object.keys(schema).filter(name => isIdentifier(name)).forEach(name => { + const qualifiedName = qualifier + '.' + name; + const element = schema[name]; + if (Array.isArray(element)) { + element.filter(overload => overload.$IsBound).forEach(overload => { + const type = overload.$Parameter[0].$Type + (overload.$Parameter[0].$Collection ? '-c' : ''); + if (!boundOverloads[type]) boundOverloads[type] = []; + boundOverloads[type].push({ name: (isDefaultNamespace ? name : qualifiedName), overload: overload }); + }); + } else if (element.$BaseType) { + const base = namespaceQualifiedName(element.$BaseType); + if (!derivedTypes[base]) derivedTypes[base] = []; + derivedTypes[base].push(qualifiedName); + } + }); + + Object.keys(schema.$Annotations || {}).forEach(target => { + const annotations = schema.$Annotations[target]; + const segments = target.split('/'); + const open = segments[0].indexOf('('); + let element; + if (open == -1) { + element = modelElement(segments[0]); + } else { + element = modelElement(segments[0].substring(0, open)); + let args = segments[0].substring(open + 1, segments[0].length - 1); + element = element.find(overload => + overload.$Kind == 'Action' && overload.$IsBound != true && args == '' + || overload.$Kind == 'Action' && args == (overload.$Parameter[0].$Type || '') + || (overload.$Parameter || []).map(p => p.$Type || 'Edm.String').join(',') == args); + } + if (!element) { + // console.warn(`Invalid annotation target '${target}'`) + } else if (Array.isArray(element)) { + //TODO: action or function: + //- loop over all overloads + //- if there are more segments, a parameter or the return type is targeted + } else { + switch (segments.length) { + case 1: + Object.assign(element, annotations); + break; + case 2: + if (['Action', 'Function'].includes(element.$Kind)) { + if (segments[1] == '$ReturnType') { + Object.assign(element.$ReturnType, annotations); + } else { + const parameter = element.$Parameter.find(p => p.$Name == segments[1]); + Object.assign(parameter, annotations); + } + } else { + if (element[segments[1]]) { + Object.assign(element[segments[1]], annotations); + } else { + // console.warn(`Invalid annotation target '${target}'`) + } + } + break; + default: + console.warn('More than two annotation target path segments'); + } + } + }); + }); + } + + /** + * Construct map of qualified term names + * @param {object} voc Map of vocabularies and terms + * @param {object} alias Map of namespace or alias to alias + */ + function vocabularies(voc, alias) { + const terms = { + Authorization: ['Authorizations', 'SecuritySchemes'], + Capabilities: ['BatchSupport', 'BatchSupported', 'ChangeTracking', 'CountRestrictions', 'DeleteRestrictions', 'DeepUpdateSupport', 'ExpandRestrictions', + 'FilterRestrictions', 'IndexableByKey', 'InsertRestrictions', 'KeyAsSegmentSupported', 'NavigationRestrictions', + 'SearchRestrictions', 'SelectSupport', 'SkipSupported', 'SortRestrictions', + 'ReadRestrictions', 'TopSupported', 'UpdateRestrictions'], + Core: ['AcceptableMediaTypes', 'Computed', 'DefaultNamespace', 'Description', 'Example', 'Immutable', 'LongDescription', + 'OptionalParameter', 'Permissions', 'SchemaVersion'], + JSON: ['Schema'], + Validation: ['AllowedValues', 'Exclusive', 'Maximum', 'Minimum', 'Pattern'] + }; + + Object.keys(terms).forEach(vocab => { + voc[vocab] = {}; + terms[vocab].forEach(term => { + voc[vocab][term] = '@' + alias['Org.OData.' + vocab + '.V1'] + '.' + term; + }); + }); + } + + /** + * Construct the Info Object + * @param {object} csdl CSDL document + * @param {object} entityContainer Entity Container object + * @return {object} Info Object + */ + function info(csdl, entityContainer) { + const namespace = csdl.$EntityContainer ? nameParts(csdl.$EntityContainer).qualifier : null; + const containerSchema = csdl.$EntityContainer ? csdl[namespace] : {}; + const description = ( + entityContainer[voc.Core.LongDescription] + || containerSchema[voc.Core.LongDescription] + || 'This service is located at [' + serviceRoot + '/](' + + serviceRoot.replace(/\(/g, '%28').replace(/\)/g, '%29') + '/)' + ) + (diagram ? resourceDiagram(csdl, entityContainer) : ''); + return { + title: entityContainer[voc.Core.Description] + || containerSchema[voc.Core.Description] + || (csdl.$EntityContainer ? 'Service for namespace ' + namespace : 'OData CSDL document'), + description: csdl.$EntityContainer ? description : '', + version: containerSchema[voc.Core.SchemaVersion] || '' + }; + } + + /** + * Construct resource diagram using web service at https://yuml.me + * @param {object} csdl CSDL document + * @param {object} entityContainer Entity Container object + * @return {string} resource diagram + */ + function resourceDiagram(csdl) { + let diagram = ''; + let comma = ''; + //TODO: make colors configurable + let color = { resource: '{bg:lawngreen}', entityType: '{bg:lightslategray}', complexType: '', external: '{bg:whitesmoke}' } + + Object.keys(csdl).filter(name => isIdentifier(name)).forEach(namespace => { + const schema = csdl[namespace]; + Object.keys(schema).filter(name => isIdentifier(name) && ['EntityType', 'ComplexType'].includes(schema[name].$Kind)) + .forEach(typeName => { + const type = schema[typeName]; + diagram += comma + + (type.$BaseType ? '[' + nameParts(type.$BaseType).name + ']^' : '') + + '[' + typeName + (type.$Kind == 'EntityType' ? color.entityType : color.complexType) + ']'; + Object.keys(type).filter(name => isIdentifier(name)).forEach(propertyName => { + const property = type[propertyName]; + const targetNP = nameParts(property.$Type || 'Edm.String'); + if (property.$Kind == 'NavigationProperty' || targetNP.qualifier != 'Edm') { + const target = modelElement(property.$Type); + const bidirectional = property.$Partner && target && target[property.$Partner] && target[property.$Partner].$Partner == propertyName; + // Note: if the partner has the same name then it will also be depicted + if (!bidirectional || propertyName <= property.$Partner) { + diagram += ',[' + typeName + ']' + + ((property.$Kind != 'NavigationProperty' || property.$ContainsTarget) ? '++' : (bidirectional ? cardinality(target[property.$Partner]) : '')) + + '-' + + cardinality(property) + + ((property.$Kind != 'NavigationProperty' || bidirectional) ? '' : '>') + + '[' + + (target ? targetNP.name : property.$Type + color.external) + + ']'; + } + } + }); + comma = ','; + }); + }); + + Object.keys(entityContainer).filter(name => isIdentifier(name)).reverse().forEach(name => { + const resource = entityContainer[name]; + if (resource.$Type) { + diagram += comma + + '[' + name + '%20' + color.resource + ']' // additional space in case entity set and type have same name + + '++-' + + cardinality(resource, true) + + '>[' + nameParts(resource.$Type).name + ']'; + } else { + if (resource.$Action) { + diagram += comma + + '[' + name + color.resource + ']'; + const overload = modelElement(resource.$Action).find(overload => !overload.$IsBound); + if (overload.$ReturnType) { + const type = modelElement(overload.$ReturnType.$Type || 'Edm.String'); + if (type) { + diagram += '-' + + cardinality(overload.$ReturnType, true) + + '>[' + nameParts(overload.$ReturnType.$Type).name + ']'; + } + } + } else if (resource.$Function) { + diagram += comma + + '[' + name + color.resource + ']'; + const overloads = modelElement(resource.$Function); + if (overloads) { + const unbound = overloads.filter(overload => !overload.$IsBound); + // TODO: loop over all overloads, add new source box after first arrow + const overload = unbound[0]; + const type = modelElement(overload.$ReturnType.$Type || 'Edm.String'); + if (type) { + diagram += '-' + + cardinality(overload.$ReturnType, true) + + '>[' + nameParts(overload.$ReturnType.$Type).name + ']'; + } + } + } + } + }); + + if (diagram != '') { + diagram = '\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/' + + diagram + + ')\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type' + color.external + + '],[ComplexType' + color.complexType + '],[EntityType' + color.entityType + + '],[EntitySet/Singleton/Operation' + color.resource + '])'; + } + + return diagram; + + /** + * Diagram representation of property cardinality + * @param {object} typedElement Typed model element, e.g. property + * @param {boolean} one Explicitly represent to-1 + * @return {string} cardinality + */ + function cardinality(typedElement, one = false) { + return typedElement.$Collection ? '*' : (typedElement.$Nullable ? '0..1' : ''); + } + } + + /** + * Find model element by qualified name + * @param {string} qname Qualified name of model element + * @return {object} Model element + */ + function modelElement(qname) { + const q = nameParts(qname); + const schema = csdl[q.qualifier] || csdl[namespace[q.qualifier]]; + return schema ? schema[q.name] : null; + } + + /** + * Construct an array of Server Objects + * @param {object} csdl The CSDL document + * @param {object} options Optional parameters + * @return {Array} The list of servers + */ + function servers(serviceRoot) { + return [{ url: serviceRoot }]; + } + + /** + * Construct an array of Tag Objects from the entity container + * @param {object} container The entity container + * @return {Array} The list of tags + */ + function tags(container) { + const tags = []; + // all entity sets and singletons + Object.keys(container).filter(name => isIdentifier(name) && container[name].$Type).forEach(child => { + const tag = { name: child }; + const type = modelElement(container[child].$Type); + const description = container[child][voc.Core.Description] + || type && type[voc.Core.Description]; + if (description) tag.description = description; + tags.push(tag); + }) + return tags; + } + + /** + * Construct the Paths Object from the entity container + * @param {object} container Entity container + * @return {object} Paths Object + */ + function paths(container) { + const paths = {}; + const resources = Object.keys(container).filter(name => isIdentifier(name)); + resources.forEach(name => { + let child = container[name]; + if (child.$Type) { + // entity sets and singletons are almost containment navigation properties + child.$ContainsTarget = true; + pathItems(paths, '/' + name, [], child, child, name, name, child, 0, ''); + } else if (child.$Action) { + pathItemActionImport(paths, name, child); + } else if (child.$Function) { + pathItemFunctionImport(paths, name, child); + } else { + console.warn('Unrecognized entity container child: ' + name); + } + }) + if (resources.length > 0) pathItemBatch(paths, container); + return paths; + } + + /** + * Add path and Path Item Object for a navigation segment + * @param {object} paths Paths Object to augment + * @param {string} prefix Prefix for path + * @param {Array} prefixParameters Parameter Objects for prefix + * @param {object} element Model element of navigation segment + * @param {object} root Root model element + * @param {string} sourceName Name of path source + * @param {string} targetName Name of path target + * @param {string} target Target container child of path + * @param {integer} level Number of navigation segments so far + * @param {string} navigationPath Path for finding navigation restrictions + */ + function pathItems(paths, prefix, prefixParameters, element, root, sourceName, targetName, target, level, navigationPath) { + const name = prefix.substring(prefix.lastIndexOf('/') + 1); + const type = modelElement(element.$Type); + const pathItem = {}; + const restrictions = navigationPropertyRestrictions(root, navigationPath); + const nonExpandable = nonExpandableProperties(root, navigationPath); + + paths[prefix] = pathItem; + if (prefixParameters.length > 0) paths[prefix].parameters = prefixParameters; + + operationRead(pathItem, element, name, sourceName, targetName, target, level, restrictions, false, nonExpandable); + if (element.$Collection && (element.$ContainsTarget || level < 2 && target)) { + operationCreate(pathItem, element, name, sourceName, targetName, target, level, restrictions); + } + pathItemsForBoundOperations(paths, prefix, prefixParameters, element, sourceName); + + if (element.$ContainsTarget) { + if (element.$Collection) { + if (level < maxLevels) + pathItemsWithKey(paths, prefix, prefixParameters, element, root, sourceName, targetName, target, level, navigationPath, restrictions, nonExpandable); + } else { + operationUpdate(pathItem, element, name, sourceName, target, level, restrictions); + if (element.$Nullable) { + operationDelete(pathItem, element, name, sourceName, target, level, restrictions); + } + pathItemsForBoundOperations(paths, prefix, prefixParameters, element, sourceName); + pathItemsWithNavigation(paths, prefix, prefixParameters, type, root, sourceName, level, navigationPath); + } + } + } + + /** + * Find navigation restrictions for a navigation path + * @param {object} root Root model element + * @param {string} navigationPath Path for finding navigation restrictions + * @return Navigation property restrictions of navigation segment + */ + function navigationPropertyRestrictions(root, navigationPath) { + const navigationRestrictions = root[voc.Capabilities.NavigationRestrictions] || {}; + return (navigationRestrictions.RestrictedProperties || []).find(item => item.NavigationProperty == navigationPath) + || {}; + } + + /** + * Find non-expandable properties for a navigation path + * @param {object} root Root model element + * @param {string} navigationPath Path for finding navigation restrictions + * @return Navigation property restrictions of navigation segment + */ + function nonExpandableProperties(root, navigationPath) { + const expandRestrictions = root[voc.Capabilities.ExpandRestrictions] || {}; + const prefix = navigationPath.length === 0 ? '' : navigationPath + '/' + const from = prefix.length + const nonExpandable = [] + for (const path of (expandRestrictions.NonExpandableProperties || [])) { + if (path.startsWith(prefix)) { + nonExpandable.push(path.substring(from)) + } + } + return nonExpandable; + } + + /** + * Add path and Path Item Object for a navigation segment with key + * @param {object} paths Paths Object to augment + * @param {string} prefix Prefix for path + * @param {Array} prefixParameters Parameter Objects for prefix + * @param {object} element Model element of navigation segment + * @param {object} root Root model element + * @param {string} sourceName Name of path source + * @param {string} targetName Name of path target + * @param {string} target Target container child of path + * @param {integer} level Number of navigation segments so far + * @param {string} navigationPath Path for finding navigation restrictions + * @param {object} restrictions Navigation property restrictions of navigation segment + * @param {array} nonExpandable Non-expandable navigation properties + */ + function pathItemsWithKey(paths, prefix, prefixParameters, element, root, sourceName, targetName, target, level, navigationPath, restrictions, nonExpandable) { + const targetIndexable = target == null || target[voc.Capabilities.IndexableByKey] != false; + if (restrictions.IndexableByKey == true || restrictions.IndexableByKey != false && targetIndexable) { + const name = prefix.substring(prefix.lastIndexOf('/') + 1); + const type = modelElement(element.$Type); + const key = entityKey(type, level); + if (key.parameters.length > 0) { + const path = prefix + key.segment; + const parameters = prefixParameters.concat(key.parameters); + const pathItem = { parameters: parameters }; + paths[path] = pathItem; + + operationRead(pathItem, element, name, sourceName, targetName, target, level, restrictions, true, nonExpandable); + operationUpdate(pathItem, element, name, sourceName, target, level, restrictions); + operationDelete(pathItem, element, name, sourceName, target, level, restrictions); + + pathItemsForBoundOperations(paths, path, parameters, element, sourceName, true); + pathItemsWithNavigation(paths, path, parameters, type, root, sourceName, level, navigationPath); + } + } + } + + /** + * Construct Operation Object for create + * @param {object} pathItem Path Item Object to augment + * @param {object} element Model element of navigation segment + * @param {string} name Name of navigation segment + * @param {string} sourceName Name of path source + * @param {string} targetName Name of path target + * @param {string} target Target container child of path + * @param {integer} level Number of navigation segments so far + * @param {object} restrictions Navigation property restrictions of navigation segment + */ + function operationCreate(pathItem, element, name, sourceName, targetName, target, level, restrictions) { + const insertRestrictions = restrictions.InsertRestrictions || target && target[voc.Capabilities.InsertRestrictions] || {}; + + if (insertRestrictions.Insertable !== false) { + const type = modelElement(element.$Type); + pathItem.post = { + summary: insertRestrictions.Description || 'Add new entity to ' + (level > 0 ? 'related ' : '') + name, + tags: [sourceName], + requestBody: { + description: type && type[voc.Core.Description] || 'New entity', + required: true, + content: { + 'application/json': { + schema: ref(element.$Type, '-create') + } + } + }, + responses: response(201, 'Created entity', { $Type: element.$Type }) + }; + if (insertRestrictions.LongDescription) pathItem.post.description = insertRestrictions.LongDescription; + if (targetName && sourceName != targetName) pathItem.post.tags.push(targetName); + } + } + + /** + * Construct Operation Object for read + * @param {object} pathItem Path Item Object to augment + * @param {object} element Model element of navigation segment + * @param {string} name Name of navigation segment + * @param {string} sourceName Name of path source + * @param {string} targetName Name of path target + * @param {string} target Target container child of path + * @param {integer} level Number of navigation segments so far + * @param {object} restrictions Navigation property restrictions of navigation segment + * @param {boolean} byKey Read by key + * @param {array} nonExpandable Non-expandable navigation properties + */ + function operationRead(pathItem, element, name, sourceName, targetName, target, level, restrictions, byKey, nonExpandable) { + const targetRestrictions = target && target[voc.Capabilities.ReadRestrictions]; + const readRestrictions = restrictions.ReadRestrictions || targetRestrictions || {}; + const readByKeyRestrictions = readRestrictions.ReadByKeyRestrictions; + let readable = true; + if (byKey && readByKeyRestrictions && readByKeyRestrictions.Readable !== undefined) + readable = readByKeyRestrictions.Readable; + else if (readRestrictions.Readable !== undefined) + readable = readRestrictions.Readable; + + if (readable) { + let descriptions = (level == 0 ? targetRestrictions : restrictions.ReadRestrictions) || {}; + if (byKey) descriptions = descriptions.ReadByKeyRestrictions || {}; + + const collection = !byKey && element.$Collection; + const operation = { + summary: descriptions.Description + || 'Get ' + + (byKey ? 'entity from ' : (element.$Collection ? 'entities from ' : '')) + + (level > 0 ? 'related ' : '') + + name + + (byKey ? ' by key' : ''), + tags: [sourceName], + parameters: [], + responses: response(200, 'Retrieved entit' + (collection ? 'ies' : 'y'), { $Type: element.$Type, $Collection: collection }) + }; + const deltaSupported = element[voc.Capabilities.ChangeTracking] && element[voc.Capabilities.ChangeTracking].Supported; + if (!byKey && deltaSupported) { + operation.responses[200].content['application/json'].schema.properties['@odata.deltaLink'] = { + type: 'string', + example: basePath + '/' + name + '?$deltatoken=opaque server-generated token for fetching the delta' + } + } + if (descriptions.LongDescription) operation.description = descriptions.LongDescription; + if (target && sourceName != targetName) operation.tags.push(targetName); + + if (collection) { + optionTop(operation.parameters, target, restrictions); + optionSkip(operation.parameters, target, restrictions); + if (csdl.$Version >= '4.0') optionSearch(operation.parameters, target, restrictions); + optionFilter(operation.parameters, target, restrictions); + optionCount(operation.parameters, target); + optionOrderBy(operation.parameters, element, target, restrictions); + } + + optionSelect(operation.parameters, element, target, restrictions); + optionExpand(operation.parameters, element, target, nonExpandable); + + pathItem.get = operation; + } + } + + /** + * Add parameter for query option $count + * @param {Array} parameters Array of parameters to augment + * @param {string} target Target container child of path + */ + function optionCount(parameters, target) { + const targetRestrictions = target && target[voc.Capabilities.CountRestrictions]; + const targetCountable = target == null + || targetRestrictions == null + || targetRestrictions.Countable !== false; + + if (targetCountable) { + parameters.push({ + + $ref: '#/components/parameters/count' + }); + } + } + + /** + * Add parameter for query option $expand + * @param {Array} parameters Array of parameters to augment + * @param {object} element Model element of navigation segment + * @param {string} target Target container child of path + * @param {array} nonExpandable Non-expandable navigation properties + */ + function optionExpand(parameters, element, target, nonExpandable) { + const targetRestrictions = target && target[voc.Capabilities.ExpandRestrictions]; + const supported = targetRestrictions == null || targetRestrictions.Expandable != false; + if (supported) { + const expandItems = ['*'].concat(navigationPaths(element).filter(path => !nonExpandable.includes(path))); + if (expandItems.length > 1) { + parameters.push({ + name: queryOptionPrefix + 'expand', + description: (targetRestrictions && targetRestrictions[voc.Core.Description]) + || 'Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)', + in: 'query', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: expandItems + } + } + }); + } + } + } + + /** + * Collect navigation paths of a navigation segment and its potentially structured components + * @param {object} element Model element of navigation segment + * @param {string} prefix Navigation prefix + * @param {integer} level Number of navigation segments so far + * @return {Array} Array of navigation property paths + */ + function navigationPaths(element, prefix = '', level = 0) { + const paths = []; + const type = modelElement(element.$Type); + const properties = propertiesOfStructuredType(type); + Object.keys(properties).forEach(key => { + if (properties[key].$Kind == 'NavigationProperty') { + paths.push(prefix + key) + } else if (properties[key].$Type && level < maxLevels) { + paths.push(...navigationPaths(properties[key], prefix + key + '/', level + 1)); + } + }) + return paths; + } + + /** + * Add parameter for query option $filter + * @param {Array} parameters Array of parameters to augment + * @param {string} target Target container child of path + * @param {object} restrictions Navigation property restrictions of navigation segment + */ + function optionFilter(parameters, target, restrictions) { + const filterRestrictions = restrictions.FilterRestrictions || target && target[voc.Capabilities.FilterRestrictions] || {}; + + if (filterRestrictions.Filterable !== false) { + const filter = { + name: queryOptionPrefix + 'filter', + description: filterRestrictions[voc.Core.Description] + || 'Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)', + in: 'query', + schema: { + type: 'string' + } + }; + if (filterRestrictions.RequiresFilter) + filter.required = true; + if (filterRestrictions.RequiredProperties) { + filter.description += '\n\nRequired filter properties:'; + filterRestrictions.RequiredProperties.forEach( + item => filter.description += '\n- ' + item + ); + } + parameters.push(filter); + } + } + + /** + * Add parameter for query option $orderby + * @param {Array} parameters Array of parameters to augment + * @param {object} element Model element of navigation segment + * @param {string} target Target container child of path + * @param {object} restrictions Navigation property restrictions of navigation segment + */ + function optionOrderBy(parameters, element, target, restrictions) { + const sortRestrictions = restrictions.SortRestrictions || target && target[voc.Capabilities.SortRestrictions] || {}; + + if (sortRestrictions.Sortable !== false) { + const nonSortable = {}; + (sortRestrictions.NonSortableProperties || []).forEach(name => { + nonSortable[name] = true; + }); + const orderbyItems = []; + primitivePaths(element).filter(property => !nonSortable[property]).forEach(property => { + orderbyItems.push(property); + orderbyItems.push(property + ' desc'); + }); + if (orderbyItems.length > 0) { + parameters.push({ + name: queryOptionPrefix + 'orderby', + description: sortRestrictions[voc.Core.Description] + || 'Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)', + in: 'query', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: orderbyItems + } + } + }); + } + } + } + + /** + * Collect primitive paths of a navigation segment and its potentially structured components + * @param {object} element Model element of navigation segment + * @param {string} prefix Navigation prefix + * @return {Array} Array of primitive property paths + */ + function primitivePaths(element, prefix = '') { + const paths = []; + const elementType = modelElement(element.$Type); + + if (!elementType) { + console.warn(`Unknown type for element: ${JSON.stringify(element)}`); + return paths; + } + + const propsOfType = propertiesOfStructuredType(elementType); + const ignore = Object.entries(propsOfType) + .filter(entry => entry[1].$Kind !== 'NavigationProperty') + .filter(entry => entry[1].$Type) + .filter(entry => nameParts(entry[1].$Type).qualifier !== 'Edm') + .filter(entry => !modelElement(entry[1].$Type)); + + // Keep old logging + ignore.forEach(entry => console.warn(`Unknown type for element: ${JSON.stringify(entry)}`)); + + const properties = Object.entries(propsOfType) + .filter(entry => entry[1].$Kind !== 'NavigationProperty') + .filter(entry => !ignore.includes(entry)) + .map(entryToProperty({ path: prefix, typeRefChain: [] })); + + for (let i = 0; i < properties.length; i++) { + const property = properties[i]; + if (!property.isComplex) { + paths.push(property.path); + continue; + } + + const typeRefChainTail = property.typeRefChain[property.typeRefChain.length - 1]; + + // Allow full cycle to be shown (0) times + if (property.typeRefChain.filter(_type => _type === typeRefChainTail).length > 1) { + console.warn(`Cycle detected ${property.typeRefChain.join('->')}`); + continue; + } + + const expanded = Object.entries(property.properties) + .filter(property => property[1].$Kind !== 'NavigationProperty') + .map(entryToProperty(property)) + properties.splice(i + 1, 0, ...expanded); + } + + return paths; + } + + function entryToProperty(parent) { + + return function (entry) { + const key = entry[0]; + const property = entry[1]; + const propertyType = property.$Type && modelElement(property.$Type); + + if (propertyType && propertyType.$Kind && propertyType.$Kind === 'ComplexType') { + return { + properties: propertiesOfStructuredType(propertyType), + path: `${parent.path}${key}/`, + typeRefChain: parent.typeRefChain.concat(property.$Type), + isComplex: true + } + } + + return { + properties: {}, + path: `${parent.path}${key}`, + typeRefChain: [], + isComplex: false, + } + }; + } + + /** + * Add parameter for query option $search + * @param {Array} parameters Array of parameters to augment + * @param {string} target Target container child of path + * @param {object} restrictions Navigation property restrictions of navigation segment + */ + function optionSearch(parameters, target, restrictions) { + const searchRestrictions = restrictions.SearchRestrictions || target && target[voc.Capabilities.SearchRestrictions] || {}; + + if (searchRestrictions.Searchable !== false) { + if (searchRestrictions[voc.Core.Description]) { + parameters.push({ + name: queryOptionPrefix + 'search', + description: searchRestrictions[voc.Core.Description], + in: 'query', + schema: { type: 'string' } + }); + } else { + parameters.push({ $ref: '#/components/parameters/search' }); + } + } + } + + /** + * Add parameter for query option $select + * @param {Array} parameters Array of parameters to augment + * @param {object} element Model element of navigation segment + * @param {string} target Target container child of path + * @param {object} restrictions Navigation property restrictions of navigation segment + */ + function optionSelect(parameters, element, target, restrictions) { + const selectSupport = restrictions.SelectSupport || target && target[voc.Capabilities.SelectSupport] || {}; + + if (selectSupport.Supported !== false) { + const type = modelElement(element.$Type) || {}; + const properties = propertiesOfStructuredType(type); + const selectItems = []; + Object.keys(properties).filter(key => properties[key].$Kind != 'NavigationProperty').forEach( + key => selectItems.push(key) + ) + if (selectItems.length > 0) { + parameters.push({ + name: queryOptionPrefix + 'select', + description: 'Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)', + in: 'query', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: selectItems + } + } + }); + } + } + } + + /** + * Add parameter for query option $skip + * @param {Array} parameters Array of parameters to augment + * @param {string} target Target container child of path + * @param {object} restrictions Navigation property restrictions of navigation segment + */ + function optionSkip(parameters, target, restrictions) { + const supported = restrictions.SkipSupported !== undefined + ? restrictions.SkipSupported + : target == null || target[voc.Capabilities.SkipSupported] !== false;; + + if (supported) { + parameters.push({ + $ref: '#/components/parameters/skip' + }); + } + } + + /** + * Add parameter for query option $top + * @param {Array} parameters Array of parameters to augment + * @param {string} target Target container child of path + * @param {object} restrictions Navigation property restrictions of navigation segment + */ + function optionTop(parameters, target, restrictions) { + const supported = restrictions.TopSupported !== undefined + ? restrictions.TopSupported + : target == null || target[voc.Capabilities.TopSupported] !== false;; + + if (supported) { + parameters.push({ + $ref: '#/components/parameters/top' + }); + } + } + + /** + * Construct Operation Object for update + * @param {object} pathItem Path Item Object to augment + * @param {object} element Model element of navigation segment + * @param {string} name Name of navigation segment + * @param {string} sourceName Name of path source + * @param {string} target Target container child of path + * @param {integer} level Number of navigation segments so far + * @param {object} restrictions Navigation property restrictions of navigation segment + */ + function operationUpdate(pathItem, element, name, sourceName, target, level, restrictions) { + const updateRestrictions = restrictions.UpdateRestrictions || target && target[voc.Capabilities.UpdateRestrictions] || {}; + + if (updateRestrictions.Updatable !== false) { + const type = modelElement(element.$Type); + pathItem.patch = { + summary: updateRestrictions.Description + || 'Update ' + (element.$Collection ? 'entity in ' : '') + (level > 0 ? 'related ' : '') + name, + tags: [sourceName], + requestBody: { + description: type && type[voc.Core.Description] || 'New property values', + required: true, + content: { + 'application/json': { + schema: ref(element.$Type, '-update') + } + } + }, + responses: response(204, 'Success') + }; + if (updateRestrictions.LongDescription) pathItem.patch.description = updateRestrictions.LongDescription; + } + } + + /** + * Construct Operation Object for delete + * @param {object} pathItem Path Item Object to augment + * @param {object} element Model element of navigation segment + * @param {string} name Name of navigation segment + * @param {string} sourceName Name of path source + * @param {string} target Target container child of path + * @param {integer} level Number of navigation segments so far + * @param {object} restrictions Navigation property restrictions of navigation segment + */ + function operationDelete(pathItem, element, name, sourceName, target, level, restrictions) { + const deleteRestrictions = restrictions.DeleteRestrictions || target && target[voc.Capabilities.DeleteRestrictions] || {}; + + if (deleteRestrictions.Deletable !== false) { + pathItem.delete = { + summary: deleteRestrictions.Description + || 'Delete ' + (element.$Collection ? 'entity from ' : '') + (level > 0 ? 'related ' : '') + name, + tags: [sourceName], + responses: response(204, 'Success') + }; + if (deleteRestrictions.LongDescription) pathItem.delete.description = deleteRestrictions.LongDescription; + } + } + + /** + * Add paths and Path Item Objects for navigation segments + * @param {object} paths The Paths Object to augment + * @param {string} prefix Prefix for path + * @param {Array} prefixParameters Parameter Objects for prefix + * @param {object} type Entity type object of navigation segment + * @param {string} sourceName Name of path source + * @param {integer} level Number of navigation segments so far + * @param {string} navigationPrefix Path for finding navigation restrictions + */ + function pathItemsWithNavigation(paths, prefix, prefixParameters, type, root, sourceName, level, navigationPrefix) { + const navigationRestrictions = root[voc.Capabilities.NavigationRestrictions] || {}; + const rootNavigable = level == 0 && navigationRestrictions.Navigability != 'None' + || level == 1 && navigationRestrictions.Navigability != 'Single' + || level > 1; + + if (type && level < maxLevels) { + const properties = navigationPathMap(type); + Object.keys(properties).forEach(name => { + const parentRestrictions = navigationPropertyRestrictions(root, navigationPrefix); + if (parentRestrictions.Navigability == 'Single') return; + + const navigationPath = navigationPrefix + (navigationPrefix.length > 0 ? '/' : '') + name; + const restrictions = navigationPropertyRestrictions(root, navigationPath); + if (['Recursive', 'Single'].includes(restrictions.Navigability) || restrictions.Navigability == null && rootNavigable) { + const targetSetName = root.$NavigationPropertyBinding && root.$NavigationPropertyBinding[navigationPath]; + const target = entityContainer[targetSetName]; + pathItems(paths, prefix + '/' + name, prefixParameters, properties[name], root, sourceName, targetSetName, target, level + 1, navigationPath); + } + }); + } + } + + /** + * Collect navigation paths of a navigation segment and its potentially structured components + * @param {object} type Structured type + * @param {object} map Map of navigation property paths and their types + * @param {string} prefix Navigation prefix + * @param {integer} level Number of navigation segments so far + * @return {object} Map of navigation property paths and their types + */ + function navigationPathMap(type, map = {}, prefix = '', level = 0) { + const properties = propertiesOfStructuredType(type); + Object.keys(properties).forEach(key => { + if (properties[key].$Kind == 'NavigationProperty') { + map[prefix + key] = properties[key]; + } else if (properties[key].$Type && !properties[key].$Collection && level < maxLevels) { + navigationPathMap(modelElement(properties[key].$Type), map, prefix + key + '/', level + 1); + } + }) + return map; + } + + /** + * Construct map of key names for an entity type + * @param {object} type Entity type object + * @return {object} Map of key names + */ + function keyMap(type) { + const map = {}; + if (type.$Kind == 'EntityType') { + const keys = key(type) || []; + keys.forEach(key => { + if (typeof key == 'string') + map[key] = true; + }); + } + return map; + } + + /** + * Key for path item + * @param {object} entityType Entity Type object + * @return {array} Key of entity type or null + */ + function key(entityType) { + let type = entityType; + let keys = null; + while (type) { + keys = type.$Key; + if (keys || !type.$BaseType) break; + type = modelElement(type.$BaseType); + } + return keys; + } + + /** + * Key for path item + * @param {object} entityType Entity Type object + * @param {integer} level Number of navigation segments so far + * @return {object} key: Key segment, parameters: key parameters + */ + function entityKey(entityType, level) { + let segment = ''; + const params = []; + const keys = key(entityType) || []; + const properties = propertiesOfStructuredType(entityType); + + keys.forEach((key, index) => { + const suffix = level > 0 ? '_' + level : ''; + if (keyAsSegment) + segment += '/'; + else { + if (index > 0) segment += ','; + if (keys.length != 1) segment += key + '='; + } + let parameter; + let property = {}; + if (typeof key == 'string') { + parameter = key; + property = properties[key]; + } else { + parameter = Object.keys(key)[0]; + const segments = key[parameter].split('/'); + property = properties[segments[0]]; + for (let i = 1; i < segments.length; i++) { + const complexType = modelElement(property.$Type); + const properties = propertiesOfStructuredType(complexType); + property = properties[segments[i]]; + } + } + const propertyType = property.$Type; + segment += pathValuePrefix(propertyType) + '{' + parameter + suffix + '}' + pathValueSuffix(propertyType); + const param = { + description: [property[voc.Core.Description], property[voc.Core.LongDescription]].filter(t => t).join(' \n') + || 'key: ' + parameter, + in: 'path', + name: parameter + suffix, + required: true, + schema: schema(property, '', true) + }; + params.push(param); + }) + return { segment: (keyAsSegment ? '' : '(') + segment + (keyAsSegment ? '' : ')'), parameters: params }; + } + + /** + * Prefix for key value in key segment + * @param {typename} Qualified name of key property type + * @return {string} value prefix + */ + function pathValuePrefix(typename) { + //TODO: handle other Edm types, enumeration types, and type definitions + if (['Edm.Int64', 'Edm.Int32', 'Edm.Int16', 'Edm.SByte', 'Edm.Byte', + 'Edm.Double', 'Edm.Single', 'Edm.Date', 'Edm.DateTimeOffset', 'Edm.Guid'].includes(typename)) return ''; + if (keyAsSegment) return ''; + return `'`; + } + + /** + * Suffix for key value in key segment + * @param {typename} Qualified name of key property type + * @return {string} value prefix + */ + function pathValueSuffix(typename) { + //TODO: handle other Edm types, enumeration types, and type definitions + if (['Edm.Int64', 'Edm.Int32', 'Edm.Int16', 'Edm.SByte', 'Edm.Byte', + 'Edm.Double', 'Edm.Single', 'Edm.Date', 'Edm.DateTimeOffset', 'Edm.Guid'].includes(typename)) return ''; + if (keyAsSegment) return ''; + return `'`; + } + + /** + * Add path and Path Item Object for actions and functions bound to the element + * @param {object} paths Paths Object to augment + * @param {string} prefix Prefix for path + * @param {Array} prefixParameters Parameter Objects for prefix + * @param {object} element Model element the operations are bound to + * @param {string} sourceName Name of path source + * @param {boolean} byKey read by key + */ + function pathItemsForBoundOperations(paths, prefix, prefixParameters, element, sourceName, byKey = false) { + const overloads = boundOverloads[element.$Type + (!byKey && element.$Collection ? '-c' : '')] || []; + overloads.forEach(item => { + if (item.overload.$Kind == 'Action') + pathItemAction(paths, prefix + '/' + item.name, prefixParameters, item.name, item.overload, sourceName); + else + pathItemFunction(paths, prefix + '/' + item.name, prefixParameters, item.name, item.overload, sourceName); + }); + } + + /** + * Add path and Path Item Object for an action import + * @param {object} paths Paths Object to augment + * @param {string} name Name of action import + * @param {object} child Action import object + */ + function pathItemActionImport(paths, name, child) { + const overload = modelElement(child.$Action).find(overload => !overload.$IsBound); + pathItemAction(paths, '/' + name, [], child.$Action, overload, child.$EntitySet, child); + } + + /** + * Add path and Path Item Object for action overload + * @param {object} paths Paths Object to augment + * @param {string} prefix Prefix for path + * @param {Array} prefixParameters Parameter Objects for prefix + * @param {string} actionName Qualified name of function + * @param {object} overload Function overload + * @param {string} sourceName Name of path source + * @param {string} actionImport Action import + */ + function pathItemAction(paths, prefix, prefixParameters, actionName, overload, sourceName, actionImport = {}) { + const name = actionName.indexOf('.') === -1 ? actionName : nameParts(actionName).name; + const pathItem = { + post: { + summary: actionImport[voc.Core.Description] || overload[voc.Core.Description] || 'Invoke action ' + name, + tags: [sourceName || 'Service Operations'], + responses: overload.$ReturnType + ? response(200, 'Success', overload.$ReturnType) + : response(204, 'Success') + } + }; + const description = actionImport[voc.Core.LongDescription] || overload[voc.Core.LongDescription]; + if (description) pathItem.post.description = description; + if (prefixParameters.length > 0) pathItem.post.parameters = prefixParameters; + let parameters = overload.$Parameter || []; + if (overload.$IsBound) parameters = parameters.slice(1); + if (parameters.length > 0) { + const requestProperties = {}; + parameters.forEach(p => { requestProperties[p.$Name] = schema(p) }); + pathItem.post.requestBody = { + description: 'Action parameters', + content: { + 'application/json': { + schema: { + type: 'object', + properties: requestProperties + } + } + } + } + } + paths[prefix] = pathItem; + } + + /** + * Add path and Path Item Object for an action import + * @param {object} paths Paths Object to augment + * @param {string} name Name of function import + * @param {object} child Function import object + */ + function pathItemFunctionImport(paths, name, child) { + const overloads = modelElement(child.$Function); + console.assert(overloads, 'Unknown function "' + child.$Function + '" in function import "' + name + '"'); + overloads && overloads.filter(overload => !overload.$IsBound).forEach(overload => pathItemFunction(paths, '/' + name, [], child.$Function, overload, child.$EntitySet, child)); + } + + /** + * Add path and Path Item Object for function overload + * @param {object} paths Paths Object to augment + * @param {string} prefix Prefix for path + * @param {Array} prefixParameters Parameter Objects for prefix + * @param {string} functionName Qualified name of function + * @param {object} overload Function overload + * @param {string} sourceName Name of path source + * @param {object} functionImport Function Import + */ + function pathItemFunction(paths, prefix, prefixParameters, functionName, overload, sourceName, functionImport = {}) { + const name = functionName.indexOf('.') === -1 ? functionName : nameParts(functionName).name; + let parameters = overload.$Parameter || []; + if (overload.$IsBound) parameters = parameters.slice(1); + + const pathSegments = []; + const params = []; + + const implicitAliases = csdl.$Version > '4.0' || parameters.some(p => p[voc.Core.OptionalParameter]); + + parameters.forEach(p => { + const param = { + required: implicitAliases ? !p[voc.Core.OptionalParameter] : true + }; + const description = [p[voc.Core.Description], p[voc.Core.LongDescription]].filter(t => t).join(' \n'); + if (description) param.description = description; + const type = modelElement(p.$Type || 'Edm.String'); + // TODO: check whether parameter or type definition of Edm.Stream is annotated with JSON.Schema + if (p.$Collection || p.$Type == 'Edm.Stream' + || type && ['ComplexType', 'EntityType'].includes(type.$Kind) + || type && type.$UnderlyingType == 'Edm.Stream') { + param.in = 'query'; + if (implicitAliases) { + param.name = p.$Name; + } else { + pathSegments.push(p.$Name + '=@' + p.$Name); + param.name = '@' + p.$Name; + } + param.schema = { type: 'string' }; + if (description) param.description += ' \n'; else param.description = ''; + param.description += 'This is ' + + (p.$Collection ? 'a ' : '') + + 'URL-encoded JSON ' + + (p.$Collection ? 'array with items ' : '') + + 'of type ' + + namespaceQualifiedName(p.$Type || 'Edm.String') + + ', see [Complex and Collection Literals](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_ComplexandCollectionLiterals)'; + param.example = p.$Collection ? '[]' : '{}'; + } else { + if (implicitAliases) { + param.in = 'query'; + } else { + pathSegments.push(p.$Name + '=' + pathValuePrefix(p.$Type) + '{' + p.$Name + '}' + pathValueSuffix(p.$Type)); + param.in = 'path'; + } + param.name = p.$Name; + param.schema = schema(p, '', true); + } + params.push(param); + }); + + const pathParameters = implicitAliases ? '' : '(' + pathSegments.join(',') + ')'; + const pathItem = { + get: { + summary: functionImport[voc.Core.Description] || overload[voc.Core.Description] || 'Invoke function ' + name, + tags: [sourceName || 'Service Operations'], + parameters: prefixParameters.concat(params), + responses: response(200, 'Success', overload.$ReturnType) + } + }; + const description = functionImport[voc.Core.LongDescription] || overload[voc.Core.LongDescription]; + if (description) pathItem.get.description = description; + paths[prefix + pathParameters] = pathItem; + } + + /** + * Add path and Path Item Object for batch requests + * @param {object} paths Paths Object to augment + * @param {object} container Entity container + */ + function pathItemBatch(paths, container) { + const batchSupport = container[voc.Capabilities.BatchSupport] || {}; + const supported = container[voc.Capabilities.BatchSupported] !== false && batchSupport.Supported !== false; + if (supported) { + const firstEntitySet = Object.keys(container).filter(child => isIdentifier(child) && container[child].$Collection)[0]; + paths['/$batch'] = { + post: { + summary: batchSupport[voc.Core.Description] || 'Send a group of requests', + description: (batchSupport[voc.Core.LongDescription] || 'Group multiple requests into a single request payload, see ' + + '[Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).') + + '\n\n*Please note that "Try it out" is not supported for this request.*', + tags: ['Batch Requests'], + requestBody: { + required: true, + description: 'Batch request', + content: { + 'multipart/mixed;boundary=request-separator': { + schema: { + type: 'string' + }, + example: '--request-separator\n' + + 'Content-Type: application/http\n' + + 'Content-Transfer-Encoding: binary\n\n' + + 'GET ' + firstEntitySet + ' HTTP/1.1\n' + + 'Accept: application/json\n\n' + + '\n--request-separator--' + } + } + }, + responses: { + '4XX': { + $ref: '#/components/responses/error' + } + } + } + }; + paths['/$batch'].post.responses[csdl.$Version < '4.0' ? 202 : 200] = { + description: 'Batch response', + content: { + 'multipart/mixed': { + schema: { + type: 'string' + }, + example: '--response-separator\n' + + 'Content-Type: application/http\n\n' + + 'HTTP/1.1 200 OK\n' + + 'Content-Type: application/json\n\n' + + '{...}' + + '\n--response-separator--' + } + } + }; + } + } + + /** + * Construct Responses Object + * @param {string} code HTTP response code + * @param {string} description Description + * @param {object} type Response type object + */ + function response(code, description, type = {}) { + const r = {}; + r[code] = { + description: description + }; + if (code != 204) { + const s = schema(type); + r[code].content = { + 'application/json': { + schema: type.$Collection + ? { + type: 'object', + title: 'Collection of ' + nameParts(type.$Type || 'Edm.String').name, + properties: { + [csdl.$Version > '4.0' ? '@count' : '@odata.count']: ref('count'), + value: s + } + } + : s + } + }; + } + r['4XX'] = { + $ref: '#/components/responses/error' + } + return r; + } + + /** + * Construct the Components Object from the types of the CSDL document + * @param {object} csdl CSDL document + * @param {object} entityContainer Entity Container object + * @return {object} Components Object + */ + function components(csdl, entityContainer) { + const c = { + schemas: schemas(csdl) + }; + + if (csdl.$EntityContainer) { + c.parameters = parameters(); + c.responses = { + error: { + description: 'Error', + content: { + 'application/json': { + schema: ref('error') + } + } + } + }; + } + + securitySchemes(c, entityContainer) + + return c; + } + + /** + * Construct Schema Objects from the types of the CSDL document + * @param {object} csdl CSDL document + * @return {object} Map of Schema Objects + */ + function schemas(csdl) { + const s = {}; + + Object.keys(csdl).filter(key => isIdentifier(key)).forEach(namespace => { + Object.keys(csdl[namespace]).filter(key => isIdentifier(key)).forEach(name => { + const type = csdl[namespace][name]; + switch (type.$Kind) { + case 'ComplexType': + case 'EntityType': + schemasForStructuredType(s, namespace, name, type); + break; + case 'EnumType': + schemaForEnumerationType(s, namespace, name, type); + break; + case 'TypeDefinition': + schemaForTypeDefinition(s, namespace, name, type); + break; + } + }); + }); + + inlineTypes(s); + + if (csdl.$EntityContainer) { + s.count = count(); + s.error = error(); + } + + return s; + } + + /** + * Construct Schema Objects from the types of the CSDL document + * @param {object} schemas Map of Schema Objects to augment + */ + function inlineTypes(schemas) { + if (typesToInline.geoPoint) { + schemas.geoPoint = { + type: 'object', + properties: { + coordinates: ref('geoPosition'), + type: { + type: 'string', + enum: ['Point'], + default: 'Point' + } + }, + required: ['type', 'coordinates'] + }; + schemas.geoPosition = { + type: 'array', + minItems: 2, + items: { + type: 'number' + } + } + } + } + + /** + * Construct Schema Objects for an enumeration type + * @param {object} schemas Map of Schema Objects to augment + * @param {string} qualifier Qualifier for structured type + * @param {string} name Simple name of structured type + * @param {object} type Structured type + * @return {object} Map of Schemas Objects + */ + function schemaForEnumerationType(schemas, qualifier, name, type) { + const members = []; + Object.keys(type).filter(name => isIdentifier(name)).forEach(name => { + members.push(name); + }); + + const s = { + type: 'string', + title: type[voc.Core.Description] || name, + enum: members + }; + const description = type[voc.Core.LongDescription]; + if (description) s.description = description; + schemas[qualifier + '.' + name] = s; + } + + /** + * Construct Schema Objects for a type definition + * @param {object} schemas Map of Schema Objects to augment + * @param {string} qualifier Qualifier for structured type + * @param {string} name Simple name of structured type + * @param {object} type Structured type + * @return {object} Map of Schemas Objects + */ + function schemaForTypeDefinition(schemas, qualifier, name, type) { + const s = schema(Object.assign({ $Type: type.$UnderlyingType }, type)); + s.title = type[voc.Core.Description] || name; + const description = type[voc.Core.LongDescription]; + if (description) s.description = description; + schemas[qualifier + '.' + name] = s; + } + + /** + * Construct Schema Objects for a structured type + * @param {object} schemas Map of Schema Objects to augment + * @param {string} qualifier Qualifier for structured type + * @param {string} name Simple name of structured type + * @param {object} type Structured type + * @return {object} Map of Schemas Objects + */ + function schemasForStructuredType(schemas, qualifier, name, type) { + const allName = qualifier + '.' + name; + const creName = allName + '-create'; + const updName = allName + '-update'; + const isKey = keyMap(type); + const required = Object.keys(isKey); + const allProperties = {}; + const creProperties = {}; + const updProperties = {}; + + const properties = propertiesOfStructuredType(type); + Object.keys(properties).forEach(name => { + const property = properties[name]; + allProperties[name] = schema(property); + if (property.$Kind == 'NavigationProperty') { + if (property.$Collection) { + allProperties[`${name}@${csdl.$Version === '4.0' ? 'odata.' : ''}count`] = ref('count'); + } + creProperties[name] = schema(property, '-create'); + if (deepUpdate) + updProperties[name] = schema(property, '-create'); + } else { + if (property[voc.Core.Permissions] == 'Read' || property[voc.Core.Computed]) { + let index = required.indexOf(name); + if (index != -1) required.splice(index, 1); + } else { + creProperties[name] = schema(property, '-create'); + if (!isKey[name] && !property[voc.Core.Immutable]) + updProperties[name] = schema(property, '-update'); + } + } + }); + + const title = type[voc.Core.Description] || name; + + schemas[allName] = { + title: title, + type: 'object' + }; + if (Object.keys(allProperties).length > 0) schemas[allName].properties = allProperties; + + schemas[creName] = { + title: title + ' (for create)', + type: 'object', + }; + if (Object.keys(creProperties).length > 0) schemas[creName].properties = creProperties; + if (required.length > 0) schemas[creName].required = required; + + schemas[updName] = { + title: title + ' (for update)', + type: 'object' + }; + if (Object.keys(updProperties).length > 0) schemas[updName].properties = updProperties; + + const description = type[voc.Core.LongDescription]; + if (description) { + schemas[allName].description = description; + schemas[creName].description = description; + schemas[updName].description = description; + } + + if (derivedTypes[allName]) { + schemas[allName].anyOf = []; + schemas[creName].anyOf = []; + schemas[updName].anyOf = []; + derivedTypes[allName].forEach(derivedType => { + schemas[allName].anyOf.push(ref(derivedType)); + schemas[creName].anyOf.push(ref(derivedType, '-create')); + schemas[updName].anyOf.push(ref(derivedType, '-update')); + }); + if (!type.$Abstract) { + schemas[allName].anyOf.push({}); + schemas[creName].anyOf.push({}); + schemas[updName].anyOf.push({}); + } + } + } + + /** + * Collect all properties of a structured type along the inheritance hierarchy + * @param {object} type Structured type + * @return {object} Map of properties + */ + function propertiesOfStructuredType(type) { + const properties = (type && type.$BaseType) ? propertiesOfStructuredType(modelElement(type.$BaseType)) : {}; + if (type) { + Object.keys(type).filter(name => isIdentifier(name)).forEach(name => { + properties[name] = type[name]; + }); + } + return properties; + } + + /** + * Construct Parameter Objects for type-independent OData system query options + * @return {object} Map of Parameter Objects + */ + function parameters() { + const param = { + top: { + name: queryOptionPrefix + 'top', + in: 'query', + description: 'Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)', + schema: { + type: 'integer', + minimum: 0 + }, + example: 50 + }, + skip: { + name: queryOptionPrefix + 'skip', + in: 'query', + description: 'Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)', + schema: { + type: 'integer', + minimum: 0 + } + }, + count: { + name: queryOptionPrefix + 'count', + in: 'query', + description: 'Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)', + schema: { + type: 'boolean' + } + } + }; + + if (csdl.$Version >= '4.0') param.search = { + name: queryOptionPrefix + 'search', + in: 'query', + description: 'Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)', + schema: { + type: 'string' + } + }; + + return param; + } + + /** + * Construct OData error response + * @return {object} Error response schema + */ + function error() { + const err = { + type: 'object', + required: ['error'], + properties: { + error: { + type: 'object', + required: ['code', 'message'], + properties: { + code: { type: 'string' }, + message: { type: 'string' }, + target: { type: 'string' }, + details: { + type: 'array', + items: { + type: 'object', + required: ['code', 'message'], + properties: { + code: { type: 'string' }, + message: { type: 'string' }, + target: { type: 'string' } + } + } + }, + innererror: { + type: 'object', + description: 'The structure of this object is service-specific' + } + } + } + } + }; + + if (csdl.$Version < '4.0') { + err.properties.error.properties.message = { + type: 'object', + properties: { + lang: { type: 'string' }, + value: { type: 'string' } + }, + required: ['lang', 'value'] + }; + delete err.properties.error.properties.details; + delete err.properties.error.properties.target; + } + + return err; + } + + /** + * Construct OData count response + * @return {object} Count response schema + */ + function count() { + return { + anyOf: [ + { type: 'number' }, + { type: 'string' } + ], + description: 'The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option.', + }; + } + + /** + * Construct Schema Object for model object referencing a type + * @param {object} modelElement referencing a type + * @return {object} Schema Object + */ + function schema(element, suffix = '', forParameter = false) { + let s = {}; + switch (element.$Type) { + case 'Edm.AnnotationPath': + case 'Edm.ModelElementPath': + case 'Edm.NavigationPropertyPath': + case 'Edm.PropertyPath': + s.type = 'string'; + break; + case 'Edm.Binary': + s = { + type: 'string', + format: 'base64url' + }; + if (element.$MaxLength) s.maxLength = Math.ceil(4 * element.$MaxLength / 3); + break; + case 'Edm.Boolean': + s.type = 'boolean'; + break; + case 'Edm.Byte': + s = { + type: 'integer', + format: 'uint8' + }; + break; + case 'Edm.Date': + s = { + type: 'string', + format: 'date', + example: '2017-04-13' + }; + break; + case 'Edm.DateTime': + case 'Edm.DateTimeOffset': + s = { + type: 'string', + format: 'date-time', + example: '2017-04-13T15:51:04' + (isNaN(element.$Precision) || element.$Precision === 0 ? '' : '.' + '0'.repeat(element.$Precision)) + 'Z' + }; + break; + case 'Edm.Decimal': + s = { + anyOf: [{ type: 'number' }, { type: 'string' }], + format: 'decimal', + example: 0 + }; + let scale = !isNaN(element.$Scale) ? element.$Scale : null; + if (scale !== null) { + // Node.js 12.13.0 has problems with negative exponents, 10 ** -5 --> 0.000009999999999999999 + if (scale <= 0) + s.multipleOf = 10 ** -scale; + else + s.multipleOf = 1 / 10 ** scale; + } + if (element.$Precision < 16) { + let limit = 10 ** (element.$Precision - scale); + let delta = 10 ** -scale; + s.maximum = limit - delta; + s.minimum = -s.maximum; + } + break; + case 'Edm.Double': + s = { + anyOf: [{ type: 'number' }, { type: 'string' }], + format: 'double', + example: 3.14 + }; + break; + case 'Edm.Duration': + s = { + type: 'string', + format: 'duration', + example: 'P4DT15H51M04S' + }; + break; + case 'Edm.GeographyPoint': + case 'Edm.GeometryPoint': + s = ref('geoPoint'); + typesToInline.geoPoint = true; + break; + case 'Edm.Guid': + s = { + type: 'string', + format: 'uuid', + example: '01234567-89ab-cdef-0123-456789abcdef' + }; + break; + case 'Edm.Int16': + s = { + type: 'integer', + format: 'int16' + }; + break; + case 'Edm.Int32': + s = { + type: 'integer', + format: 'int32' + }; + break; + case 'Edm.Int64': + s = { + anyOf: [{ type: 'integer' }, { type: 'string' }], + format: 'int64', + example: "42" + }; + break; + case 'Edm.PrimitiveType': + s = { + anyOf: [{ type: 'boolean' }, { type: 'number' }, { type: 'string' }] + }; + break; + case 'Edm.SByte': + s = { + type: 'integer', + format: 'int8' + }; + break; + case 'Edm.Single': + s = { + anyOf: [{ type: 'number' }, { type: 'string' }], + format: 'float', + example: 3.14 + }; + break; + case 'Edm.Stream': + let jsonSchema = element[voc.JSON.Schema]; + if (jsonSchema) { + if (typeof jsonSchema == 'string') + s = JSON.parse(jsonSchema); + else + s = jsonSchema; + } else { + s = { + type: 'string', + format: 'base64url' + }; + } + break; + case 'Edm.String': + case undefined: + s.type = 'string'; + if (element.$MaxLength) s.maxLength = element.$MaxLength; + allowedValues(s, element); + pattern(s, element); + break; + case 'Edm.TimeOfDay': + s = { + type: 'string', + format: 'time', + example: '15:51:04' + }; + break; + default: + if (element.$Type.startsWith('Edm.')) { + console.warn('Unknown type: ' + element.$Type); + } else { + let type = modelElement(element.$Type); + let isStructured = type && ['ComplexType', 'EntityType'].includes(type.$Kind); + s = ref(element.$Type, (isStructured ? suffix : '')); + if (element.$MaxLength) { + s = { + anyOf: [s], + maxLength: element.$MaxLength + }; + } + } + } + + if (element.$Nullable) { + if (s.$ref) s = { anyOf: [s] }; + s.nullable = true; + } + + if (element.$DefaultValue !== undefined) { + if (s.$ref) s = { anyOf: [s] }; + s.default = element.$DefaultValue; + } + + if (element[voc.Core.Example]) { + if (s.$ref) s = { anyOf: [s] }; + s.example = element[voc.Core.Example].Value; + } + + if (element[voc.Validation.Maximum] != undefined) { + if (s.$ref) s = { anyOf: [s] }; + s.maximum = element[voc.Validation.Maximum]; + if (element[voc.Validation.Maximum + voc.Validation.Exclusive]) s.exclusiveMaximum = true; + } + + if (element[voc.Validation.Minimum] != undefined) { + if (s.$ref) s = { anyOf: [s] }; + s.minimum = element[voc.Validation.Minimum]; + if (element[voc.Validation.Minimum + voc.Validation.Exclusive]) s.exclusiveMinimum = true; + } + + if (element.$Collection) { + s = { + type: 'array', + items: s + }; + } + + if (!forParameter && element[voc.Core.Description]) { + if (s.$ref) s = { anyOf: [s] }; + s.title = element[voc.Core.Description]; + } + + if (!forParameter && element[voc.Core.LongDescription]) { + if (s.$ref) s = { anyOf: [s] }; + s.description = element[voc.Core.LongDescription]; + } + + return s; + } + + /** + * Add allowed values enum to Schema Object for string-like model element + * @param {object} schema Schema Object to augment + * @param {object} element Model element + */ + function allowedValues(schema, element) { + const values = element[voc.Validation.AllowedValues]; + if (values) schema.enum = values.map(record => record.Value); + } + + /** + * Add pattern to Schema Object for string-like model element + * @param {object} schema Schema Object to augment + * @param {object} element Model element + */ + function pattern(schema, element) { + const pattern = element[voc.Validation.Pattern]; + if (pattern) schema.pattern = pattern; + } + + /** + * Construct Reference Object for a type + * @param {string} typename Qualified name of referenced type + * @param {string} suffix Optional suffix for referenced schema + * @return {object} Reference Object + */ + function ref(typename, suffix = '') { + let name = typename; + let nsp = ''; + let url = ''; + if (typename.indexOf('.') != -1) { + let parts = nameParts(typename); + nsp = namespace[parts.qualifier]; + name = nsp + '.' + parts.name; + url = namespaceUrl[nsp] || ''; + //TODO: introduce better way than guessing + if (url.endsWith('.xml')) url = url.substr(0, url.length - 3) + 'openapi3.json'; + } + return { + $ref: url + '#/components/schemas/' + name + suffix + }; + } + + /** + * Augment Components Object with map of Security Scheme Objects + * @param {object} components Components Object to augment + * @param {object} entityContainer Entity Container object + */ + function securitySchemes(components, entityContainer) { + const authorizations = entityContainer[voc.Authorization.Authorizations] || []; + const schemes = {}; + const location = { Header: 'header', QueryOption: 'query', Cookie: 'cookie' }; + authorizations.forEach(auth => { + const scheme = {}; + const flow = {}; + if (auth.Description) scheme.description = auth.Description; + const qualifiedType = auth['@type'] || auth['@odata.type'] + const type = qualifiedType.substr(qualifiedType.lastIndexOf('.') + 1); + let unknown = false + switch (type) { + case 'ApiKey': + scheme.type = 'apiKey'; + scheme.name = auth.KeyName; + scheme.in = location[auth.Location]; + break; + case 'Http': + scheme.type = 'http'; + scheme.scheme = auth.Scheme; + scheme.bearerFormat = auth.BearerFormat; + break; + case 'OAuth2AuthCode': + scheme.type = 'oauth2'; + scheme.flows = { authorizationCode: flow }; + flow.authorizationUrl = auth.AuthorizationUrl; + flow.tokenUrl = auth.TokenUrl; + if (auth.RefreshUrl) flow.refreshUrl = auth.RefreshUrl; + flow.scopes = scopes(auth); + break; + case 'OAuth2ClientCredentials': + scheme.type = 'oauth2'; + scheme.flows = { clientCredentials: flow }; + flow.tokenUrl = auth.TokenUrl; + if (auth.RefreshUrl) flow.refreshUrl = auth.RefreshUrl; + flow.scopes = scopes(auth); + break; + case 'OAuth2Implicit': + scheme.type = 'oauth2'; + scheme.flows = { implicit: flow }; + flow.authorizationUrl = auth.AuthorizationUrl; + if (auth.RefreshUrl) flow.refreshUrl = auth.RefreshUrl; + flow.scopes = scopes(auth); + break; + case 'OAuth2Password': + scheme.type = 'oauth2'; + scheme.flows = {}; + scheme.flows = { password: flow }; + flow.tokenUrl = auth.TokenUrl; + if (auth.RefreshUrl) flow.refreshUrl = auth.RefreshUrl; + flow.scopes = scopes(auth); + break; + case 'OpenIDConnect': + scheme.type = 'openIdConnect'; + scheme.openIdConnectUrl = auth.IssuerUrl; + break; + default: + unknown = true + console.warn('Unknown Authorization type ' + qualifiedType); + } + if (!unknown) schemes[auth.Name] = scheme; + }); + if (Object.keys(schemes).length > 0) components.securitySchemes = schemes + } + + function scopes(authorization) { + const scopes = {}; + authorization.Scopes.forEach(scope => { scopes[scope.Scope] = scope.Description }); + return scopes; + } + + /** + * Augment OpenAPI document with Security Requirements Object + * @param {object} openapi OpenAPI document to augment + * @param {object} entityContainer Entity Container object + */ + function security(openapi, entityContainer) { + const securitySchemes = entityContainer[voc.Authorization.SecuritySchemes] || []; + if (securitySchemes.length > 0) openapi.security = []; + securitySchemes.forEach(scheme => { + const s = {}; + s[scheme.Authorization] = scheme.RequiredScopes || []; + openapi.security.push(s); + }); + } + + /** + * a qualified name consists of a namespace or alias, a dot, and a simple name + * @param {string} qualifiedName + * @return {string} namespace-qualified name + */ + function namespaceQualifiedName(qualifiedName) { + let np = nameParts(qualifiedName); + return namespace[np.qualifier] + '.' + np.name; + } + + /** + * a qualified name consists of a namespace or alias, a dot, and a simple name + * @param {string} qualifiedName + * @return {object} with components qualifier and name + */ + function nameParts(qualifiedName) { + const pos = qualifiedName.lastIndexOf('.'); + console.assert(pos > 0, 'Invalid qualified name ' + qualifiedName); + return { + qualifier: qualifiedName.substring(0, pos), + name: qualifiedName.substring(pos + 1) + }; + } + + /** + * an identifier does not start with $ and does not contain @ + * @param {string} name + * @return {boolean} name is an identifier + */ + function isIdentifier(name) { + return !name.startsWith('$') && !name.includes('@'); + } + +} + + +/** + * Delete referenced Schema and Parameter Objects from an OpenAPI description + * @param {object} openapi OpenAPI description + */ +module.exports.deleteUnreferencedSchemas = function (openapi) { + var referenced; + var deleted; + + while (true) { + referenced = {}; + getReferencedSchemas(openapi, referenced); + deleted = deleteUnreferenced(openapi.components.schemas, referenced, '#/components/schemas/'); + if (!deleted) break; + } + + deleteUnreferenced(openapi.components.parameters, referenced, '#/components/parameters/'); + if (Object.keys(openapi.components.parameters || {}).length == 0) { + delete openapi.components.parameters; + } + + return; + + + /** + * Get unreferenced Schema and Parameter Objects recursively + * @param {object} openapi OpenAPI description + * @param {object} referenced Map of referenced objects + */ + function getReferencedSchemas(document, referenced) { + Object.keys(document).forEach(key => { + let value = document[key]; + if (key == '$ref') { + referenced[value] = true; + } else { + if (Array.isArray(value)) { + value.forEach(item => getReferencedSchemas(item, referenced)) + } else if (typeof value == 'object' && value != null) { + getReferencedSchemas(value, referenced); + } + } + }); + } + + /** + * Delete unreferenced Schema and Parameter Objects recursively + * @param {object} schemas Map of Schema and Parameter Objects + * @param {object} referenced Map of referenced objects + * @param {string} prefix Prefix used within referenced + */ + function deleteUnreferenced(schemas, referenced, prefix) { + var deleted = false; + + Object.keys(schemas || {}).forEach(key => { + if (!referenced[prefix + key]) { + delete schemas[key]; + deleted = true; + } + }); + + return deleted; + } +} diff --git a/odata-openapi/lib/transform.js b/odata-openapi/lib/transform.js new file mode 100644 index 00000000..48a8fb27 --- /dev/null +++ b/odata-openapi/lib/transform.js @@ -0,0 +1,36 @@ +#!/usr/bin/env node +'use strict'; + +const csdl = require('odata-csdl'); +const lib = require('./csdl2openapi'); +const fs = require('fs'); + +const exampleFolder = './examples/'; + +const basePath = { + example: '/V4/OData/(S(nsga2k1tyctb0cn0ofcgcn4o))/OData.svc', + Northwind: '/V4/Northwind/Northwind.svc', + TripPin: '/V4/(S(cnbm44wtbc1v5bgrlek5lpcc))/TripPinServiceRW', + 'odata-rw-v3': '/V3/(S(1urrjxgkuh4r30yqim0hqrtj))/OData/OData.svc', + 'Northwind-V3': '/V3/Northwind/Northwind.svc' +}; + +fs.readdirSync(exampleFolder).filter(fn => fn.endsWith('.xml')).forEach(xmlfile => { + const example = xmlfile.substring(0, xmlfile.lastIndexOf('.')); + console.log(xmlfile); + + const xml = fs.readFileSync(exampleFolder + xmlfile, 'utf8'); + const json = csdl.xml2json(xml, false); + + const openapi = lib.csdl2openapi( + json, + { + scheme: 'https', + host: basePath[example] ? 'services.odata.org' : 'localhost', + basePath: basePath[example] || '/service-root', + diagram: true + } + ); + + fs.writeFileSync(exampleFolder + example + '.openapi3.json', JSON.stringify(openapi, null, 4)); +}); \ No newline at end of file diff --git a/odata-openapi/package-lock.json b/odata-openapi/package-lock.json new file mode 100644 index 00000000..2db73228 --- /dev/null +++ b/odata-openapi/package-lock.json @@ -0,0 +1,1147 @@ +{ + "name": "odata-openapi", + "version": "0.5.5", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "dev": true, + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mocha": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.1.tgz", + "integrity": "sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==", + "dev": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.3.1", + "debug": "3.2.6", + "diff": "4.0.2", + "escape-string-regexp": "1.0.5", + "find-up": "4.1.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "object.assign": "4.1.0", + "promise.allsettled": "1.0.2", + "serialize-javascript": "4.0.0", + "strip-json-comments": "3.0.1", + "supports-color": "7.1.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.0", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "odata-csdl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/odata-csdl/-/odata-csdl-0.1.1.tgz", + "integrity": "sha512-eKsFaRWaq2nEe34TkXgO0RjivzW6dPXCtU4TLOy5MKqP6a3yIaMb22bXiQhfkYeAlP4TktIh8i4gDUPIXuJ2gw==", + "requires": { + "minimist": "^1.2.5", + "sax": "^1.2.4" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "promise.allsettled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", + "dev": true, + "requires": { + "array.prototype.map": "^1.0.1", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "workerpool": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", + "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", + "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "decamelize": "^1.2.0", + "flat": "^4.1.0", + "is-plain-obj": "^1.1.0", + "yargs": "^14.2.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + } + } +} diff --git a/odata-openapi/package.json b/odata-openapi/package.json new file mode 100644 index 00000000..85575f43 --- /dev/null +++ b/odata-openapi/package.json @@ -0,0 +1,32 @@ +{ + "name": "odata-openapi", + "version": "0.5.5", + "description": "Convert OData CSDL XML or CSDL JSON to OpenAPI", + "homepage": "https://github.com/oasis-tcs/odata-openapi/blob/master/lib/README.md", + "bugs": "https://github.com/oasis-tcs/odata-openapi/issues", + "repository": { + "type": "git", + "url": "https://github.com/oasis-tcs/odata-openapi.git" + }, + "files": [ + "lib/*" + ], + "bin": { + "odata-openapi3": "lib/cli.js" + }, + "main": "lib/csdl2openapi.js", + "dependencies": { + "minimist": "^1.2.5", + "odata-csdl": "^0.1.1" + }, + "devDependencies": { + "mocha": "^8.1.1" + }, + "scripts": { + "build": "node lib/transform.js", + "test": "mocha", + "watch": "mocha --watch" + }, + "author": "", + "license": "SEE LICENSE IN LICENSE.md" +} diff --git a/odata-openapi/test/csdl2openapi.test.js b/odata-openapi/test/csdl2openapi.test.js new file mode 100644 index 00000000..8695caa6 --- /dev/null +++ b/odata-openapi/test/csdl2openapi.test.js @@ -0,0 +1,1739 @@ +const assert = require('assert'); +const fs = require('fs'); + +//TODO: +// title/description on action/function (import), with fallback from import to action/function +// title/description on action/function return type +// title/description on path parameters for keys +// title/description on entity types for POST and PATCH request bodies +// tags: Core.Description on entity type as fallback for description on entity set/singleton +// Nullable on action/function return type +// deleteUnreferencedSchemas +// @JSON.Schema +// @Core.Example +// reference undefined type: silent for included schema, warning for local schema +// key-aliases: one and more segments +// navigation properties inherited from base type A.n1 -> B.n2 -> C.n3 +// collection-navigation to entity type without key or unknown entity type: suppress path item with key segment +// remaining Edm types, especially Geo* - see odata-definitions.json +// (external) annotations on actions, functions, parameters, returntype +// control mapping of reference URLs + +const csdl = require('odata-csdl'); +const lib = require('../lib/csdl2openapi'); + +const example1 = csdl.xml2json(fs.readFileSync('examples/csdl-16.1.xml')); +const result1 = require('../examples/csdl-16.1.openapi3.json'); + +const example2 = csdl.xml2json(fs.readFileSync('examples/TripPin.xml')); +const result2 = require('../examples/TripPin.openapi3.json'); + +const example3 = csdl.xml2json(fs.readFileSync('examples/miscellaneous.xml')); +const result3 = require('../examples/miscellaneous.openapi3.json'); + +const example4 = csdl.xml2json(fs.readFileSync('examples/example.xml')); +const result4 = require('../examples/example.openapi3.json'); + +const example5 = csdl.xml2json(fs.readFileSync('examples/annotations.xml')); +const result5 = require('../examples/annotations.openapi3.json'); + +const example6 = csdl.xml2json(fs.readFileSync('examples/containment.xml')); +const result6 = require('../examples/containment.openapi3.json'); + +const example7 = csdl.xml2json(fs.readFileSync('examples/authorization.xml')); +const result7 = require('../examples/authorization.openapi3.json'); + +const example8 = csdl.xml2json(fs.readFileSync('examples/descriptions.xml')); +const result8 = require('../examples/descriptions.openapi3.json'); + +const example9 = csdl.xml2json(fs.readFileSync('examples/odata-rw-v3.xml')); +const result9 = require('../examples/odata-rw-v3.openapi3.json'); + + +describe('Examples', function () { + + it('csdl-16.1', function () { + const openapi = lib.csdl2openapi(example1, { diagram: true }); + check(openapi, result1); + }) + + it('TripPin', function () { + const openapi = lib.csdl2openapi(example2, { + host: 'services.odata.org', + basePath: '/V4/(S(cnbm44wtbc1v5bgrlek5lpcc))/TripPinServiceRW', + diagram: true + }); + check(openapi, result2); + }) + + it('miscellaneous', function () { + const openapi = lib.csdl2openapi(example3, { diagram: true }); + check(openapi, result3); + }) + + it('example', function () { + const openapi = lib.csdl2openapi(example4, { + host: 'services.odata.org', + basePath: '/V4/OData/(S(nsga2k1tyctb0cn0ofcgcn4o))/OData.svc', + diagram: true + }); + check(openapi, result4); + }) + + it('annotations', function () { + const openapi = lib.csdl2openapi(example5, { diagram: true }); + check(openapi, result5); + }) + + it('containment', function () { + const openapi = lib.csdl2openapi(example6, { diagram: true }); + check(openapi, result6); + }) + + it('authorization', function () { + const openapi = lib.csdl2openapi(example7, { diagram: true }); + check(openapi, result7); + }) + + it('descriptions', function () { + const openapi = lib.csdl2openapi(example8, { diagram: true }); + check(openapi, result8); + }) + + it('odata-rw-v3', function () { + const openapi = lib.csdl2openapi(example9, { + host: 'services.odata.org', + basePath: '/V3/(S(1urrjxgkuh4r30yqim0hqrtj))/OData/OData.svc', + diagram: true + }); + check(openapi, result9); + }) +}) + +describe('Edge cases', function () { + + it('empty input', function () { + const csdl = {}; + const expected = { + openapi: '3.0.2', + info: { + title: 'OData CSDL document', + description: '', + version: '' + }, + paths: {}, + components: { schemas: {} } + }; + const openapi = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(openapi, expected, 'Empty CSDL document'); + }) + + it('only types', function () { + const csdl = { + $Reference: { dummy: { '$Include': [{ '$Namespace': 'Org.OData.Core.V1', '$Alias': 'Core' }] } }, + ReuseTypes: { + entityType: { + '@Core.Description': 'Core.Description', + $Kind: 'EntityType', + $Key: ['key'], + key: {} + }, + typeDefinition: { $Kind: 'TypeDefinition', $UnderlyingType: 'Edm.DateTimeOffset' }, + typeDefinition3: { $Kind: 'TypeDefinition', $UnderlyingType: 'Edm.DateTimeOffset', $Precision: 3 } + } + }; + const expected = { + openapi: '3.0.2', + info: { + title: 'OData CSDL document', + description: '', + version: '' + }, + paths: {}, + components: { + schemas: { + 'ReuseTypes.entityType': { + type: 'object', + title: 'Core.Description', + properties: { + key: { type: 'string' } + } + }, + 'ReuseTypes.entityType-create': { + type: 'object', + title: 'Core.Description (for create)', + properties: { + key: { type: 'string' } + }, + required: ['key'] + }, + 'ReuseTypes.entityType-update': { + type: 'object', + title: 'Core.Description (for update)' + }, + 'ReuseTypes.typeDefinition': { + title: 'typeDefinition', type: 'string', format: 'date-time', example: '2017-04-13T15:51:04Z' + }, + 'ReuseTypes.typeDefinition3': { + title: 'typeDefinition3', type: 'string', format: 'date-time', example: '2017-04-13T15:51:04.000Z' + } + } + } + }; + const openapi = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(openapi, expected, 'Empty CSDL document'); + }) + + it('circular reference on collect primitive paths', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + source: { + $Kind: 'EntityType', + $Key: ['s_id'], + s_id: {}, + complex1: { $Type: 'this.complex1' }, + complex2: { $Type: 'this.complex2' }, + }, + complex1: { + $Kind: 'ComplexType', + beforeComplex2: {}, + complex2: { $Type: 'this.complex2' }, + afterComplex2: {} + }, + complex2: { + $Kind: 'ComplexType', + beforeComplex1: {}, + complex1: { $Type: 'this.complex1' }, + afterComplex1: {} + }, + Container: { + sources: { $Type: 'this.source', $Collection: true }, + } + } + }; + + expected_sources_get_param = { + description: 'Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)', + explode: false, + in: 'query', + name: 'orderby', + schema: { + items: { + enum: [ + 's_id', + 's_id desc', + 'complex1/beforeComplex2', + 'complex1/beforeComplex2 desc', + 'complex1/complex2/beforeComplex1', + 'complex1/complex2/beforeComplex1 desc', + 'complex1/complex2/afterComplex1', + 'complex1/complex2/afterComplex1 desc', + 'complex1/afterComplex2', + 'complex1/afterComplex2 desc', + 'complex2/beforeComplex1', + 'complex2/beforeComplex1 desc', + 'complex2/complex1/beforeComplex2', + 'complex2/complex1/beforeComplex2 desc', + 'complex2/complex1/afterComplex2', + 'complex2/complex1/afterComplex2 desc', + 'complex2/afterComplex1', + 'complex2/afterComplex1 desc' + ], + type: 'string' + }, + type: 'array', + uniqueItems: true + } + } + + const openapi = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(openapi.paths['/sources'].get.parameters[4], expected_sources_get_param); + }) + + it('type definition with @JSON.Schema', function () { + const csdl = { + $Reference: { + dummy: { + '$Include': [ + { '$Namespace': 'Org.OData.Core.V1', '$Alias': 'Core' }, + { '$Namespace': 'Org.OData.JSON.V1', '$Alias': 'JSON' } + ] + } + }, + jsonExamples: { + typeDefinitionOld: { + $Kind: 'TypeDefinition', + $UnderlyingType: 'Edm.Stream', + "@JSON.Schema": "{\"type\":\"object\",\"additionalProperties\":false,\"patternProperties\":{\"^[\\\\w\\\\.\\\\-\\\\/]+$\":{\"type\":\"string\"}}}" + }, + typeDefinitionNew: { + $Kind: 'TypeDefinition', + $UnderlyingType: 'Edm.Stream', + "@JSON.Schema": { + type: 'object', + additionalProperties: false, + patternProperties: { "^[\\w\\.\\-\\/]+$": { type: 'string' } } + } + } + } + }; + const expected = { + openapi: '3.0.2', + info: { + title: 'OData CSDL document', + description: '', + version: '' + }, + paths: {}, + components: { + schemas: { + 'jsonExamples.typeDefinitionOld': { + title: 'typeDefinitionOld', + type: 'object', + additionalProperties: false, + patternProperties: { + "^[\\w\\.\\-\\/]+$": { type: 'string' } + } + }, + 'jsonExamples.typeDefinitionNew': { + title: 'typeDefinitionNew', + type: 'object', + additionalProperties: false, + patternProperties: { + "^[\\w\\.\\-\\/]+$": { type: 'string' } + } + } + } + } + }; + const openapi = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(openapi, expected, 'Empty CSDL document'); + }) + + it('type definition with @Org.OData.JSON.V1.Schema', function () { + const csdl = { + $Reference: { + dummy: { + '$Include': [ + { '$Namespace': 'Org.OData.Core.V1'}, + { '$Namespace': 'Org.OData.JSON.V1'} + ] + } + }, + jsonExamples: { + typeDefinitionOld: { + $Kind: 'TypeDefinition', + $UnderlyingType: 'Edm.Stream', + "@Org.OData.JSON.V1.Schema": "{\"type\":\"object\",\"additionalProperties\":false,\"patternProperties\":{\"^[\\\\w\\\\.\\\\-\\\\/]+$\":{\"type\":\"string\"}}}" + }, + typeDefinitionNew: { + $Kind: 'TypeDefinition', + $UnderlyingType: 'Edm.Stream', + "@Org.OData.JSON.V1.Schema": { + type: 'object', + additionalProperties: false, + patternProperties: { "^[\\w\\.\\-\\/]+$": { type: 'string' } } + } + } + } + }; + const expected = { + openapi: '3.0.2', + info: { + title: 'OData CSDL document', + description: '', + version: '' + }, + paths: {}, + components: { + schemas: { + 'jsonExamples.typeDefinitionOld': { + title: 'typeDefinitionOld', + type: 'object', + additionalProperties: false, + patternProperties: { + "^[\\w\\.\\-\\/]+$": { type: 'string' } + } + }, + 'jsonExamples.typeDefinitionNew': { + title: 'typeDefinitionNew', + type: 'object', + additionalProperties: false, + patternProperties: { + "^[\\w\\.\\-\\/]+$": { type: 'string' } + } + } + } + } + }; + const openapi = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(openapi, expected, 'Empty CSDL document'); + }) + + it('no key', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + NoKey: { $Kind: 'EntityType' }, + Container: { Set: { $Collection: true, $Type: 'this.NoKey' } } + } + }; + const expected = { + paths: { + '/Set': { get: {}, post: {} }, + '/$batch': { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + }) + + it('base type not found', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + Derived: { $Kind: 'EntityType', $BaseType: 'this.Base' }, + Container: { Set: { $Collection: true, $Type: 'this.Derived' } } + } + }; + const expected = { + paths: { + '/Set': { get: {}, post: {} }, + '/$batch': { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + }) + + it('no inherited key', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + Base: { $Kind: 'EntityType' }, + Derived: { $Kind: 'EntityType', $BaseType: 'this.Base' }, + Container: { Set: { $Collection: true, $Type: 'this.Derived' } } + } + }; + const expected = { + paths: { + '/Set': { get: {}, post: {} }, + '/$batch': { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + }) + + it('inherited key, BatchSupport/Supported:false', function () { + const csdl = { + $EntityContainer: 'this.Container', + $Reference: { dummy: { $Include: [{ $Namespace: 'Org.OData.Capabilities.V1', $Alias: 'Capabilities' }] } }, + this: { + Base: { $Kind: 'EntityType', $Key: ['key'], key: {} }, + Derived: { $Kind: 'EntityType', $BaseType: 'this.Base' }, + Container: { + '@Capabilities.BatchSupport': { Supported: false }, + Set: { $Collection: true, $Type: 'this.Derived' } + } + } + }; + const expected = { + paths: { + '/Set': { get: {}, post: {} }, + "/Set('{key}')": { get: {}, patch: {}, delete: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + }) + + it('key-as-segment', function () { + const csdl = { + $Reference: { + dummy: { + '$Include': [ + { '$Namespace': 'Org.OData.Core.V1', '$Alias': 'Core' }, + { '$Namespace': 'Org.OData.Capabilities.V1', '$Alias': 'Capabilities' } + ] + } + }, + $EntityContainer: 'this.Container', + this: { + Type: { $Kind: 'EntityType', $Key: ['key'], key: {} }, + Type2: { $Kind: 'EntityType', $Key: ['key1', 'key2'], key1: {}, key2: {} }, + Container: { + '@Capabilities.BatchSupport': { + '@Core.Description': 'BatchSupport - Description', + '@Core.LongDescription': 'BatchSupport - LongDescription' + }, + '@Capabilities.KeyAsSegmentSupported': true, + Set: { $Collection: true, $Type: 'this.Type' }, + Set2: { $Collection: true, $Type: 'this.Type2' } + } + } + } + const expected = { + paths: { + '/Set': { get: {}, post: {} }, + '/Set/{key}': { get: {}, patch: {}, delete: {} }, + '/Set2': { get: {}, post: {} }, + '/Set2/{key1}/{key2}': { get: {}, patch: {}, delete: {} }, + '/$batch': { post: {} } + } + } + const actual = lib.csdl2openapi(csdl); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.equal(actual.paths['/$batch'].post.summary, 'BatchSupport - Description', 'Batch summary'); + assert.equal(actual.paths['/$batch'].post.description, 'BatchSupport - LongDescription\n\n*Please note that "Try it out" is not supported for this request.*', 'Batch description'); + }) + + it('function without parameters', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + NoParameters: [{ $Kind: 'Function', $ReturnType: {} }], + Container: { fun: { $Function: 'this.NoParameters' } } + } + }; + const expected = { + paths: { + '/fun()': { get: {} }, + '/$batch': { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + }) + + it('function with complex and collection parameter', function () { + const csdl = { + $Reference: { dummy: { '$Include': [{ '$Namespace': 'Org.OData.Core.V1', '$Alias': 'Core' }] } }, + $EntityContainer: 'this.Container', + this: { + Complex: { $Kind: 'ComplexType', $OpenType: true }, + ComplexParameters: [{ + $Kind: 'Function', + $Parameter: [ + { $Name: 'complex', $Type: 'this.Complex', '@Core.Description': 'param description' }, + { $Name: 'collection', $Collection: true } + ], + $ReturnType: {} + }], + Container: { fun: { $Function: 'this.ComplexParameters' } } + } + }; + const expected = { paths: { '/$batch': { post: {} } } }; + const path = '/fun(complex=@complex,collection=@collection)'; + expected.paths[path] = { + get: { + parameters: [ + { + name: '@complex', in: 'query', required: true, schema: { type: 'string' }, + example: '{}', + description: 'param description \nThis is URL-encoded JSON of type this.Complex, see [Complex and Collection Literals](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_ComplexandCollectionLiterals)' + }, + { + name: '@collection', in: 'query', required: true, schema: { type: 'string' }, + example: '[]', + description: 'This is a URL-encoded JSON array with items of type Edm.String, see [Complex and Collection Literals](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_ComplexandCollectionLiterals)' + } + ] + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual(actual.paths[path].get.parameters, expected.paths[path].get.parameters, 'function parameters'); + }) + + it('return type with facets', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + fun: [ + { $Kind: 'Function', $ReturnType: { $MaxLength: 20 } }, + { $Kind: 'Function', $Parameter: [{ $Name: 'in' }], $ReturnType: { $Collection: true, $MaxLength: 20 } } + ], + Container: { fun: { $Function: 'this.fun' } } + } + }; + const expected = { + paths: { + '/fun()': { + get: { + responses: { + 200: { + description: 'Success', + content: { + 'application/json': { + schema: { + type: 'string', + maxLength: 20 + } + } + } + } + } + } + }, + "/fun(in='{in}')": { + get: { + responses: { + 200: { + description: 'Success', + content: { + 'application/json': { + schema: { + type: 'object', + title: 'Collection of String', + properties: { + '@odata.count': { + $ref: '#/components/schemas/count' + }, + value: { + type: 'array', + items: { + type: 'string', + maxLength: 20 + } + } + } + } + } + } + } + } + } + }, + '/$batch': { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual( + actual.paths['/fun()'].get.responses[200], + expected.paths['/fun()'].get.responses[200], 'fun'); + assert.deepStrictEqual( + actual.paths["/fun(in='{in}')"].get.responses[200], + expected.paths["/fun(in='{in}')"].get.responses[200], 'fun(in)'); + }) + + it('delta link, no $batch', function () { + const csdl = { + $Reference: { dummy: { "$Include": [{ "$Namespace": "Org.OData.Capabilities.V1", "$Alias": "Capa" }] } }, + $EntityContainer: 'this.Container', + this: { + ET: { $Kind: 'EntityType', $Key: ['key'], key: {} }, + Container: { + Set: { + $Type: 'this.ET', $Collection: true, + '@Capa.ChangeTracking': { Supported: true } + }, + '@Capa.BatchSupported': false + } + } + }; + const expected = { + paths: { + "/Set": { + get: {}, + post: {} + }, + "/Set('{key}')": { get: {}, patch: {}, delete: {} } + } + }; + const expectedGetResponseProperties = { + '@odata.count': { + $ref: '#/components/schemas/count' + }, + value: { + type: 'array', + items: { + $ref: '#/components/schemas/this.ET' + //TODO:delta + } + }, + "@odata.deltaLink": { + example: "/service-root/Set?$deltatoken=opaque server-generated token for fetching the delta", + type: "string" + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual( + actual.paths['/Set'].get.responses[200].content['application/json'].schema.properties, + expectedGetResponseProperties, 'get list with delta'); + }) + + it('entity set and singleton with non-existing type', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + Container: { + set: { $Type: 'self.type_does_not_exist', $Collection: true }, + single: { $Type: 'self.type_does_not_exist' } + } + } + }; + const expected = { + paths: { + "/set": { + get: { + summary: 'Get entities from set', + tags: ['set'], + parameters: [ + { $ref: "#/components/parameters/top" }, + { $ref: "#/components/parameters/skip" }, + { + in: 'query', + name: 'filter', + schema: { type: 'string' }, + description: "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)" + }, + { $ref: "#/components/parameters/count" } + ], + responses: { + 200: { + description: 'Retrieved entities', + content: { + 'application/json': { + schema: { + type: 'object', + title: 'Collection of type_does_not_exist', + properties: { + '@odata.count': { + $ref: '#/components/schemas/count' + }, + value: { + type: 'array', + items: { + $ref: "#/components/schemas/undefined.type_does_not_exist" + } + } + } + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + }, + post: { + summary: 'Add new entity to set', + tags: ['set'], + requestBody: { + description: 'New entity', + required: true, + content: { + 'application/json': { + schema: { + $ref: "#/components/schemas/undefined.type_does_not_exist-create" + } + } + } + }, + responses: { + 201: { + description: 'Created entity', + content: { + 'application/json': { + schema: { + $ref: "#/components/schemas/undefined.type_does_not_exist" + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + } + }, + "/single": { + get: { + summary: 'Get single', + tags: ['single'], + parameters: [], + responses: { + 200: { + description: 'Retrieved entity', + content: { + 'application/json': { + schema: { + $ref: "#/components/schemas/undefined.type_does_not_exist" + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + }, + patch: { + summary: 'Update single', + tags: ['single'], + requestBody: { + description: 'New property values', + required: true, + content: { + 'application/json': { + schema: { + $ref: "#/components/schemas/undefined.type_does_not_exist-update" + } + } + } + }, + responses: { + 204: { + description: 'Success' + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + } + }, + "/$batch": { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual(actual.paths['/set'].get, expected.paths['/set'].get, 'GET set'); + assert.deepStrictEqual(actual.paths['/set'].post, expected.paths['/set'].post, 'POST set'); + assert.deepStrictEqual(actual.paths['/single'].get, expected.paths['/single'].get, 'GET single'); + assert.deepStrictEqual(actual.paths['/single'].patch, expected.paths['/single'].patch, 'PATCH single'); + }) + + it('inheritance', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + base: { + $Kind: 'EntityType', $Abstract: true, baseProp: {}, + baseNav: { $Kind: 'NavigationProperty', $Type: 'this.other', $ContainsTarget: true } + }, + derived: { + $Kind: 'EntityType', $BaseType: 'this.base', $Key: ['key'], key: {}, derivedProp: {}, + derivedNav: { $Kind: 'NavigationProperty', $Type: 'this.other' } + }, + Container: { + set: { $Type: 'this.derived', $Collection: true } + } + } + }; + const expected = { + paths: { + "/set": { + get: { + summary: 'Get entities from set', + tags: ['set'], + parameters: [ + { $ref: "#/components/parameters/top" }, + { $ref: "#/components/parameters/skip" }, + { + in: 'query', + name: 'filter', + schema: { type: 'string' }, + description: 'Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)' + }, + { $ref: '#/components/parameters/count' }, + { + in: 'query', + name: 'orderby', + description: 'Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + 'baseProp', + 'baseProp desc', + 'key', + 'key desc', + 'derivedProp', + 'derivedProp desc' + ] + } + } + }, + { + in: 'query', + name: 'select', + description: 'Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + 'baseProp', + 'key', + 'derivedProp' + ] + } + } + }, + { + in: 'query', + name: 'expand', + description: 'Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + '*', + 'baseNav', + 'derivedNav' + ] + } + } + } + ], + responses: { + 200: { + description: 'Retrieved entities', + content: { + 'application/json': { + schema: { + type: 'object', + title: 'Collection of derived', + properties: { + '@odata.count': { + $ref: '#/components/schemas/count' + }, + value: { + type: 'array', + items: { + $ref: '#/components/schemas/this.derived' + } + } + } + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + }, + post: { + summary: 'Add new entity to set', + tags: ['set'], + requestBody: { + description: 'New entity', + required: true, + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/this.derived' + } + } + } + }, + responses: { + 201: { + description: 'Created entity', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/undefined.type_does_not_exist' + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + } + }, + "/set('{key}')": { + get: {}, + patch: {}, + delete: {} + }, + "/set('{key}')/baseNav": { + get: {}, + patch: {} + }, + "/set('{key}')/derivedNav": { + get: {} + }, + '/$batch': { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual(actual.paths['/set'].get, expected.paths['/set'].get, 'GET set'); + }) + + it('navigation property in complex type', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + source: { + $Kind: 'EntityType', $Key: ['s_id'], s_id: {}, complexProp: { $Type: 'this.complex', $Collection: true }, + }, + complex: { + $Kind: 'ComplexType', + primProp: {}, + navProp: { $Kind: 'NavigationProperty', $Type: 'this.target', $Collection: true } + }, + target: { + $Kind: 'EntityType', $BaseType: 'this.base', $Key: ['t_id'], t_id: {} + }, + Container: { + sources: { $Type: 'this.source', $Collection: true }, + targets: { $Type: 'this.target', $Collection: true } + } + } + }; + const expected = { + paths: { + "/sources": { + get: { + summary: 'Get entities from sources', + tags: ['sources'], + parameters: [ + { $ref: "#/components/parameters/top" }, + { $ref: "#/components/parameters/skip" }, + { + in: 'query', + name: 'filter', + schema: { type: 'string' }, + description: 'Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)' + }, + { $ref: '#/components/parameters/count' }, + { + in: 'query', + name: 'orderby', + description: 'Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + 's_id', + 's_id desc', + 'complexProp/primProp', + 'complexProp/primProp desc' + ] + } + } + }, + { + in: 'query', + name: 'select', + description: 'Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + 's_id', + 'complexProp' + ] + } + } + }, + { + in: 'query', + name: 'expand', + description: 'Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + '*', + 'complexProp/navProp' + ] + } + } + } + ], + responses: { + 200: { + description: 'Retrieved entities', + content: { + 'application/json': { + schema: { + type: 'object', + title: 'Collection of source', + properties: { + '@odata.count': { + $ref: '#/components/schemas/count' + }, + value: { + type: 'array', + items: { + $ref: '#/components/schemas/this.source' + } + } + } + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + }, + post: { + summary: 'Add new entity to set', + tags: ['set'], + requestBody: { + description: 'New entity', + required: true, + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/this.derived' + } + } + } + }, + responses: { + 201: { + description: 'Created entity', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/undefined.type_does_not_exist' + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + } + }, + "/sources('{s_id}')": { + get: {}, + patch: {}, + delete: {} + }, + "/targets": { + get: {}, + post: {} + }, + "/targets('{t_id}')": { + get: {}, + patch: {}, + delete: {} + }, + '/$batch': { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual(actual.paths['/sources'].get, expected.paths['/sources'].get, 'GET sources'); + }) + + it('key aliases', function () { + const csdl = { + $EntityContainer: 'this.Container', + this: { + Category: { + $Kind: 'EntityType', $Key: [{ EntityInfoID: 'Info/ID' }], + Info: { $Type: 'this.EntityInfo' }, + Name: { $Nullable: true } + }, + EntityInfo: { + $Kind: 'ComplexType', + ID: { $Type: 'Edm.Int32' }, + Created: { $Type: 'Edm.DateTimeOffset' } + }, + Container: { + $Kind: 'EntityContainer', + Categories: { $Type: 'this.Category', $Collection: true } + } + } + }; + const expected = { + paths: { + "/Categories": { + get: { + summary: 'Get entities from Categories', + tags: ['Categories'], + parameters: [ + { $ref: "#/components/parameters/top" }, + { $ref: "#/components/parameters/skip" }, + { + in: 'query', + name: 'filter', + schema: { type: 'string' }, + description: 'Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)' + }, + { $ref: '#/components/parameters/count' }, + { + in: 'query', + name: 'orderby', + description: 'Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + 'Info/ID', + 'Info/ID desc', + 'Info/Created', + 'Info/Created desc', + 'Name', + 'Name desc' + ] + } + } + }, + { + in: 'query', + name: 'select', + description: 'Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + 'Info', + 'Name' + ] + } + } + } + ], + responses: { + 200: { + description: 'Retrieved entities', + content: { + 'application/json': { + schema: { + type: 'object', + title: 'Collection of Category', + properties: { + '@odata.count': { + $ref: '#/components/schemas/count' + }, + value: { + type: 'array', + items: { + $ref: '#/components/schemas/this.Category' + } + } + } + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + }, + post: { + summary: 'Add new entity to set', + tags: ['set'], + requestBody: { + description: 'New entity', + required: true, + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/this.derived' + } + } + } + }, + responses: { + 201: { + description: 'Created entity', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/undefined.type_does_not_exist' + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + } + }, + "/Categories({EntityInfoID})": { + get: {}, + patch: {}, + delete: {} + }, + '/$batch': { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual(actual.paths['/Categories'].get, expected.paths['/Categories'].get, 'GET Categories'); + }) + + it('FilterRestrictions, NavigationRestrictions, SearchRestrictions, and SortRestrictions', function () { + const csdl = { + $Version: '4.01', + $Reference: { + dummy: { + "$Include": [ + { "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }, + { "$Namespace": "Org.OData.Capabilities.V1", "$Alias": "Capabilities" } + ] + } + }, + $EntityContainer: 'this.Container', + this: { + thing: { + $Kind: 'EntityType', $Key: ['key'], + key: {}, + one: {}, + two: {}, + nav: { $Type: 'this.thing', $Kind: 'NavigationProperty', $ContainsTarget: true } + }, + Container: { + things: { + $Type: 'this.thing', $Collection: true, + "@Capabilities.FilterRestrictions": { + "@Core.Description": "Filtering has some restrictions here.", + "RequiredProperties": ["two"] + }, + "@Capabilities.NavigationRestrictions": { + "RestrictedProperties": [ + { + "NavigationProperty": "nav", + "Navigability": "Single" + } + ] + }, + "@Capabilities.SearchRestrictions": { + "@Core.Description": "Searching has some restrictions here.", + "Searchable": true + }, + "@Capabilities.SortRestrictions": { + "@Core.Description": "Sorting has some restrictions here.", + "NonSortableProperties": ["one"] + } + } + } + } + }; + const expected = { + paths: { + "/things": { + get: { + summary: 'Get entities from things', + tags: ['things'], + parameters: [ + { $ref: "#/components/parameters/top" }, + { $ref: "#/components/parameters/skip" }, + { + in: 'query', + name: 'search', + schema: { type: 'string' }, + description: 'Searching has some restrictions here.' + }, + { + in: 'query', + name: 'filter', + schema: { type: 'string' }, + description: 'Filtering has some restrictions here.\n\nRequired filter properties:\n- two' + }, + { $ref: '#/components/parameters/count' }, + { + in: 'query', + name: 'orderby', + description: 'Sorting has some restrictions here.', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + 'key', + 'key desc', + 'two', + 'two desc' + ] + } + } + }, + { + in: 'query', + name: 'select', + description: 'Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + 'key', + 'one', + 'two' + ] + } + } + }, + { + in: 'query', + name: 'expand', + description: 'Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)', + explode: false, + schema: { + type: 'array', + uniqueItems: true, + items: { + type: 'string', + enum: [ + '*', + 'nav' + ] + } + } + } + ], + responses: { + 200: { + description: 'Retrieved entities', + content: { + 'application/json': { + schema: { + type: 'object', + title: 'Collection of thing', + properties: { + '@count': { + $ref: '#/components/schemas/count' + }, + value: { + type: 'array', + items: { + $ref: '#/components/schemas/this.thing' + } + } + } + } + } + } + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + }, + post: {} + }, + "/things('{key}')": { + get: {}, + patch: {}, + delete: {} + }, + "/things('{key}')/nav": { + get: {}, + patch: {} + }, + '/$batch': { post: {} } + } + }; + const actual = lib.csdl2openapi(csdl, {}); + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual(actual.paths['/things'].get, expected.paths['/things'].get, 'GET things'); + }) + + it('ExpandRestrictions', function () { + const csdl = { + $Reference: { + dummy: { + "$Include": [ + { "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" }, + { "$Namespace": "Org.OData.Capabilities.V1", "$Alias": "Capabilities" } + ] + } + }, + $EntityContainer: 'this.Container', + this: { + root: { + $Kind: 'EntityType', $Key: ['key'], + key: {}, + one: {}, + two: {}, + nav: { $Type: 'this.child', $Kind: 'NavigationProperty', $ContainsTarget: true }, + no_expand: { $Type: 'this.child', $Kind: 'NavigationProperty', $ContainsTarget: true } + }, + child: { + $Kind: 'EntityType', $Key: ['key'], + key: {}, + one: {}, + two: {}, + nav: { $Type: 'this.grandchild', $Kind: 'NavigationProperty', $ContainsTarget: true }, + no_expand: { $Type: 'this.grandchild', $Kind: 'NavigationProperty', $ContainsTarget: true } + }, + grandchild: { + $Kind: 'EntityType', $Key: ['key'], + key: {} + }, + Container: { + roots: { + $Type: 'this.root', $Collection: true, + "@Capabilities.ExpandRestrictions": { + "@Core.Description": "Expanding has some restrictions here.", + "NonExpandableProperties": ["no_expand", "nav/no_expand", "no_expand/no_expand"] + } + } + } + } + }; + const expectedExpands = { + "/roots": [ + '*', + 'nav' + ], + "/roots('{key}')": [ + '*', + 'nav' + ], + "/roots('{key}')/nav": [ + '*', + 'nav' + ], + "/roots('{key}')/no_expand": [ + '*', + 'nav' + ] + } + + const actual = lib.csdl2openapi(csdl, {}); + + const actualExpands = {} + for (const [path, item] of Object.entries(actual.paths)) { + const expand = item.get && item.get.parameters && item.get.parameters.find(param => param.name === 'expand') + if (expand) { + actualExpands[path] = expand.schema.items.enum + } + } + assert.deepStrictEqual(actualExpands, expectedExpands, 'expands'); + assert.equal(actual.paths['/roots'].get.parameters.find(item => item.name == 'expand').description, 'Expanding has some restrictions here.', 'expand description') + }) + + it('Default Namespace', function () { + + const csdl = { + $Version: '4.01', + $Reference: { + dummy: { + "$Include": [ + { "$Namespace": "Org.OData.Capabilities.V1", "$Alias": "Capabilities" }, + { "$Namespace": "Org.OData.Core.V1", "$Alias": "Core" } + ] + } + }, + $EntityContainer: 'this.Container', + this: { + '@Core.DefaultNamespace': true, + root: { + $Kind: 'EntityType', $Key: ['key'], key: {} + }, + act: [ + { + $Kind: 'Action', + $IsBound: true, + $Parameter: [{ $Name: 'in', $Type: 'this.root' }] + }, + { + $Kind: 'Action', + $IsBound: true, + $Parameter: [{ $Name: 'in', $Type: 'this.root', $Collection: true }] + } + ], + func: [ + { + $Kind: 'Function', + $IsBound: true, + $Parameter: [{ $Name: 'in', $Type: 'this.root' }], + $ReturnType: {} + }, + { + $Kind: 'Function', + $IsBound: true, + $Parameter: [{ $Name: 'in', $Type: 'this.root', $Collection: true }], + $ReturnType: {} + } + ], + Container: { + '@Capabilities.KeyAsSegmentSupported': true, + roots: { + $Type: 'this.root', $Collection: true + } + } + } + }; + + const expected = { + paths: { + "/$batch": { post: {} }, + "/roots": { get: {}, post: {} }, + "/roots/act": { + post: { + summary: 'Invoke action act', + tags: ['roots'], + responses: { + 204: { + description: 'Success' + }, + '4XX': { + $ref: '#/components/responses/error' + } + } + } + }, + "/roots/func": { get: {} }, + "/roots/{key}": { get: {}, patch: {}, delete: {} }, + "/roots/{key}/act": { post: {} }, + "/roots/{key}/func": { get: {} } + } + } + + const actual = lib.csdl2openapi(csdl, {}); + + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual(actual.paths['/roots/act'].post, expected.paths['/roots/act'].post, 'POST /roots/act'); + }) + + it('Deep update on container level', function () { + const csdl = { + $Reference: { dummy: { "$Include": [{ "$Namespace": "Org.OData.Capabilities.V1", "$Alias": "Capabilities" }] } }, + $EntityContainer: 'this.Container', + this: { + root: { + $Kind: 'EntityType', $Key: ['key'], + key: {}, + one: {}, + two: {}, + children: { $Type: 'this.child', $Kind: 'NavigationProperty', $ContainsTarget: true, $Collection: true }, + }, + child: { + $Kind: 'EntityType', $Key: ['key'], + key: {}, + one: {}, + two: {}, + nav: { $Type: 'this.grandchild', $Kind: 'NavigationProperty', $ContainsTarget: true }, + }, + grandchild: { + $Kind: 'EntityType', $Key: ['key'], + key: {}, + one: {}, + two: {} + }, + Container: { + '@Capabilities.KeyAsSegmentSupported': true, + '@Capabilities.DeepUpdateSupport': { Supported: true }, + roots: { + $Type: 'this.root', $Collection: true + } + } + } + }; + + const expected = { + paths: { + "/$batch": { post: {} }, + "/roots": { get: {}, post: {} }, + "/roots/{key}": { get: {}, patch: {}, delete: {} }, + "/roots/{key}/children": { get: {}, post: {} }, + "/roots/{key}/children/{key_1}": { get: {}, patch: {}, delete: {} }, + "/roots/{key}/children/{key_1}/nav": { get: {}, patch: {} }, + }, + components: { + schemas: { + 'this.root-update': { + type: 'object', + title: 'root (for update)', + properties: { + one: { type: 'string' }, two: { type: 'string' }, + children: { type: 'array', items: { $ref: '#/components/schemas/this.child-create' } } + } + }, + 'this.child-update': { + type: 'object', + title: 'child (for update)', + properties: { + one: { type: 'string' }, two: { type: 'string' }, + nav: { $ref: '#/components/schemas/this.grandchild-create' } + } + } + } + } + } + + const actual = lib.csdl2openapi(csdl, {}); + + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + + //TODO: check components + assert.deepStrictEqual(actual.components.schemas['this.root-update'], expected.components.schemas['this.root-update'], 'root update structure') + assert.deepStrictEqual(actual.components.schemas['this.child-update'], expected.components.schemas['this.child-update'], 'child update structure') + }) + +}) + +function check(actual, expected) { + assert.deepStrictEqual(paths(actual), paths(expected), 'Paths'); + assert.deepStrictEqual(operations(actual), operations(expected), 'Operations'); + assert.deepStrictEqual(actual, expected, 'OpenAPI document'); +} + +function paths(openapi) { + return Object.keys(openapi.paths).sort(); +} + +function operations(openapi) { + const p = {}; + Object.keys(openapi.paths).forEach(template => { + p[template] = Object.keys(openapi.paths[template]).filter(op => op != 'parameters'); + }); + return p; +} \ No newline at end of file diff --git a/odata-openapi/tools/OData-Version.xsl b/odata-openapi/tools/OData-Version.xsl new file mode 100644 index 00000000..cefd4d96 --- /dev/null +++ b/odata-openapi/tools/OData-Version.xsl @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + 2.0 + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/README.md b/odata-openapi/tools/README.md new file mode 100644 index 00000000..7520fc37 --- /dev/null +++ b/odata-openapi/tools/README.md @@ -0,0 +1,103 @@ +# XSLT-Based Tools + +Tools for transforming [OData](http://www.odata.org) CSDL (`$metadata`) XML documents into [OpenAPI](https://github.com/OAI/OpenAPI-Specification) documents. + +The core ingredient is the [`V4-CSDL-to-OpenAPI.xsl`](V4-CSDL-to-OpenAPI.xsl) transformation. It transforms OData CSDL XML Version 4.0 documents into either OpenAPI 3.0.0 or Swagger 2.0 documents. + +OData CSDL XML documents conforming to one of the predecessor OData versions 2.0 or 3.0 can be transformed into OData 4.0 with the [`V2-to-V4-CSDL.xsl`](V2-to-V4-CSDL.xsl) transformation. + +The two files [`transform.js`](transform.js) and [`transform.cmd`](transform.cmd) are wrapper scripts for Node.js and Windows Command. + +The mapping can be fine-tuned via [annotations](../doc/Annotations.md) in the CSDL (`$metadata`) XML documents. + + +## `transform.js` for Node.js + +_Note: if you want to transform OData V3, V4, or V4.01 into OpenAPI 3.0.x, you better use the [pure Node.js-based tool](../lib)._ + +This script transforms one or more OData CSDL (`$metadata`) XML documents into OpenAPI JSON documents. + +It uses [`xslt4node`](https://www.npmjs.com/package/xslt4node), which in turn needs [`node-gyp`](https://www.npmjs.com/package/node-gyp) and a [Java SE JDK](http://jdk.java.net). + +### Installation + +Install a [Java SE JDK](http://jdk.java.net) and make sure it is in the `PATH` + +```sh +javac -version +``` + + Install `node-gyp` globally, following the [platform-specific installation instructions for `node-gyp`](https://github.com/nodejs/node-gyp/blob/master/README.md#installation). + + +Clone or download this repository, go to the `tools` folder and type +```sh +npm install +``` + +To install globally type +```sh +npm install -g +``` +### Usage + +Assuming you installed the script globally and your metadata file is `MyMetadata.xml`, then +```sh +odata-openapi -dp MyMetadata.xml +``` +will transform it into `MyMetadata.openapi.json` with a nice [yUML](https://yuml.me/) diagram and pretty-printed JSON. + + +Just type +```sh +odata-openapi -h +``` +to get usage hints +``` +Usage: odata-openapi +Options: + --basePath base path (default: /service-root) + -d, --diagram include YUML diagram + -h, --help show this info + --host host (default: localhost) + -o, --openapi-version 3.0.0 or 2.0 (default: 3.0.0) + -p, --pretty pretty-print JSON result + -r, --references include references to other files + --scheme scheme (default: http) + -t, --target target file (only useful with a single source file) + -u, --used-schemas-only produce only schemas that are actually used in operation objects + ``` + +If you installed the script locally, start it via +```sh +node path_to_tools/transform.js ... +``` +(replace `path_to_tools` with your local installation path). + + +## `transform.cmd` for Windows Command + +This script transforms a single OData CSDL (`$metadata`) XML documents into OpenAPI 3.0.0 JSON documents. + +### Installation + +The prerequisites are listed within [`transform.cmd`](transform.cmd). It's quite a lot: +- [Java SE 8](http://www.oracle.com/technetwork/java/javase/downloads/index.html) is installed and in the `PATH` +- [git](https://git-for-windows.github.io/) is installed and in the `PATH` +- [Xalan](http://xalan.apache.org/xalan-j/downloads.html) is installed and `CLASSPATH` contains `xalan.jar` and `serializer.jar` +- [YAJL](https://github.com/lloyd/yajl)'s `json_reformat` has been compiled and is in the `PATH` +- [Node.js](https://nodejs.org/) is installed +- [ajv-cli](https://www.npmjs.com/package/ajv-cli) is installed +- https://github.com/OAI/OpenAPI-Specification is cloned next to this project + +### Usage + +In the `tools` folder execute +```sh +transform +``` + + +## Supported Annotations + +The mapping can be fine-tuned via [annotations](../doc/Annotations.md) in the CSDL (`$metadata`) XML documents. diff --git a/odata-openapi/tools/V2-to-V4-CSDL.xsl b/odata-openapi/tools/V2-to-V4-CSDL.xsl new file mode 100644 index 00000000..1fd7fc04 --- /dev/null +++ b/odata-openapi/tools/V2-to-V4-CSDL.xsl @@ -0,0 +1,1272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + https://oasis-tcs.github.io/odata-vocabularies/vocabularies/ + + .xml + + + https://wiki.scn.sap.com/wiki/download/attachments/ + + / + + .xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + max + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .SearchRestrictions + + + + + + + true + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + .NavigationRestrictions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + true + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + false + + + + + + + + + + + false + + + + + + + + + + + + + Edm. + + + + + + + + + + + + + + + + + + + .Description + + + + + + + + + + + + + .LongDescription + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TODO: convert to base64url + + + + + + + + + Z + + + + + + + + + + + + + + + + + + + Edm.TimeOfDay + Edm.Single + + Edm.Date + Edm.DateTimeOffset + + + + + + + + + + + + + + + + + + + + + + + + + + + + .Label + + + + + + + + + + + + .Heading + + + + + + + + + + + + .QuickInfo + + + + + + + + + + + + .Text + + + + + + + + + + + + + + + .ISOCurrency + + + + + + + + + + + .Unit + + + + + + + + + + + + + + + + + + + + + + . + + / + + + + + + .ReadRestrictions + + + + + + + + + + + + + + + + + + .IsEmailAddress + + + + + + + + + .IsPhoneNumber + + + + + + + + + .IsURL + + + + + + + + + .IsCalendarDate + + + + + + + + + .Dimension + + + + + + + + + .Measure + + + + + + + + + + + + + .ContextDefiningProperties + + + + + + + + + + + + + + + + + + + + .FieldControl + + + + + + + + + + + + + .InsertRestrictions + + + + + + + + + + + + + + + .UpdateRestrictions + + + + + + + + + + + + + + .DeleteRestrictions + + + + + + + + + + + + + + + + .TopSupported + + + + + + .SkipSupported + + + + + + + + + + + + + .Computed + + + + + + + + .Immutable + + + + + + + + + + + + + + + + + .ReadRestrictions + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + RequiredProperties + + + + + + + + FilterExpressionRestrictions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SingleValue + + + MultiValue + + + SingleRange + + + TODO: + + + sap:filter-restriction=" + + " + + + + + + + + + + + + + + + .Hidden + + + + + + + + + + .IsUpperCase + + + + + + + + + .IsDigitSequence + + + + + + + + + .Pattern + + + + + + + + + + + + + + + + + + + + + + + / + + =" + + " + + + + TODO. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/V4-CSDL-to-OpenAPI.xsl b/odata-openapi/tools/V4-CSDL-to-OpenAPI.xsl new file mode 100644 index 00000000..4c9f994b --- /dev/null +++ b/odata-openapi/tools/V4-CSDL-to-OpenAPI.xsl @@ -0,0 +1,5190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $ + + + + + + + + + + + #/definitions/ + + + #/components/schemas/ + + + + + + + + #/parameters/ + + + #/components/parameters/ + + + + + + + + + + + + Core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + " + + + 4XX + + + 400 + + + ":{"$ref":"#/ + + components/ + + responses/error"} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + + , + + + + ) + + + + + ( + + + , + + + + )/$ReturnType + + + + + ( + + + , + + + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + + + "swagger":"2.0" + + + "openapi":"3.0.0" + + + + ,"info":{"title":" + + + + + + + + + + + + + + + + + + + + + + Service for namespace + + + + OData CSDL Document for namespace + + + + + ","version":" + + + + + + + + + + + + + + ","description":" + + + + + + + + + + + + + + + + + + + + + + This service is located at [ + + :// + + + /]( + + :// + + + + + + + + + + + + + /) + + + + + + \n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/ + + ) + \n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/ + [External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}]) + + + + + + "} + + + ,"externalDocs":{ + + "description":" + + ", + + "url":" + + "} + + + + , + + + + + + + ,"schemes":[" + + "],"host":" + + ","basePath":" + + " + + + ,"consumes":["application/json"] + ,"produces":["application/json"] + + + ,"servers":[{"url":" + + :// + + + "}] + + + + + + + + + ,"paths":{ + + } + + + ,"components":{ + + + + + + + definitions + + + schemas + + + + + + + + ,"parameters":{ + "top":{"name":" + + top","in":"query","description":"Show only the first n items, see [Paging - Top]( + + + https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=66 + + + http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop + + + )", + + + + + + ,"example": + + + }, + "skip":{"name":" + + skip","in":"query","description":"Skip the first n items, see [Paging - Skip]( + + + https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65 + + + http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip + + + )", + + + + + }, + + + "count":{"name": "$inlinecount","in":"query","description":"Include count of items + , see [Inlinecount](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=67)", + + + + ,"enum":["allpages","none"] + + + + + "count":{"name":" + + count","in":"query","description":"Include count of items + , see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + + + + + + } + + + ,"search":{"name":" + + search","in":"query","description":"Search items by search phrases + , see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + + + + } + + + ,"search":{"name":"search","in":"query","description":"Search items by search phrases + , see [Searching](https://wiki.scn.sap.com/wiki/display/EmTech/SAP+Annotations+for+OData+Version+2.0#SAPAnnotationsforODataVersion2.0-Query_Option_searchQueryOptionsearch)", + + + + } + + + } + + ,"responses":{"error":{"description":"Error", + + "content":{"application/json":{ + + "schema":{"$ref":" + + error"} + + }} + + }} + + + + + + } + + + + + } + + + + + + + + + + ," + + + securitySchemes + + + securityDefinitions + + + ":{ + + } + + + + + + , + + " + + ":{ + + + + + + + + + "type":"apiKey" + ,"name":" + + ","in":" + + + + header + + + query + + + cookie + + + " + + + + + + "type":"http" + + + + + + + + + + + + "type":"basic" + + + + + + + ,"description":" + + scheme not supported by Swagger 2.0" + + + + + + + "type":"oauth2" + + + + + + authorizationCode + + + accessCode + + + + + + + clientCredentials + + + application + + + + + implicit + + + password + + + + + + ,"flows":{" + + ":{"scopes":{ + + } + + + + + + + + + + + + + }} + + + ,"flow":" + + ","scopes":{ + + } + + + + + + + + + + + + + + + + "type":"openIdConnect" + + + + + + + + "type":"basic","description":"openIdConnect not supported by Swagger 2.0" + + + + + "type":"TODO: + + " + + Unknown Authorization type + + + + + + } + + + + + + + + ," + + ":" + + " + + + + + + + ,"description":" + + " + + + + + + , + + " + + ":" + + " + + + + + + + + + + ,"security":[ + + ] + + + + + + , + + {" + + ":[ + + ]} + + + + + , + + " + + " + + + + + + + + "schema":{ + + "type":" + + " + + + + + + + } + + + + + + "count": + + + {"type":"string","description":"The number of entities in the collection. Available when using the [$inlinecount](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=67) query option."} + + + { + + "anyOf":[{"type":"number"},{ + + "type":"string" + + }] + + ,"description":"The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option."} + + + , + + "geoPoint":{"type":"object","properties":{"type":{"type":"string","enum":["Point"],"default":"Point"},"coordinates":{"$ref":" + + geoPosition"}},"required":["type","coordinates"]}, + + + "geoPosition":{"type":"array","items":{"type":"number"},"minItems":2}, + + "error":{"type":"object","required":["error"],"properties":{"error": + {"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message": + + + {"type":"string"},"target":{"type":"string"},"details": + {"type":"array","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"target":{"type":"string"}}}} + + + {"type":"object","required":["lang","value"],"properties":{"lang":{"type":"string"},"value":{"type":"string"}}} + + + ,"innererror":{"type":"object","description":"The structure of this object is service-specific"}}}}} + + + + + + + + + + + + , + + [ + + {bg:dodgerblue} + ]++- + + + * + + + 0..1 + + + >[ + + ] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + [ + + {bg:dodgerblue} + ] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + [ + + {bg:dodgerblue} + ] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + * + + + 0..1 + + + >[ + + ] + + + + + + , + + + [ + + + {bg:orange} + + ] + + + + + + + + + + + + + + + + + [ + + + + + + + + + {bg:whitesmoke} + + + ]^ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ,[ + + ] + + ++ + + - + + + * + + + 0..1 + + + + > + + [ + + + + + + + + + {bg:whitesmoke} + + + ] + + + + + + \n\n## References + + \n- [ + + ]( + ?url= + + + + + + + + + + + ) + + + + " + + . + + ":{"type":"string", + "enum":[ + + ] + + + + } + + + + + , + + " + + " + + + + " + + . + + ":{ + + + + + + + + } + + + + + + + + + + + + , + + + + + + + + , + + + + + + + + + + + + + + " + + + ":{"type":"object" + + + + + + + + + + + + + + + + + + + + + + } + + + + + + + + + + ,"anyOf":[ + + + + + ,{} + + ] + + + + + + + + , + + { + + + + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ,"properties":{ + + + + + + + + , + + + + | + + + + + + + + + + + , + + + + + } + + + + + + ,"required":[ + + + , + + + ] + + + + + + + , + + " + + " + + + + + + + + + + + + + + + + , + + " + + ":{ + + "anyOf":[{ + + + + }] + + + + + } + + + + + + + + + + + + + + + + "anyOf":[{ + + + + }] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "title":"Collection of + + ", + + "type":"object","properties":{ + + "__count":{"$ref":" + + count"}, + + "results":{ + + "type":"array","items":{ + + + + + + + + + + + + + + + ,"pattern":"^'[^']*(''[^']*)*'$" + + + + + + + + + + + + "string" + + + + + + + + + + + + + + + + + + + "example":{} + + + + + + + + + + ,"format":"base64url" + + + + + + + + + + + + ,"pattern":"^X'([0-9a-fA-F][0-9a-fA-F])*'$" + + + ,"format":"base64url" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ,"pattern":"^[-]?[0-9]+(\\.[0-9]+)?[mM]$" + + + ,"format":"decimal" + + + + + ,"multipleOf":1 + + + ,"multipleOf":1.0e- + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + . + + + + + + + + + + + + + + + + + + + + + + ,"minimum":- + + + + + + + + + ,"maximum": + + + + + + + + + " + + 0 + + " + + + + + + + + + + + + ,"format":"uint8" + + + + + + + + + + + + + + ,"format":"int8" + + + + + + + + + + + + + + ,"format":"int16" + + + + + + + + + + + + + + ,"format":"int32" + + + + + + + + + + + + + + + + + + + + + + + + + ,"pattern":"^[-]?[0-9]+[lL]$" + + + ,"format":"int64" + + + + + ,"example":"42" + + + + + + + + + + + ,"pattern":"^datetime'[0-9]{4}-[0-9]{2}-[0-9]{2}T00:00'$" + + + ,"example":"/Date(1492041600000)/" + + + ,"format":"date" + + ,"example":"2017-04-13" + + + + + + + + + + + ,"format":"double" + + + + + + + + ,"example":3.14 + + + + + + + + + ,"format":"float" + + + + + + + + ,"example":3.14 + + + + + + + + + + + ,"pattern":"^guid'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'$" + + + ,"format":"uuid" + + + + ,"example":"01234567-89ab-cdef-0123-456789abcdef" + + + + + + + + + + + ,"pattern":"^datetime'[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9](\\.[0-9]+)?)?'$" + + + ,"example":"/Date(1492098664000)/" + + + ,"format":"date-time" + + ,"example":"2017-04-13T15:51:04Z" + + + + + + + + + + + + + ,"pattern":"^time'PT(([01]?[0-9]|2[0-3])H)?([0-5]?[0-9]M)?([0-5]?[0-9](\\.[0-9]+)?S)?'$" + + + ,"example":"PT15H51M04S" + + + ,"format":"time" + + ,"example":"15:51:04" + + + + + + + + + + + ,"format":"duration" + + ,"example":"P4DT15H51M04S" + + + + + + + + + + + "type":"string" + + + + + "nullable":true, + + "anyOf":[{ + + "$ref":" + + geoPoint" + + }] + + + + + "example":{} + + + + + TODO: inline + + + + + "nullable":true, + + "anyOf":[{ + + "$ref":" + + #/definitions/ + + " + + }] + + + + + + "nullable":true, + + "anyOf":[{ + + + + + + + + }] + + + + + + + + + + + + + + + + }} + + } + + + + + + + + + + + + + + + + + + + + + + + + ,"example": + + + " + + " + + + + " + + + + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ,"enum":[ + + ] + + + + + + + + + + + + + + + + + + + ,"minimum": + + + + ,"exclusiveMinimum":true + + + + + + + + + + + + + + + + + + + + ,"maximum": + + + + + ,"exclusiveMaximum":true + + + + + + + + + + + + + + ,"pattern":" + + " + + + + + + , + + " + + " + + + + + + + + + + "$ref":" + + + + + Unknown type: + + . + + + + + + "$ref":" + + + + + + + + + Unknown qualifier: + + Node: + + + + + + . + + + + + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "type": + + [ + + " + + + + + + + + + + + + + " + + ,"null" + + + ] + + + + + + "anyOf":[{"type":" + + + + + + "}] + + + "type":" + + " + + + + ,"nullable":true + + + + + + + + ,"maxLength": + + + + + + + + + + + + + + ,"default": + + + + + + + + + + + + + + + + " + + + + " + + + + + + + + + + + + + + + + + + + + + , + + "/$batch":{"post":{"summary": "Send a group of requests","description": "Group multiple requests into a single request payload, see [Batch Requests]( + + + https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=152 + + + http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests + + + ). + + \n\n*Please note that \"Try it out\" is not supported for this request.* + + ","tags":["Batch Requests"], + + "consumes":["multipart/mixed;boundary=request-separator"],"produces":["multipart/mixed"], + + + + + "parameters":[{"name":"requestBody","in":"body", + + + "requestBody":{"required":true, + + + "description":"Batch request", + + "content":{"multipart/mixed;boundary=request-separator":{ + + "schema":{"type":"string" + + } + + ,"example":"--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET + + HTTP/1.1\nAccept: application/json\n\n\n--request-separator--"} + + } + + + + }] + + + } + + + + ,"responses":{" + + + 202 + + + 200 + + + ":{"description":"Batch response", + + + "content":{"multipart/mixed":{ + + "schema":{"type":"string" + + } + + ,"example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--"} + + } + + }, + + }}} + + + + + ,"tags":[ + + + , + + + {"name":" + + + + + + + + + + + ","description":" + + + "} + + + ] + + + + + + + + ,"tags":[" + + + + + + + + + + + + + + + + "," + + + + + + "] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \n\nRequired filter properties: + + \n- + + + + + + + + , + + {"name":" + + orderby","in":"query","description":"Order items by property values, see [Sorting]( + + + https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65 + + + http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby + + + )", + + "explode":false,"schema":{ + + "type":"array","uniqueItems":true,"items":{"type":"string","enum":[ + + + , + + " + + "," + + desc" + + ]}} + + } + + + + + + + + + , + + {"name":" + + select","in":"query","description":"Select properties to be returned, see [Select]( + + + https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68 + + + http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect + + + )", + + "explode":false,"schema":{ + + "type":"array","uniqueItems":true,"items":{"type":"string","enum":[ + + + , + + " + + " + + ]}} + + } + + + + + + + + + , + + {"name":" + + expand","in":"query","description":"Expand related entities, see [Expand]( + + + https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63 + + + http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand + + + )", + + "explode":false,"schema":{ + + "type":"array","uniqueItems":true,"items":{"type":"string","enum":[ + + "*", + + + + , + + " + + " + + ]}} + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + . + + + + + + + Collection( + + + + ) + + + + + Collection( + + + + ) + + + + "/ + + ":{ + + + "parameters":[ + + ] + + + + + , + + "get":{ + + + + + Get + + entities from + + + related + + + + + + + + + + + ,"parameters":[ + + + + + + + ] + + + + + + + + + + + + + + + + Retrieved entity + + + Retrieved entities + + + + + + } + + + + + , + + + "post":{ + + + + + Add new entity to + + related + + + + + + + + + + + + + ,"parameters":[{"name":" + + ","in":"body", + + + ,"requestBody":{"required":true, + + + + + + + + + "content":{"application/json":{ + + "schema":{ + + + + + } + + }} + + } + + ] + + + + + + + + + } + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + . + + + + + + + + , + + + + + + + + + + + + + + , + + + + + + + + + "/ + + ":{ + + + "parameters":[ + + ] + + + + + + + + + + + + + + + + + + + + + , + + "get":{ + + + + + Get + + entity from + + + related + + + + by key + + + + + + + + + ,"parameters":[ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ] + + + + + + + } + + + + + + + + , + + " + + ":{ + + + + + Update + + entity in + + + related + + + + + + + + + + , + + + "parameters":[{"name":" + + ","in":"body", + + + "requestBody":{"required":true, + + + + + + + + "content":{"application/json":{ + + "schema":{ + + "title":"Modified + + ","type":"object","properties":{"d":{ + + + + + + + }} + + + + }}] + + + }}}} + + + + + + } + + + + + + + + + , + + "delete":{ + + + + + Delete + + entity from + + + related + + + + + + + + + + + } + + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + {"name":"If-Match","in":"header","description":"ETag", + + "schema":{ + + "type":"string" + + } + + } + + + + + + "description":" + + + + + + + + + + + + + + ", + + + + + + + + + / + + + ( + + + + + + + + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ERROR: Entity type without key and without base type: + + . + + + + - ERROR: neither key nor base type + + + + + + + + + + + + / + + + , + + + + + + + + + + + + + = + + + + + { + + + + + + + + + + - + + + } + + + + + + + + + + binary' + + + datetime' + + + datetimeoffset' + + + guid' + + + time' + + + + + + ' + + + + + + + + + + ' + + + + + + ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "ERROR: entity type with neither key nor base type" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + {"name":" + + + + + + + + + + - + + + ","in":"path","required":true,"description":" + + + + + + + + + + + key: + + + + + + + + + + + ", + + + + "x-error":"key property not found" + + Key property + + not found for entity type + + + + + "type": + + + "integer","format":"int64" + + + "integer","format":"int32" + + + + "string" + + + + + "schema":{ + + + + + + } + + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "/ + + ":{"post":{ + + + + + Invoke action + + + + + + + + + + + + + + + + + + + + + + + + ,"parameters":[ + + ] + + + + + ,"parameters":[{"name":"body","in":"body", + + + ,"requestBody":{ + + + "description":"Action parameters", + + "content":{"application/json":{ + + "schema":{"type":"object" + + + + + + }}] + + + }}}} + + + + + + + + + + + + + }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "/ + + + ( + + ) + + ":{"get":{ + + + + + Invoke function + + + + + + + + + + + + + + + + + + + + + ,"parameters":[ + + ] + + + + + + + + }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {"$ref":" + + top"} + + + + + , + + {"$ref":" + + skip"} + + + + + , + + {"$ref":" + + search"} + + + + + , + + {"name":" + + filter","in":"query","description":"Filter items by property values, see [Filtering]( + + + https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64 + + + http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter + + + ) + + + + ", + + + + + + + ,"required":true + + } + + + + + , + + {"$ref":" + + count"} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ,"responses":{ + + + "204":{"description":" + + "} + + + " + + ":{"description":" + + ", + + "content":{"application/json":{ + + "schema":{ + + "title":" + + + Wrapper + + + Collection of + + + + + + + ","type":"object","properties":{" + + + d + + ":{"type":"object","properties":{" + + + + + @ + + odata. + + count":{"$ref":" + + count"},"value + + + ":{ + + + "allOf":[{ + + + + + + + + + + + + + + + + "anyOf":[{ + + + + }] + + + + }, + + {"properties":{ + + "@ + + + odata. + + deltaLink":{"type":"string","example":" + + / + + ?$deltatoken=opaque server-generated token for fetching the delta" + + }}}] + + + + }} + + + }} + + + }} + + }} + + + , + + } + + + + + + + + ,"/ + + / + + + + + . + + + + . + + + + ":{"post":{ + + + Invoke action + + + + + + + + + + ,"parameters":[ + + + + + + + + , + + {"name":"body","in":"body", + "description":"Action parameters", + "schema":{"type":"object" + + + + }} + + ] + + + + ] + + + ,"requestBody":{ + "description":"Action parameters", + "content":{"application/json":{ + "schema":{"type":"object" + + + + }}}} + + + + + + + + + + }} + + + + + + + + + + + + + + + + + + + ,"/ + + / + + + + + + . + + + + . + + + + ( + + )":{"get":{ + + + Invoke function + + + + + + + + + ,"parameters":[ + + + + + ] + + + + + + + }} + + + + + + + + + + + + + + "anyOf":[{ + + + + }] + + + + + + + + , + + {"name":" + + + + ","in":"query", + + + ","in":"path", + + + + + "required":true, + + + + + + + + + + + Value needs to be in hex-pair format, enclosed in single quotes, and prefixed with `X`, e.g. `X'4F44617461'` + + + + + + Value needs to be enclosed in single quotes and prefixed with `datetime`, e.g. `datetime'2017-12-31T00:00'` + + + Value needs to be enclosed in single quotes and prefixed with `datetimeoffset`, e.g. `datetimeoffset'2017-12-31T23:59:59Z'` + + + Value needs to be in duration format, enclosed in single quotes, and prefixed with `time`, e.g. `time'PT23H59M59.999S'` + + + Value needs to be suffixed with `M` + + + Value needs to be enclosed in single quotes and prefixed with `guid`, e.g. `guid'01234567-0123-0123-0123-0123456789ab'` + + + + + + Value needs to be suffixed with `L` + + + Value needs to be enclosed in single quotes + + + + Parameter of type + + + + + + + + "description":" + + + \n( + + + + ) + + ", + + + "schema":{ + + + + + + + + } + + } + + + + + ,"maxLength": + + + + + + + + + + + + + + + + + , + + + = + + + + { + + } + + + + + + + + + + + + + + + + "summary":" + + + + + + + + + " + + + + + + + + + ,"description":" + + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "summary":" + + + + + + + + + + + + " + + + ,"description":" + + + + + \n + + + + + \n + + + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ,"title":" + + + " + + + ,"title":" + + + " + + + ,"title":" + + + " + + + + + ,"description":" + + + + + \n + + + + + \n + + + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \n + + + + \n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + " + + ":{ + + + + , + + + } + + + + + + { + + } + + + + + + + + + + + + , + + " + + ":{ + + + + + + + + , + + + + } + + + + + + + + " + + ":{ + + + + + + } + + + + + + + + + + + + + + + , + + + , + + + + + + + + + + + + + , + + + + + + + + + "TODO:@ + + ":" + + " + + + + + "TODO: + + ":{ + + } + + + + + "TODO:text()":" + + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .openapi + + 3 + + .json + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/package.json b/odata-openapi/tools/package.json new file mode 100644 index 00000000..4d2beab2 --- /dev/null +++ b/odata-openapi/tools/package.json @@ -0,0 +1,24 @@ +{ + "name": "odata-openapi-xslt", + "version": "0.0.1", + "description": "OData to OpenAPI transformator", + "homepage": "https://github.com/oasis-tcs/odata-openapi/tree/master/tools#transformjs-for-nodejs", + "bugs": "https://github.com/oasis-tcs/odata-csdl-schemas/issues", + "repository": { + "type": "git", + "url": "https://github.com/oasis-tcs/odata-openapi.git", + "directory": "tools" + }, + "bin": { + "odata-openapi": "transform.js" + }, + "dependencies": { + "minimist": "^1.2.0", + "xslt4node": "^0.3.2" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "SEE LICENSE IN ../LICENSE.md" +} \ No newline at end of file diff --git a/odata-openapi/tools/test.cmd b/odata-openapi/tools/test.cmd new file mode 100644 index 00000000..c5deaff0 --- /dev/null +++ b/odata-openapi/tools/test.cmd @@ -0,0 +1,11 @@ +@echo off +setlocal + +@rem This script runs all test cases in the tests folder + +for %%F in (tests\*.xml) do ( + call transform %%F /swagger +) + +endlocal +exit /b \ No newline at end of file diff --git a/odata-openapi/tools/tests/Northwind-key-as-segment.openapi3.json b/odata-openapi/tools/tests/Northwind-key-as-segment.openapi3.json new file mode 100644 index 00000000..a2f6e7ff --- /dev/null +++ b/odata-openapi/tools/tests/Northwind-key-as-segment.openapi3.json @@ -0,0 +1,13940 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Service for namespace ODataWebExperimental.Northwind.Model", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Category{bg:orange}],[Category]-*>[Product],[CustomerDemographic{bg:orange}],[CustomerDemographic]-*>[Customer],[Customer{bg:orange}],[Customer]-*>[Order],[Customer]-*>[CustomerDemographic],[Employee{bg:orange}],[Employee]-*>[Employee],[Employee]-0..1>[Employee],[Employee]-*>[Order],[Employee]-*>[Territory],[Order_Detail{bg:orange}],[Order_Detail]->[Order],[Order_Detail]->[Product],[Order{bg:orange}],[Order]-0..1>[Customer],[Order]-0..1>[Employee],[Order]-*>[Order_Detail],[Order]-0..1>[Shipper],[Product{bg:orange}],[Product]-0..1>[Category],[Product]-*>[Order_Detail],[Product]-0..1>[Supplier],[Region{bg:orange}],[Region]-*>[Territory],[Shipper{bg:orange}],[Shipper]-*>[Order],[Supplier{bg:orange}],[Supplier]-*>[Product],[Territory{bg:orange}],[Territory]->[Region],[Territory]-*>[Employee],[Alphabetical_list_of_product{bg:orange}],[Category_Sales_for_1997{bg:orange}],[Current_Product_List{bg:orange}],[Customer_and_Suppliers_by_City{bg:orange}],[Invoice{bg:orange}],[Order_Details_Extended{bg:orange}],[Order_Subtotal{bg:orange}],[Orders_Qry{bg:orange}],[Product_Sales_for_1997{bg:orange}],[Products_Above_Average_Price{bg:orange}],[Products_by_Category{bg:orange}],[Sales_by_Category{bg:orange}],[Sales_Totals_by_Amount{bg:orange}],[Summary_of_Sales_by_Quarter{bg:orange}],[Summary_of_Sales_by_Year{bg:orange}],[Categories{bg:dodgerblue}]++-*>[Category],[CustomerDemographics{bg:dodgerblue}]++-*>[CustomerDemographic],[Customers{bg:dodgerblue}]++-*>[Customer],[Employees{bg:dodgerblue}]++-*>[Employee],[Order_Details{bg:dodgerblue}]++-*>[Order_Detail],[Orders{bg:dodgerblue}]++-*>[Order],[Products{bg:dodgerblue}]++-*>[Product],[Regions{bg:dodgerblue}]++-*>[Region],[Shippers{bg:dodgerblue}]++-*>[Shipper],[Suppliers{bg:dodgerblue}]++-*>[Supplier],[Territories{bg:dodgerblue}]++-*>[Territory],[Alphabetical_list_of_products{bg:dodgerblue}]++-*>[Alphabetical_list_of_product],[Category_Sales_for_1997{bg:dodgerblue}]++-*>[Category_Sales_for_1997],[Current_Product_Lists{bg:dodgerblue}]++-*>[Current_Product_List],[Customer_and_Suppliers_by_Cities{bg:dodgerblue}]++-*>[Customer_and_Suppliers_by_City],[Invoices{bg:dodgerblue}]++-*>[Invoice],[Order_Details_Extendeds{bg:dodgerblue}]++-*>[Order_Details_Extended],[Order_Subtotals{bg:dodgerblue}]++-*>[Order_Subtotal],[Orders_Qries{bg:dodgerblue}]++-*>[Orders_Qry],[Product_Sales_for_1997{bg:dodgerblue}]++-*>[Product_Sales_for_1997],[Products_Above_Average_Prices{bg:dodgerblue}]++-*>[Products_Above_Average_Price],[Products_by_Categories{bg:dodgerblue}]++-*>[Products_by_Category],[Sales_by_Categories{bg:dodgerblue}]++-*>[Sales_by_Category],[Sales_Totals_by_Amounts{bg:dodgerblue}]++-*>[Sales_Totals_by_Amount],[Summary_of_Sales_by_Quarters{bg:dodgerblue}]++-*>[Summary_of_Sales_by_Quarter],[Summary_of_Sales_by_Years{bg:dodgerblue}]++-*>[Summary_of_Sales_by_Year])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Categories" + }, + { + "name": "CustomerDemographics" + }, + { + "name": "Customers" + }, + { + "name": "Employees" + }, + { + "name": "Order_Details" + }, + { + "name": "Orders" + }, + { + "name": "Products" + }, + { + "name": "Regions" + }, + { + "name": "Shippers" + }, + { + "name": "Suppliers" + }, + { + "name": "Territories" + }, + { + "name": "Alphabetical_list_of_products" + }, + { + "name": "Category_Sales_for_1997" + }, + { + "name": "Current_Product_Lists" + }, + { + "name": "Customer_and_Suppliers_by_Cities" + }, + { + "name": "Invoices" + }, + { + "name": "Order_Details_Extendeds" + }, + { + "name": "Order_Subtotals" + }, + { + "name": "Orders_Qries" + }, + { + "name": "Product_Sales_for_1997" + }, + { + "name": "Products_Above_Average_Prices" + }, + { + "name": "Products_by_Categories" + }, + { + "name": "Sales_by_Categories" + }, + { + "name": "Sales_Totals_by_Amounts" + }, + { + "name": "Summary_of_Sales_by_Quarters" + }, + { + "name": "Summary_of_Sales_by_Years" + } + ], + "paths": { + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "Description", + "Description desc", + "Picture", + "Picture desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Category", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories/{CategoryID}": { + "parameters": [ + { + "name": "CategoryID", + "in": "path", + "required": true, + "description": "key: CategoryID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories/{CategoryID}/Products": { + "parameters": [ + { + "name": "CategoryID", + "in": "path", + "required": true, + "description": "key: CategoryID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics": { + "get": { + "summary": "Get entities from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of CustomerDemographic", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics/{CustomerTypeID}": { + "parameters": [ + { + "name": "CustomerTypeID", + "in": "path", + "required": true, + "description": "key: CustomerTypeID", + "schema": { + "type": "string", + "maxLength": 10 + } + } + ], + "get": { + "summary": "Get entity from CustomerDemographics by key", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/CustomerDemographics/{CustomerTypeID}/Customers": { + "parameters": [ + { + "name": "CustomerTypeID", + "in": "path", + "required": true, + "description": "key: CustomerTypeID", + "schema": { + "type": "string", + "maxLength": 10 + } + } + ], + "get": { + "summary": "Get entities from related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Customer", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers": { + "get": { + "summary": "Get entities from Customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Customer", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers/{CustomerID}": { + "parameters": [ + { + "name": "CustomerID", + "in": "path", + "required": true, + "description": "key: CustomerID", + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entity from Customers by key", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customers", + "tags": [ + "Customers" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customers", + "tags": [ + "Customers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers/{CustomerID}/Orders": { + "parameters": [ + { + "name": "CustomerID", + "in": "path", + "required": true, + "description": "key: CustomerID", + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Customers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Order", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Customers", + "Orders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customers/{CustomerID}/CustomerDemographics": { + "parameters": [ + { + "name": "CustomerID", + "in": "path", + "required": true, + "description": "key: CustomerID", + "schema": { + "type": "string", + "maxLength": 5 + } + } + ], + "get": { + "summary": "Get entities from related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of CustomerDemographic", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees": { + "get": { + "summary": "Get entities from Employees", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Employee", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Employees by key", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Employees", + "tags": [ + "Employees" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Employees", + "tags": [ + "Employees" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Employees1": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Employees1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Employee", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees1", + "tags": [ + "Employees" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Employee1": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Employee1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Orders": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Employees", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Order", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Employees", + "Orders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Territories": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Employees", + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Territory", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Employees", + "Territories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details": { + "get": { + "summary": "Get entities from Order_Details", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Order_Detail", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details", + "tags": [ + "Order_Details" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details/{OrderID}/{ProductID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Order_Details by key", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details", + "tags": [ + "Order_Details" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details", + "tags": [ + "Order_Details" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details/{OrderID}/{ProductID}/Order": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Order", + "tags": [ + "Order_Details", + "Orders" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details/{OrderID}/{ProductID}/Product": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "Order_Details", + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders": { + "get": { + "summary": "Get entities from Orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Order", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Orders by key", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders", + "tags": [ + "Orders" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders", + "tags": [ + "Orders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Customer": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Customer", + "tags": [ + "Orders", + "Customers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Employee": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Employee", + "tags": [ + "Orders", + "Employees" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Order_Details": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Order_Detail", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Shipper": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Shipper", + "tags": [ + "Orders", + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ProductID}": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ProductID}/Category": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ProductID}/Order_Details": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Order_Detail", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products/{ProductID}/Supplier": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions": { + "get": { + "summary": "Get entities from Regions", + "tags": [ + "Regions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionID desc", + "RegionDescription", + "RegionDescription desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Region", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Regions", + "tags": [ + "Regions" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions/{RegionID}": { + "parameters": [ + { + "name": "RegionID", + "in": "path", + "required": true, + "description": "key: RegionID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Regions by key", + "tags": [ + "Regions" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Regions", + "tags": [ + "Regions" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Regions", + "tags": [ + "Regions" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Regions/{RegionID}/Territories": { + "parameters": [ + { + "name": "RegionID", + "in": "path", + "required": true, + "description": "key: RegionID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Regions", + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Territory", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Regions", + "Territories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers": { + "get": { + "summary": "Get entities from Shippers", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "ShipperID desc", + "CompanyName", + "CompanyName desc", + "Phone", + "Phone desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Shipper", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Shippers", + "tags": [ + "Shippers" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers/{ShipperID}": { + "parameters": [ + { + "name": "ShipperID", + "in": "path", + "required": true, + "description": "key: ShipperID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Shippers by key", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Shippers", + "tags": [ + "Shippers" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Shipper-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Shippers", + "tags": [ + "Shippers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Shippers/{ShipperID}/Orders": { + "parameters": [ + { + "name": "ShipperID", + "in": "path", + "required": true, + "description": "key: ShipperID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Order", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "SupplierID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc", + "HomePage", + "HomePage desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Supplier", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers/{SupplierID}": { + "parameters": [ + { + "name": "SupplierID", + "in": "path", + "required": true, + "description": "key: SupplierID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers/{SupplierID}/Products": { + "parameters": [ + { + "name": "SupplierID", + "in": "path", + "required": true, + "description": "key: SupplierID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories": { + "get": { + "summary": "Get entities from Territories", + "tags": [ + "Territories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Territory", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Territories", + "tags": [ + "Territories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories/{TerritoryID}": { + "parameters": [ + { + "name": "TerritoryID", + "in": "path", + "required": true, + "description": "key: TerritoryID", + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get entity from Territories by key", + "tags": [ + "Territories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Territories", + "tags": [ + "Territories" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Territory-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Territories", + "tags": [ + "Territories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories/{TerritoryID}/Region": { + "parameters": [ + { + "name": "TerritoryID", + "in": "path", + "required": true, + "description": "key: TerritoryID", + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get related Region", + "tags": [ + "Territories", + "Regions" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Region" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Territories/{TerritoryID}/Employees": { + "parameters": [ + { + "name": "TerritoryID", + "in": "path", + "required": true, + "description": "key: TerritoryID", + "schema": { + "type": "string", + "maxLength": 20 + } + } + ], + "get": { + "summary": "Get entities from related Employees", + "tags": [ + "Territories", + "Employees" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Employee", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees", + "tags": [ + "Territories", + "Employees" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products": { + "get": { + "summary": "Get entities from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc", + "CategoryName", + "CategoryName desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Alphabetical_list_of_product", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products/{CategoryName}/{Discontinued}/{ProductID}/{ProductName}": { + "parameters": [ + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "name": "Discontinued", + "in": "path", + "required": true, + "description": "key: Discontinued", + "schema": { + "type": "boolean" + } + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Alphabetical_list_of_products by key", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Alphabetical_list_of_product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Category_Sales_for_1997": { + "get": { + "summary": "Get entities from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "CategorySales", + "CategorySales desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Category_Sales_for_1997", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Category_Sales_for_1997/{CategoryName}": { + "parameters": [ + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "schema": { + "type": "string", + "maxLength": 15 + } + } + ], + "get": { + "summary": "Get entity from Category_Sales_for_1997 by key", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Category_Sales_for_1997-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Current_Product_Lists": { + "get": { + "summary": "Get entities from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Current_Product_List", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Current_Product_Lists/{ProductID}/{ProductName}": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Current_Product_Lists by key", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Current_Product_List-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities": { + "get": { + "summary": "Get entities from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "City desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "Relationship", + "Relationship desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Customer_and_Suppliers_by_City", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities/{CompanyName}/{Relationship}": { + "parameters": [ + { + "name": "CompanyName", + "in": "path", + "required": true, + "description": "key: CompanyName", + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "name": "Relationship", + "in": "path", + "required": true, + "description": "key: Relationship", + "schema": { + "type": "string", + "maxLength": 9 + } + } + ], + "get": { + "summary": "Get entity from Customer_and_Suppliers_by_Cities by key", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Customer_and_Suppliers_by_City-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Invoices": { + "get": { + "summary": "Get entities from Invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CustomerID", + "CustomerID desc", + "CustomerName", + "CustomerName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Salesperson", + "Salesperson desc", + "OrderID", + "OrderID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipperName", + "ShipperName desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc", + "Freight", + "Freight desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Invoice", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Invoices", + "tags": [ + "Invoices" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Invoices/{CustomerName}/{Discount}/{OrderID}/{ProductID}/{ProductName}/{Quantity}/{Salesperson}/{ShipperName}/{UnitPrice}": { + "parameters": [ + { + "name": "CustomerName", + "in": "path", + "required": true, + "description": "key: CustomerName", + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "name": "Discount", + "in": "path", + "required": true, + "description": "key: Discount", + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "name": "Quantity", + "in": "path", + "required": true, + "description": "key: Quantity", + "schema": { + "type": "integer", + "format": "int16" + } + }, + { + "name": "Salesperson", + "in": "path", + "required": true, + "description": "key: Salesperson", + "schema": { + "type": "string", + "maxLength": 31 + } + }, + { + "name": "ShipperName", + "in": "path", + "required": true, + "description": "key: ShipperName", + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "name": "UnitPrice", + "in": "path", + "required": true, + "description": "key: UnitPrice", + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + } + ], + "get": { + "summary": "Get entity from Invoices by key", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Invoices", + "tags": [ + "Invoices" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Invoice-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Invoices", + "tags": [ + "Invoices" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details_Extendeds": { + "get": { + "summary": "Get entities from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Order_Details_Extended", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Details_Extendeds/{Discount}/{OrderID}/{ProductID}/{ProductName}/{Quantity}/{UnitPrice}": { + "parameters": [ + { + "name": "Discount", + "in": "path", + "required": true, + "description": "key: Discount", + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "name": "Quantity", + "in": "path", + "required": true, + "description": "key: Quantity", + "schema": { + "type": "integer", + "format": "int16" + } + }, + { + "name": "UnitPrice", + "in": "path", + "required": true, + "description": "key: UnitPrice", + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + } + ], + "get": { + "summary": "Get entity from Order_Details_Extendeds by key", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Details_Extended-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Subtotals": { + "get": { + "summary": "Get entities from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Order_Subtotal", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Order_Subtotals/{OrderID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Order_Subtotals by key", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Order_Subtotal-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders_Qries": { + "get": { + "summary": "Get entities from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CompanyName", + "CompanyName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Orders_Qry", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Orders_Qries/{CompanyName}/{OrderID}": { + "parameters": [ + { + "name": "CompanyName", + "in": "path", + "required": true, + "description": "key: CompanyName", + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Orders_Qries by key", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Orders_Qry-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Product_Sales_for_1997": { + "get": { + "summary": "Get entities from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product_Sales_for_1997", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Product_Sales_for_1997/{CategoryName}/{ProductName}": { + "parameters": [ + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Product_Sales_for_1997 by key", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Product_Sales_for_1997-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices": { + "get": { + "summary": "Get entities from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Products_Above_Average_Price", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices/{ProductName}": { + "parameters": [ + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Products_Above_Average_Prices by key", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_Above_Average_Price-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_by_Categories": { + "get": { + "summary": "Get entities from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitsInStock", + "UnitsInStock desc", + "Discontinued", + "Discontinued desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Products_by_Category", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products_by_Categories/{CategoryName}/{Discontinued}/{ProductName}": { + "parameters": [ + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "name": "Discontinued", + "in": "path", + "required": true, + "description": "key: Discontinued", + "schema": { + "type": "boolean" + } + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Products_by_Categories by key", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Products_by_Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_by_Categories": { + "get": { + "summary": "Get entities from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Sales_by_Category", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_by_Categories/{CategoryID}/{CategoryName}/{ProductName}": { + "parameters": [ + { + "name": "CategoryID", + "in": "path", + "required": true, + "description": "key: CategoryID", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "schema": { + "type": "string", + "maxLength": 15 + } + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "schema": { + "type": "string", + "maxLength": 40 + } + } + ], + "get": { + "summary": "Get entity from Sales_by_Categories by key", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_by_Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts": { + "get": { + "summary": "Get entities from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "SaleAmount desc", + "OrderID", + "OrderID desc", + "CompanyName", + "CompanyName desc", + "ShippedDate", + "ShippedDate desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Sales_Totals_by_Amount", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts/{CompanyName}/{OrderID}": { + "parameters": [ + { + "name": "CompanyName", + "in": "path", + "required": true, + "description": "key: CompanyName", + "schema": { + "type": "string", + "maxLength": 40 + } + }, + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Sales_Totals_by_Amounts by key", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Sales_Totals_by_Amount-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Summary_of_Sales_by_Quarter", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters/{OrderID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Quarters by key", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Quarter-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Summary_of_Sales_by_Year", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years/{OrderID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Years by key", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NorthwindModel.Summary_of_Sales_by_Year-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Categories HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "NorthwindModel.Category": { + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "nullable": true, + "format": "base64url" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + }, + "title": "Category" + }, + "NorthwindModel.Category-create": { + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "nullable": true, + "format": "base64url" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + }, + "required": [ + "CategoryID" + ], + "title": "Category (for create)" + }, + "NorthwindModel.Category-update": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": "string", + "nullable": true + }, + "Picture": { + "type": "string", + "nullable": true, + "format": "base64url" + } + }, + "title": "Category (for update)" + }, + "NorthwindModel.CustomerDemographic": { + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": "string", + "nullable": true + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + } + }, + "title": "CustomerDemographic" + }, + "NorthwindModel.CustomerDemographic-create": { + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": "string", + "nullable": true + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + } + }, + "required": [ + "CustomerTypeID" + ], + "title": "CustomerDemographic (for create)" + }, + "NorthwindModel.CustomerDemographic-update": { + "type": "object", + "properties": { + "CustomerDesc": { + "type": "string", + "nullable": true + } + }, + "title": "CustomerDemographic (for update)" + }, + "NorthwindModel.Customer": { + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "ContactTitle": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Phone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Fax": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic" + } + } + }, + "title": "Customer" + }, + "NorthwindModel.Customer-create": { + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "ContactTitle": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Phone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Fax": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.CustomerDemographic-create" + } + } + }, + "required": [ + "CustomerID" + ], + "title": "Customer (for create)" + }, + "NorthwindModel.Customer-update": { + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "ContactTitle": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Phone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Fax": { + "type": "string", + "nullable": true, + "maxLength": 24 + } + }, + "title": "Customer (for update)" + }, + "NorthwindModel.Employee": { + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "TitleOfCourtesy": { + "type": "string", + "nullable": true, + "maxLength": 25 + }, + "BirthDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "HireDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "HomePhone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Extension": { + "type": "string", + "nullable": true, + "maxLength": 4 + }, + "Photo": { + "type": "string", + "nullable": true, + "format": "base64url" + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "PhotoPath": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + }, + "Employee1": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + ] + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + }, + "title": "Employee" + }, + "NorthwindModel.Employee-create": { + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "TitleOfCourtesy": { + "type": "string", + "nullable": true, + "maxLength": 25 + }, + "BirthDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "HireDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "HomePhone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Extension": { + "type": "string", + "nullable": true, + "maxLength": 4 + }, + "Photo": { + "type": "string", + "nullable": true, + "format": "base64url" + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "PhotoPath": { + "type": "string", + "nullable": true, + "maxLength": 255 + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + }, + "Employee1": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + ] + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "EmployeeID" + ], + "title": "Employee (for create)" + }, + "NorthwindModel.Employee-update": { + "type": "object", + "properties": { + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "TitleOfCourtesy": { + "type": "string", + "nullable": true, + "maxLength": 25 + }, + "BirthDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "HireDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "HomePhone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Extension": { + "type": "string", + "nullable": true, + "maxLength": 4 + }, + "Photo": { + "type": "string", + "nullable": true, + "format": "base64url" + }, + "Notes": { + "type": "string", + "nullable": true + }, + "ReportsTo": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "PhotoPath": { + "type": "string", + "nullable": true, + "maxLength": 255 + } + }, + "title": "Employee (for update)" + }, + "NorthwindModel.Order_Detail": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/components/schemas/NorthwindModel.Order" + }, + "Product": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + }, + "title": "Order_Detail" + }, + "NorthwindModel.Order_Detail-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + }, + "Product": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + }, + "required": [ + "OrderID", + "ProductID" + ], + "title": "Order_Detail (for create)" + }, + "NorthwindModel.Order_Detail-update": { + "type": "object", + "properties": { + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + "title": "Order_Detail (for update)" + }, + "NorthwindModel.Order": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "nullable": true, + "maxLength": 5 + }, + "EmployeeID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "OrderDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": "string", + "nullable": true, + "maxLength": 40 + }, + "ShipAddress": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "ShipCity": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipRegion": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipPostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "ShipCountry": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Customer": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Customer" + } + ] + }, + "Employee": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + ] + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + }, + "Shipper": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Shipper" + } + ] + } + }, + "title": "Order" + }, + "NorthwindModel.Order-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "nullable": true, + "maxLength": 5 + }, + "EmployeeID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "OrderDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": "string", + "nullable": true, + "maxLength": 40 + }, + "ShipAddress": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "ShipCity": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipRegion": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipPostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "ShipCountry": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Customer": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Customer-create" + } + ] + }, + "Employee": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + ] + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + }, + "Shipper": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Shipper-create" + } + ] + } + }, + "required": [ + "OrderID" + ], + "title": "Order (for create)" + }, + "NorthwindModel.Order-update": { + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "nullable": true, + "maxLength": 5 + }, + "EmployeeID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "OrderDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": "string", + "nullable": true, + "maxLength": 40 + }, + "ShipAddress": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "ShipCity": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipRegion": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipPostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "ShipCountry": { + "type": "string", + "nullable": true, + "maxLength": 15 + } + }, + "title": "Order (for update)" + }, + "NorthwindModel.Product": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "CategoryID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "QuantityPerUnit": { + "type": "string", + "nullable": true, + "maxLength": 20 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "UnitsOnOrder": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "ReorderLevel": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Category" + } + ] + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail" + } + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Supplier" + } + ] + } + }, + "title": "Product" + }, + "NorthwindModel.Product-create": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "CategoryID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "QuantityPerUnit": { + "type": "string", + "nullable": true, + "maxLength": 20 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "UnitsOnOrder": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "ReorderLevel": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Category-create" + } + ] + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order_Detail-create" + } + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/NorthwindModel.Supplier-create" + } + ] + } + }, + "required": [ + "ProductID" + ], + "title": "Product (for create)" + }, + "NorthwindModel.Product-update": { + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "CategoryID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "QuantityPerUnit": { + "type": "string", + "nullable": true, + "maxLength": 20 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "UnitsOnOrder": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "ReorderLevel": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + } + }, + "title": "Product (for update)" + }, + "NorthwindModel.Region": { + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory" + } + } + }, + "title": "Region" + }, + "NorthwindModel.Region-create": { + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "RegionID" + ], + "title": "Region (for create)" + }, + "NorthwindModel.Region-update": { + "type": "object", + "properties": { + "RegionDescription": { + "type": "string", + "maxLength": 50 + } + }, + "title": "Region (for update)" + }, + "NorthwindModel.Shipper": { + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order" + } + } + }, + "title": "Shipper" + }, + "NorthwindModel.Shipper-create": { + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Order-create" + } + } + }, + "required": [ + "ShipperID" + ], + "title": "Shipper (for create)" + }, + "NorthwindModel.Shipper-update": { + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": "string", + "nullable": true, + "maxLength": 24 + } + }, + "title": "Shipper (for update)" + }, + "NorthwindModel.Supplier": { + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "ContactTitle": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Phone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Fax": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "HomePage": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product" + } + } + }, + "title": "Supplier" + }, + "NorthwindModel.Supplier-create": { + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "ContactTitle": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Phone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Fax": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "HomePage": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Product-create" + } + } + }, + "required": [ + "SupplierID" + ], + "title": "Supplier (for create)" + }, + "NorthwindModel.Supplier-update": { + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "ContactTitle": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Phone": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "Fax": { + "type": "string", + "nullable": true, + "maxLength": 24 + }, + "HomePage": { + "type": "string", + "nullable": true + } + }, + "title": "Supplier (for update)" + }, + "NorthwindModel.Territory": { + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/components/schemas/NorthwindModel.Region" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee" + } + } + }, + "title": "Territory" + }, + "NorthwindModel.Territory-create": { + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/components/schemas/NorthwindModel.Region-create" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NorthwindModel.Employee-create" + } + } + }, + "required": [ + "TerritoryID" + ], + "title": "Territory (for create)" + }, + "NorthwindModel.Territory-update": { + "type": "object", + "properties": { + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + } + }, + "title": "Territory (for update)" + }, + "NorthwindModel.Alphabetical_list_of_product": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "CategoryID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "QuantityPerUnit": { + "type": "string", + "nullable": true, + "maxLength": 20 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "UnitsOnOrder": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "ReorderLevel": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + }, + "title": "Alphabetical_list_of_product" + }, + "NorthwindModel.Alphabetical_list_of_product-create": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "CategoryID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "QuantityPerUnit": { + "type": "string", + "nullable": true, + "maxLength": 20 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "UnitsOnOrder": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "ReorderLevel": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + }, + "required": [ + "ProductID", + "ProductName", + "Discontinued", + "CategoryName" + ], + "title": "Alphabetical_list_of_product (for create)" + }, + "NorthwindModel.Alphabetical_list_of_product-update": { + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "CategoryID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "QuantityPerUnit": { + "type": "string", + "nullable": true, + "maxLength": 20 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "UnitsOnOrder": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "ReorderLevel": { + "type": "integer", + "nullable": true, + "format": "int16" + } + }, + "title": "Alphabetical_list_of_product (for update)" + }, + "NorthwindModel.Category_Sales_for_1997": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Category_Sales_for_1997" + }, + "NorthwindModel.Category_Sales_for_1997-create": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "CategoryName" + ], + "title": "Category_Sales_for_1997 (for create)" + }, + "NorthwindModel.Category_Sales_for_1997-update": { + "type": "object", + "properties": { + "CategorySales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Category_Sales_for_1997 (for update)" + }, + "NorthwindModel.Current_Product_List": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + }, + "title": "Current_Product_List" + }, + "NorthwindModel.Current_Product_List-create": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + }, + "required": [ + "ProductID", + "ProductName" + ], + "title": "Current_Product_List (for create)" + }, + "NorthwindModel.Current_Product_List-update": { + "type": "object", + "title": "Current_Product_List (for update)" + }, + "NorthwindModel.Customer_and_Suppliers_by_City": { + "type": "object", + "properties": { + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + }, + "title": "Customer_and_Suppliers_by_City" + }, + "NorthwindModel.Customer_and_Suppliers_by_City-create": { + "type": "object", + "properties": { + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": "string", + "nullable": true, + "maxLength": 30 + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + }, + "required": [ + "CompanyName", + "Relationship" + ], + "title": "Customer_and_Suppliers_by_City (for create)" + }, + "NorthwindModel.Customer_and_Suppliers_by_City-update": { + "type": "object", + "properties": { + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ContactName": { + "type": "string", + "nullable": true, + "maxLength": 30 + } + }, + "title": "Customer_and_Suppliers_by_City (for update)" + }, + "NorthwindModel.Invoice": { + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "nullable": true, + "maxLength": 40 + }, + "ShipAddress": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "ShipCity": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipRegion": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipPostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "ShipCountry": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "CustomerID": { + "type": "string", + "nullable": true, + "maxLength": 5 + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Invoice" + }, + "NorthwindModel.Invoice-create": { + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "nullable": true, + "maxLength": 40 + }, + "ShipAddress": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "ShipCity": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipRegion": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipPostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "ShipCountry": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "CustomerID": { + "type": "string", + "nullable": true, + "maxLength": 5 + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "CustomerName", + "Salesperson", + "OrderID", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount" + ], + "title": "Invoice (for create)" + }, + "NorthwindModel.Invoice-update": { + "type": "object", + "properties": { + "ShipName": { + "type": "string", + "nullable": true, + "maxLength": 40 + }, + "ShipAddress": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "ShipCity": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipRegion": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipPostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "ShipCountry": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "CustomerID": { + "type": "string", + "nullable": true, + "maxLength": 5 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "OrderDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Invoice (for update)" + }, + "NorthwindModel.Order_Details_Extended": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Order_Details_Extended" + }, + "NorthwindModel.Order_Details_Extended-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount" + ], + "title": "Order_Details_Extended (for create)" + }, + "NorthwindModel.Order_Details_Extended-update": { + "type": "object", + "properties": { + "ExtendedPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Order_Details_Extended (for update)" + }, + "NorthwindModel.Order_Subtotal": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Order_Subtotal" + }, + "NorthwindModel.Order_Subtotal-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "OrderID" + ], + "title": "Order_Subtotal (for create)" + }, + "NorthwindModel.Order_Subtotal-update": { + "type": "object", + "properties": { + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Order_Subtotal (for update)" + }, + "NorthwindModel.Orders_Qry": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "nullable": true, + "maxLength": 5 + }, + "EmployeeID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "OrderDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": "string", + "nullable": true, + "maxLength": 40 + }, + "ShipAddress": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "ShipCity": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipRegion": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipPostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "ShipCountry": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + } + }, + "title": "Orders_Qry" + }, + "NorthwindModel.Orders_Qry-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": "string", + "nullable": true, + "maxLength": 5 + }, + "EmployeeID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "OrderDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": "string", + "nullable": true, + "maxLength": 40 + }, + "ShipAddress": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "ShipCity": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipRegion": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipPostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "ShipCountry": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + } + }, + "required": [ + "OrderID", + "CompanyName" + ], + "title": "Orders_Qry (for create)" + }, + "NorthwindModel.Orders_Qry-update": { + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "nullable": true, + "maxLength": 5 + }, + "EmployeeID": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "OrderDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "Freight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": "string", + "nullable": true, + "maxLength": 40 + }, + "ShipAddress": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "ShipCity": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipRegion": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "ShipPostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "ShipCountry": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Address": { + "type": "string", + "nullable": true, + "maxLength": 60 + }, + "City": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "Region": { + "type": "string", + "nullable": true, + "maxLength": 15 + }, + "PostalCode": { + "type": "string", + "nullable": true, + "maxLength": 10 + }, + "Country": { + "type": "string", + "nullable": true, + "maxLength": 15 + } + }, + "title": "Orders_Qry (for update)" + }, + "NorthwindModel.Product_Sales_for_1997": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Product_Sales_for_1997" + }, + "NorthwindModel.Product_Sales_for_1997-create": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "CategoryName", + "ProductName" + ], + "title": "Product_Sales_for_1997 (for create)" + }, + "NorthwindModel.Product_Sales_for_1997-update": { + "type": "object", + "properties": { + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Product_Sales_for_1997 (for update)" + }, + "NorthwindModel.Products_Above_Average_Price": { + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Products_Above_Average_Price" + }, + "NorthwindModel.Products_Above_Average_Price-create": { + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "ProductName" + ], + "title": "Products_Above_Average_Price (for create)" + }, + "NorthwindModel.Products_Above_Average_Price-update": { + "type": "object", + "properties": { + "UnitPrice": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Products_Above_Average_Price (for update)" + }, + "NorthwindModel.Products_by_Category": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": "string", + "nullable": true, + "maxLength": 20 + }, + "UnitsInStock": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + } + }, + "title": "Products_by_Category" + }, + "NorthwindModel.Products_by_Category-create": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": "string", + "nullable": true, + "maxLength": 20 + }, + "UnitsInStock": { + "type": "integer", + "nullable": true, + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + } + }, + "required": [ + "CategoryName", + "ProductName", + "Discontinued" + ], + "title": "Products_by_Category (for create)" + }, + "NorthwindModel.Products_by_Category-update": { + "type": "object", + "properties": { + "QuantityPerUnit": { + "type": "string", + "nullable": true, + "maxLength": 20 + }, + "UnitsInStock": { + "type": "integer", + "nullable": true, + "format": "int16" + } + }, + "title": "Products_by_Category (for update)" + }, + "NorthwindModel.Sales_by_Category": { + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Sales_by_Category" + }, + "NorthwindModel.Sales_by_Category-create": { + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "CategoryID", + "CategoryName", + "ProductName" + ], + "title": "Sales_by_Category (for create)" + }, + "NorthwindModel.Sales_by_Category-update": { + "type": "object", + "properties": { + "ProductSales": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Sales_by_Category (for update)" + }, + "NorthwindModel.Sales_Totals_by_Amount": { + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + }, + "title": "Sales_Totals_by_Amount" + }, + "NorthwindModel.Sales_Totals_by_Amount-create": { + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + }, + "required": [ + "OrderID", + "CompanyName" + ], + "title": "Sales_Totals_by_Amount (for create)" + }, + "NorthwindModel.Sales_Totals_by_Amount-update": { + "type": "object", + "properties": { + "SaleAmount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + }, + "title": "Sales_Totals_by_Amount (for update)" + }, + "NorthwindModel.Summary_of_Sales_by_Quarter": { + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Summary_of_Sales_by_Quarter" + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-create": { + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "OrderID" + ], + "title": "Summary_of_Sales_by_Quarter (for create)" + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-update": { + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Summary_of_Sales_by_Quarter (for update)" + }, + "NorthwindModel.Summary_of_Sales_by_Year": { + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Summary_of_Sales_by_Year" + }, + "NorthwindModel.Summary_of_Sales_by_Year-create": { + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "OrderID" + ], + "title": "Summary_of_Sales_by_Year (for create)" + }, + "NorthwindModel.Summary_of_Sales_by_Year-update": { + "type": "object", + "properties": { + "ShippedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Subtotal": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Summary_of_Sales_by_Year (for update)" + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} diff --git a/odata-openapi/tools/tests/Northwind-key-as-segment.swagger.json b/odata-openapi/tools/tests/Northwind-key-as-segment.swagger.json new file mode 100644 index 00000000..c34943a9 --- /dev/null +++ b/odata-openapi/tools/tests/Northwind-key-as-segment.swagger.json @@ -0,0 +1,13156 @@ +{ + "swagger": "2.0", + "info": { + "title": "Service for namespace ODataWebExperimental.Northwind.Model", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Category{bg:orange}],[Category]-*>[Product],[CustomerDemographic{bg:orange}],[CustomerDemographic]-*>[Customer],[Customer{bg:orange}],[Customer]-*>[Order],[Customer]-*>[CustomerDemographic],[Employee{bg:orange}],[Employee]-*>[Employee],[Employee]-0..1>[Employee],[Employee]-*>[Order],[Employee]-*>[Territory],[Order_Detail{bg:orange}],[Order_Detail]->[Order],[Order_Detail]->[Product],[Order{bg:orange}],[Order]-0..1>[Customer],[Order]-0..1>[Employee],[Order]-*>[Order_Detail],[Order]-0..1>[Shipper],[Product{bg:orange}],[Product]-0..1>[Category],[Product]-*>[Order_Detail],[Product]-0..1>[Supplier],[Region{bg:orange}],[Region]-*>[Territory],[Shipper{bg:orange}],[Shipper]-*>[Order],[Supplier{bg:orange}],[Supplier]-*>[Product],[Territory{bg:orange}],[Territory]->[Region],[Territory]-*>[Employee],[Alphabetical_list_of_product{bg:orange}],[Category_Sales_for_1997{bg:orange}],[Current_Product_List{bg:orange}],[Customer_and_Suppliers_by_City{bg:orange}],[Invoice{bg:orange}],[Order_Details_Extended{bg:orange}],[Order_Subtotal{bg:orange}],[Orders_Qry{bg:orange}],[Product_Sales_for_1997{bg:orange}],[Products_Above_Average_Price{bg:orange}],[Products_by_Category{bg:orange}],[Sales_by_Category{bg:orange}],[Sales_Totals_by_Amount{bg:orange}],[Summary_of_Sales_by_Quarter{bg:orange}],[Summary_of_Sales_by_Year{bg:orange}],[Categories{bg:dodgerblue}]++-*>[Category],[CustomerDemographics{bg:dodgerblue}]++-*>[CustomerDemographic],[Customers{bg:dodgerblue}]++-*>[Customer],[Employees{bg:dodgerblue}]++-*>[Employee],[Order_Details{bg:dodgerblue}]++-*>[Order_Detail],[Orders{bg:dodgerblue}]++-*>[Order],[Products{bg:dodgerblue}]++-*>[Product],[Regions{bg:dodgerblue}]++-*>[Region],[Shippers{bg:dodgerblue}]++-*>[Shipper],[Suppliers{bg:dodgerblue}]++-*>[Supplier],[Territories{bg:dodgerblue}]++-*>[Territory],[Alphabetical_list_of_products{bg:dodgerblue}]++-*>[Alphabetical_list_of_product],[Category_Sales_for_1997{bg:dodgerblue}]++-*>[Category_Sales_for_1997],[Current_Product_Lists{bg:dodgerblue}]++-*>[Current_Product_List],[Customer_and_Suppliers_by_Cities{bg:dodgerblue}]++-*>[Customer_and_Suppliers_by_City],[Invoices{bg:dodgerblue}]++-*>[Invoice],[Order_Details_Extendeds{bg:dodgerblue}]++-*>[Order_Details_Extended],[Order_Subtotals{bg:dodgerblue}]++-*>[Order_Subtotal],[Orders_Qries{bg:dodgerblue}]++-*>[Orders_Qry],[Product_Sales_for_1997{bg:dodgerblue}]++-*>[Product_Sales_for_1997],[Products_Above_Average_Prices{bg:dodgerblue}]++-*>[Products_Above_Average_Price],[Products_by_Categories{bg:dodgerblue}]++-*>[Products_by_Category],[Sales_by_Categories{bg:dodgerblue}]++-*>[Sales_by_Category],[Sales_Totals_by_Amounts{bg:dodgerblue}]++-*>[Sales_Totals_by_Amount],[Summary_of_Sales_by_Quarters{bg:dodgerblue}]++-*>[Summary_of_Sales_by_Quarter],[Summary_of_Sales_by_Years{bg:dodgerblue}]++-*>[Summary_of_Sales_by_Year])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "schemes": [ + "https" + ], + "host": "localhost", + "basePath": "/service-root", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + { + "name": "Categories" + }, + { + "name": "CustomerDemographics" + }, + { + "name": "Customers" + }, + { + "name": "Employees" + }, + { + "name": "Order_Details" + }, + { + "name": "Orders" + }, + { + "name": "Products" + }, + { + "name": "Regions" + }, + { + "name": "Shippers" + }, + { + "name": "Suppliers" + }, + { + "name": "Territories" + }, + { + "name": "Alphabetical_list_of_products" + }, + { + "name": "Category_Sales_for_1997" + }, + { + "name": "Current_Product_Lists" + }, + { + "name": "Customer_and_Suppliers_by_Cities" + }, + { + "name": "Invoices" + }, + { + "name": "Order_Details_Extendeds" + }, + { + "name": "Order_Subtotals" + }, + { + "name": "Orders_Qries" + }, + { + "name": "Product_Sales_for_1997" + }, + { + "name": "Products_Above_Average_Prices" + }, + { + "name": "Products_by_Categories" + }, + { + "name": "Sales_by_Categories" + }, + { + "name": "Sales_Totals_by_Amounts" + }, + { + "name": "Summary_of_Sales_by_Quarters" + }, + { + "name": "Summary_of_Sales_by_Years" + } + ], + "paths": { + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "Description", + "Description desc", + "Picture", + "Picture desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Category", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Category" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "Category", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Category-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories/{CategoryID}": { + "parameters": [ + { + "name": "CategoryID", + "in": "path", + "required": true, + "description": "key: CategoryID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "Category", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Category-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories/{CategoryID}/Products": { + "parameters": [ + { + "name": "CategoryID", + "in": "path", + "required": true, + "description": "key: CategoryID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/CustomerDemographics": { + "get": { + "summary": "Get entities from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of CustomerDemographic", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "name": "CustomerDemographic", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/CustomerDemographics/{CustomerTypeID}": { + "parameters": [ + { + "name": "CustomerTypeID", + "in": "path", + "required": true, + "description": "key: CustomerTypeID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from CustomerDemographics by key", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "parameters": [ + { + "name": "CustomerDemographic", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from CustomerDemographics", + "tags": [ + "CustomerDemographics" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/CustomerDemographics/{CustomerTypeID}/Customers": { + "parameters": [ + { + "name": "CustomerTypeID", + "in": "path", + "required": true, + "description": "key: CustomerTypeID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Customer", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Customer" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Customers", + "tags": [ + "CustomerDemographics", + "Customers" + ], + "parameters": [ + { + "name": "Customer", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Customers": { + "get": { + "summary": "Get entities from Customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CustomerID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Customer", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Customer" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "Customer", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Customers/{CustomerID}": { + "parameters": [ + { + "name": "CustomerID", + "in": "path", + "required": true, + "description": "key: CustomerID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Customers by key", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customers", + "tags": [ + "Customers" + ], + "parameters": [ + { + "name": "Customer", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customers", + "tags": [ + "Customers" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Customers/{CustomerID}/Orders": { + "parameters": [ + { + "name": "CustomerID", + "in": "path", + "required": true, + "description": "key: CustomerID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Customers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Order", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Customers", + "Orders" + ], + "parameters": [ + { + "name": "Order", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Customers/{CustomerID}/CustomerDemographics": { + "parameters": [ + { + "name": "CustomerID", + "in": "path", + "required": true, + "description": "key: CustomerID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerTypeID desc", + "CustomerDesc", + "CustomerDesc desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerTypeID", + "CustomerDesc" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customers" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of CustomerDemographic", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related CustomerDemographics", + "tags": [ + "Customers", + "CustomerDemographics" + ], + "parameters": [ + { + "name": "CustomerDemographic", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Employees": { + "get": { + "summary": "Get entities from Employees", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Employee", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Employees", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "Employee", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Employees by key", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Employees", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "Employee", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Employees", + "tags": [ + "Employees" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Employees1": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Employees1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Employee", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "Employee", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Employee1": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Employee1", + "tags": [ + "Employees" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Orders": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Employees", + "Orders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Order", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Employees", + "Orders" + ], + "parameters": [ + { + "name": "Order", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Employees/{EmployeeID}/Territories": { + "parameters": [ + { + "name": "EmployeeID", + "in": "path", + "required": true, + "description": "key: EmployeeID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Employees", + "Territories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Territory", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Territory" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Employees", + "Territories" + ], + "parameters": [ + { + "name": "Territory", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Territory-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Territory" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Order_Details": { + "get": { + "summary": "Get entities from Order_Details", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Order_Detail", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order_Detail" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "name": "Order_Detail", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Detail-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Detail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Order_Details/{OrderID}/{ProductID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Order_Details by key", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Detail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details", + "tags": [ + "Order_Details" + ], + "parameters": [ + { + "name": "Order_Detail", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Detail-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details", + "tags": [ + "Order_Details" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Order_Details/{OrderID}/{ProductID}/Order": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Order", + "tags": [ + "Order_Details", + "Orders" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Order_Details/{OrderID}/{ProductID}/Product": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "Order_Details", + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Orders": { + "get": { + "summary": "Get entities from Orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Order", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "Order", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Orders/{OrderID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Orders by key", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders", + "tags": [ + "Orders" + ], + "parameters": [ + { + "name": "Order", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders", + "tags": [ + "Orders" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Customer": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Customer", + "tags": [ + "Orders", + "Customers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CustomerID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders", + "CustomerDemographics" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Employee": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Employee", + "tags": [ + "Orders", + "Employees" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Order_Details": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Order_Detail", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order_Detail" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Orders", + "Order_Details" + ], + "parameters": [ + { + "name": "Order_Detail", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Detail-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Detail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Orders/{OrderID}/Shipper": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Shipper", + "tags": [ + "Orders", + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Shipper" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products/{ProductID}": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products/{ProductID}/Category": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "Description", + "Picture" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products/{ProductID}/Order_Details": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "UnitPrice", + "Quantity", + "Discount" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Order", + "Product" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Order_Detail", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order_Detail" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Order_Details", + "tags": [ + "Products", + "Order_Details" + ], + "parameters": [ + { + "name": "Order_Detail", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Detail-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Detail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products/{ProductID}/Supplier": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Regions": { + "get": { + "summary": "Get entities from Regions", + "tags": [ + "Regions" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionID desc", + "RegionDescription", + "RegionDescription desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Region", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Region" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Regions", + "tags": [ + "Regions" + ], + "parameters": [ + { + "name": "Region", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Region-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Region" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Regions/{RegionID}": { + "parameters": [ + { + "name": "RegionID", + "in": "path", + "required": true, + "description": "key: RegionID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Regions by key", + "tags": [ + "Regions" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Region" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Regions", + "tags": [ + "Regions" + ], + "parameters": [ + { + "name": "Region", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Region-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Regions", + "tags": [ + "Regions" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Regions/{RegionID}/Territories": { + "parameters": [ + { + "name": "RegionID", + "in": "path", + "required": true, + "description": "key: RegionID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Territories", + "tags": [ + "Regions", + "Territories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Territory", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Territory" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Territories", + "tags": [ + "Regions", + "Territories" + ], + "parameters": [ + { + "name": "Territory", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Territory-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Territory" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Shippers": { + "get": { + "summary": "Get entities from Shippers", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "ShipperID desc", + "CompanyName", + "CompanyName desc", + "Phone", + "Phone desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Shipper", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Shipper" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Shippers", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "name": "Shipper", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Shipper-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Shipper" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Shippers/{ShipperID}": { + "parameters": [ + { + "name": "ShipperID", + "in": "path", + "required": true, + "description": "key: ShipperID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Shippers by key", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipperID", + "CompanyName", + "Phone" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Orders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Shipper" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Shippers", + "tags": [ + "Shippers" + ], + "parameters": [ + { + "name": "Shipper", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Shipper-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Shippers", + "tags": [ + "Shippers" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Shippers/{ShipperID}/Orders": { + "parameters": [ + { + "name": "ShipperID", + "in": "path", + "required": true, + "description": "key: ShipperID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Customer", + "Employee", + "Order_Details", + "Shipper" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Order", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Orders", + "tags": [ + "Shippers", + "Orders" + ], + "parameters": [ + { + "name": "Order", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "SupplierID desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "ContactTitle", + "ContactTitle desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Phone", + "Phone desc", + "Fax", + "Fax desc", + "HomePage", + "HomePage desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Supplier", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Supplier" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "Supplier", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Supplier-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers/{SupplierID}": { + "parameters": [ + { + "name": "SupplierID", + "in": "path", + "required": true, + "description": "key: SupplierID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SupplierID", + "CompanyName", + "ContactName", + "ContactTitle", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Phone", + "Fax", + "HomePage" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "Supplier", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Supplier-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers/{SupplierID}/Products": { + "parameters": [ + { + "name": "SupplierID", + "in": "path", + "required": true, + "description": "key: SupplierID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Order_Details", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Territories": { + "get": { + "summary": "Get entities from Territories", + "tags": [ + "Territories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryID desc", + "TerritoryDescription", + "TerritoryDescription desc", + "RegionID", + "RegionID desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Territory", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Territory" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Territories", + "tags": [ + "Territories" + ], + "parameters": [ + { + "name": "Territory", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Territory-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Territory" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Territories/{TerritoryID}": { + "parameters": [ + { + "name": "TerritoryID", + "in": "path", + "required": true, + "description": "key: TerritoryID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Territories by key", + "tags": [ + "Territories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TerritoryID", + "TerritoryDescription", + "RegionID" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Region", + "Employees" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Territory" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Territories", + "tags": [ + "Territories" + ], + "parameters": [ + { + "name": "Territory", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Territory-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Territories", + "tags": [ + "Territories" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Territories/{TerritoryID}/Region": { + "parameters": [ + { + "name": "TerritoryID", + "in": "path", + "required": true, + "description": "key: TerritoryID", + "type": "string" + } + ], + "get": { + "summary": "Get related Region", + "tags": [ + "Territories", + "Regions" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "RegionID", + "RegionDescription" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Territories" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Region" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Territories/{TerritoryID}/Employees": { + "parameters": [ + { + "name": "TerritoryID", + "in": "path", + "required": true, + "description": "key: TerritoryID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Employees", + "tags": [ + "Territories", + "Employees" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "EmployeeID desc", + "LastName", + "LastName desc", + "FirstName", + "FirstName desc", + "Title", + "Title desc", + "TitleOfCourtesy", + "TitleOfCourtesy desc", + "BirthDate", + "BirthDate desc", + "HireDate", + "HireDate desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "HomePhone", + "HomePhone desc", + "Extension", + "Extension desc", + "Photo", + "Photo desc", + "Notes", + "Notes desc", + "ReportsTo", + "ReportsTo desc", + "PhotoPath", + "PhotoPath desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "EmployeeID", + "LastName", + "FirstName", + "Title", + "TitleOfCourtesy", + "BirthDate", + "HireDate", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "HomePhone", + "Extension", + "Photo", + "Notes", + "ReportsTo", + "PhotoPath" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Employees1", + "Employee1", + "Orders", + "Territories" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Employee", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Employees", + "tags": [ + "Territories", + "Employees" + ], + "parameters": [ + { + "name": "Employee", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products": { + "get": { + "summary": "Get entities from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "SupplierID", + "SupplierID desc", + "CategoryID", + "CategoryID desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitPrice", + "UnitPrice desc", + "UnitsInStock", + "UnitsInStock desc", + "UnitsOnOrder", + "UnitsOnOrder desc", + "ReorderLevel", + "ReorderLevel desc", + "Discontinued", + "Discontinued desc", + "CategoryName", + "CategoryName desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Alphabetical_list_of_product", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Alphabetical_list_of_product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "name": "Alphabetical_list_of_product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Alphabetical_list_of_product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Alphabetical_list_of_product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Alphabetical_list_of_products/{CategoryName}/{Discontinued}/{ProductID}/{ProductName}": { + "parameters": [ + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "type": "string" + }, + { + "name": "Discontinued", + "in": "path", + "required": true, + "description": "key: Discontinued", + "type": "string" + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Alphabetical_list_of_products by key", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName", + "SupplierID", + "CategoryID", + "QuantityPerUnit", + "UnitPrice", + "UnitsInStock", + "UnitsOnOrder", + "ReorderLevel", + "Discontinued", + "CategoryName" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Alphabetical_list_of_product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "parameters": [ + { + "name": "Alphabetical_list_of_product", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Alphabetical_list_of_product-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Alphabetical_list_of_products", + "tags": [ + "Alphabetical_list_of_products" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Category_Sales_for_1997": { + "get": { + "summary": "Get entities from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "CategorySales", + "CategorySales desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Category_Sales_for_1997", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Category_Sales_for_1997" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "name": "Category_Sales_for_1997", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Category_Sales_for_1997-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Category_Sales_for_1997" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Category_Sales_for_1997/{CategoryName}": { + "parameters": [ + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Category_Sales_for_1997 by key", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategorySales" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Category_Sales_for_1997" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "parameters": [ + { + "name": "Category_Sales_for_1997", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Category_Sales_for_1997-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Category_Sales_for_1997", + "tags": [ + "Category_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Current_Product_Lists": { + "get": { + "summary": "Get entities from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Current_Product_List", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Current_Product_List" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "name": "Current_Product_List", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Current_Product_List-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Current_Product_List" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Current_Product_Lists/{ProductID}/{ProductName}": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Current_Product_Lists by key", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductName" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Current_Product_List" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "parameters": [ + { + "name": "Current_Product_List", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Current_Product_List-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Current_Product_Lists", + "tags": [ + "Current_Product_Lists" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities": { + "get": { + "summary": "Get entities from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "City desc", + "CompanyName", + "CompanyName desc", + "ContactName", + "ContactName desc", + "Relationship", + "Relationship desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Customer_and_Suppliers_by_City", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Customer_and_Suppliers_by_City" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "name": "Customer_and_Suppliers_by_City", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer_and_Suppliers_by_City-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer_and_Suppliers_by_City" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Customer_and_Suppliers_by_Cities/{CompanyName}/{Relationship}": { + "parameters": [ + { + "name": "CompanyName", + "in": "path", + "required": true, + "description": "key: CompanyName", + "type": "string" + }, + { + "name": "Relationship", + "in": "path", + "required": true, + "description": "key: Relationship", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Customer_and_Suppliers_by_Cities by key", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "City", + "CompanyName", + "ContactName", + "Relationship" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer_and_Suppliers_by_City" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "parameters": [ + { + "name": "Customer_and_Suppliers_by_City", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Customer_and_Suppliers_by_City-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Customer_and_Suppliers_by_Cities", + "tags": [ + "Customer_and_Suppliers_by_Cities" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Invoices": { + "get": { + "summary": "Get entities from Invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CustomerID", + "CustomerID desc", + "CustomerName", + "CustomerName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc", + "Salesperson", + "Salesperson desc", + "OrderID", + "OrderID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipperName", + "ShipperName desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc", + "Freight", + "Freight desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Invoice", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Invoice" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "Invoice", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Invoice-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Invoice" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Invoices/{CustomerName}/{Discount}/{OrderID}/{ProductID}/{ProductName}/{Quantity}/{Salesperson}/{ShipperName}/{UnitPrice}": { + "parameters": [ + { + "name": "CustomerName", + "in": "path", + "required": true, + "description": "key: CustomerName", + "type": "string" + }, + { + "name": "Discount", + "in": "path", + "required": true, + "description": "key: Discount", + "type": "string" + }, + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "type": "string" + }, + { + "name": "Quantity", + "in": "path", + "required": true, + "description": "key: Quantity", + "type": "string" + }, + { + "name": "Salesperson", + "in": "path", + "required": true, + "description": "key: Salesperson", + "type": "string" + }, + { + "name": "ShipperName", + "in": "path", + "required": true, + "description": "key: ShipperName", + "type": "string" + }, + { + "name": "UnitPrice", + "in": "path", + "required": true, + "description": "key: UnitPrice", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Invoices by key", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CustomerID", + "CustomerName", + "Address", + "City", + "Region", + "PostalCode", + "Country", + "Salesperson", + "OrderID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice", + "Freight" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Invoice" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Invoices", + "tags": [ + "Invoices" + ], + "parameters": [ + { + "name": "Invoice", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Invoice-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Invoices", + "tags": [ + "Invoices" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Order_Details_Extendeds": { + "get": { + "summary": "Get entities from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "ProductID", + "ProductID desc", + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc", + "Quantity", + "Quantity desc", + "Discount", + "Discount desc", + "ExtendedPrice", + "ExtendedPrice desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Order_Details_Extended", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order_Details_Extended" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "name": "Order_Details_Extended", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Details_Extended-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Details_Extended" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Order_Details_Extendeds/{Discount}/{OrderID}/{ProductID}/{ProductName}/{Quantity}/{UnitPrice}": { + "parameters": [ + { + "name": "Discount", + "in": "path", + "required": true, + "description": "key: Discount", + "type": "string" + }, + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + }, + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "type": "string" + }, + { + "name": "Quantity", + "in": "path", + "required": true, + "description": "key: Quantity", + "type": "string" + }, + { + "name": "UnitPrice", + "in": "path", + "required": true, + "description": "key: UnitPrice", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Order_Details_Extendeds by key", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount", + "ExtendedPrice" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Details_Extended" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "parameters": [ + { + "name": "Order_Details_Extended", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Details_Extended-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Details_Extendeds", + "tags": [ + "Order_Details_Extendeds" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Order_Subtotals": { + "get": { + "summary": "Get entities from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Order_Subtotal", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order_Subtotal" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "name": "Order_Subtotal", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Subtotal-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Subtotal" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Order_Subtotals/{OrderID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Order_Subtotals by key", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "Subtotal" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Subtotal" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "parameters": [ + { + "name": "Order_Subtotal", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Order_Subtotal-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Order_Subtotals", + "tags": [ + "Order_Subtotals" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Orders_Qries": { + "get": { + "summary": "Get entities from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "OrderID desc", + "CustomerID", + "CustomerID desc", + "EmployeeID", + "EmployeeID desc", + "OrderDate", + "OrderDate desc", + "RequiredDate", + "RequiredDate desc", + "ShippedDate", + "ShippedDate desc", + "ShipVia", + "ShipVia desc", + "Freight", + "Freight desc", + "ShipName", + "ShipName desc", + "ShipAddress", + "ShipAddress desc", + "ShipCity", + "ShipCity desc", + "ShipRegion", + "ShipRegion desc", + "ShipPostalCode", + "ShipPostalCode desc", + "ShipCountry", + "ShipCountry desc", + "CompanyName", + "CompanyName desc", + "Address", + "Address desc", + "City", + "City desc", + "Region", + "Region desc", + "PostalCode", + "PostalCode desc", + "Country", + "Country desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Orders_Qry", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Orders_Qry" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "name": "Orders_Qry", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Orders_Qry-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Orders_Qry" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Orders_Qries/{CompanyName}/{OrderID}": { + "parameters": [ + { + "name": "CompanyName", + "in": "path", + "required": true, + "description": "key: CompanyName", + "type": "string" + }, + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Orders_Qries by key", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "OrderID", + "CustomerID", + "EmployeeID", + "OrderDate", + "RequiredDate", + "ShippedDate", + "ShipVia", + "Freight", + "ShipName", + "ShipAddress", + "ShipCity", + "ShipRegion", + "ShipPostalCode", + "ShipCountry", + "CompanyName", + "Address", + "City", + "Region", + "PostalCode", + "Country" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Orders_Qry" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "parameters": [ + { + "name": "Orders_Qry", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Orders_Qry-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Orders_Qries", + "tags": [ + "Orders_Qries" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Product_Sales_for_1997": { + "get": { + "summary": "Get entities from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product_Sales_for_1997", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Product_Sales_for_1997" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "name": "Product_Sales_for_1997", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product_Sales_for_1997-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product_Sales_for_1997" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Product_Sales_for_1997/{CategoryName}/{ProductName}": { + "parameters": [ + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "type": "string" + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Product_Sales_for_1997 by key", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product_Sales_for_1997" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "parameters": [ + { + "name": "Product_Sales_for_1997", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Product_Sales_for_1997-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Product_Sales_for_1997", + "tags": [ + "Product_Sales_for_1997" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices": { + "get": { + "summary": "Get entities from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "ProductName desc", + "UnitPrice", + "UnitPrice desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Products_Above_Average_Price", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Products_Above_Average_Price" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "name": "Products_Above_Average_Price", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Products_Above_Average_Price-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Products_Above_Average_Price" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products_Above_Average_Prices/{ProductName}": { + "parameters": [ + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Products_Above_Average_Prices by key", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductName", + "UnitPrice" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Products_Above_Average_Price" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "parameters": [ + { + "name": "Products_Above_Average_Price", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Products_Above_Average_Price-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_Above_Average_Prices", + "tags": [ + "Products_Above_Average_Prices" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products_by_Categories": { + "get": { + "summary": "Get entities from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "QuantityPerUnit", + "QuantityPerUnit desc", + "UnitsInStock", + "UnitsInStock desc", + "Discontinued", + "Discontinued desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Products_by_Category", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Products_by_Category" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "name": "Products_by_Category", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Products_by_Category-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Products_by_Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products_by_Categories/{CategoryName}/{Discontinued}/{ProductName}": { + "parameters": [ + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "type": "string" + }, + { + "name": "Discontinued", + "in": "path", + "required": true, + "description": "key: Discontinued", + "type": "string" + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Products_by_Categories by key", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryName", + "ProductName", + "QuantityPerUnit", + "UnitsInStock", + "Discontinued" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Products_by_Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "parameters": [ + { + "name": "Products_by_Category", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Products_by_Category-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products_by_Categories", + "tags": [ + "Products_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Sales_by_Categories": { + "get": { + "summary": "Get entities from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryID desc", + "CategoryName", + "CategoryName desc", + "ProductName", + "ProductName desc", + "ProductSales", + "ProductSales desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Sales_by_Category", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Sales_by_Category" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "name": "Sales_by_Category", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Sales_by_Category-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Sales_by_Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Sales_by_Categories/{CategoryID}/{CategoryName}/{ProductName}": { + "parameters": [ + { + "name": "CategoryID", + "in": "path", + "required": true, + "description": "key: CategoryID", + "type": "integer", + "format": "int32" + }, + { + "name": "CategoryName", + "in": "path", + "required": true, + "description": "key: CategoryName", + "type": "string" + }, + { + "name": "ProductName", + "in": "path", + "required": true, + "description": "key: ProductName", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Sales_by_Categories by key", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "CategoryID", + "CategoryName", + "ProductName", + "ProductSales" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Sales_by_Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "parameters": [ + { + "name": "Sales_by_Category", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Sales_by_Category-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_by_Categories", + "tags": [ + "Sales_by_Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts": { + "get": { + "summary": "Get entities from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "SaleAmount desc", + "OrderID", + "OrderID desc", + "CompanyName", + "CompanyName desc", + "ShippedDate", + "ShippedDate desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Sales_Totals_by_Amount", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Sales_Totals_by_Amount" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "name": "Sales_Totals_by_Amount", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Sales_Totals_by_Amount-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Sales_Totals_by_Amount" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Sales_Totals_by_Amounts/{CompanyName}/{OrderID}": { + "parameters": [ + { + "name": "CompanyName", + "in": "path", + "required": true, + "description": "key: CompanyName", + "type": "string" + }, + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Sales_Totals_by_Amounts by key", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "SaleAmount", + "OrderID", + "CompanyName", + "ShippedDate" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Sales_Totals_by_Amount" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "parameters": [ + { + "name": "Sales_Totals_by_Amount", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Sales_Totals_by_Amount-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Sales_Totals_by_Amounts", + "tags": [ + "Sales_Totals_by_Amounts" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Summary_of_Sales_by_Quarter", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Quarter" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "name": "Summary_of_Sales_by_Quarter", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Quarter-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Quarter" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Quarters/{OrderID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Quarters by key", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Quarter" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "parameters": [ + { + "name": "Summary_of_Sales_by_Quarter", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Quarter-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Quarters", + "tags": [ + "Summary_of_Sales_by_Quarters" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years": { + "get": { + "summary": "Get entities from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "ShippedDate desc", + "OrderID", + "OrderID desc", + "Subtotal", + "Subtotal desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Summary_of_Sales_by_Year", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Year" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "name": "Summary_of_Sales_by_Year", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Year-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Year" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Summary_of_Sales_by_Years/{OrderID}": { + "parameters": [ + { + "name": "OrderID", + "in": "path", + "required": true, + "description": "key: OrderID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Summary_of_Sales_by_Years by key", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ShippedDate", + "OrderID", + "Subtotal" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Year" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "parameters": [ + { + "name": "Summary_of_Sales_by_Year", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/NorthwindModel.Summary_of_Sales_by_Year-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Summary_of_Sales_by_Years", + "tags": [ + "Summary_of_Sales_by_Years" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).", + "tags": [ + "Batch Requests" + ], + "consumes": [ + "multipart/mixed;boundary=request-separator" + ], + "produces": [ + "multipart/mixed" + ], + "parameters": [ + { + "name": "requestBody", + "in": "body", + "description": "Batch request", + "schema": { + "type": "string", + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Categories HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + ], + "responses": { + "200": { + "description": "Batch response", + "schema": { + "type": "string", + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + } + }, + "definitions": { + "NorthwindModel.Category": { + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Picture": { + "type": [ + "string", + "null" + ], + "format": "base64url" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Product" + } + } + }, + "title": "Category" + }, + "NorthwindModel.Category-create": { + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Picture": { + "type": [ + "string", + "null" + ], + "format": "base64url" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Product-create" + } + } + }, + "required": [ + "CategoryID" + ], + "title": "Category (for create)" + }, + "NorthwindModel.Category-update": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Picture": { + "type": [ + "string", + "null" + ], + "format": "base64url" + } + }, + "title": "Category (for update)" + }, + "NorthwindModel.CustomerDemographic": { + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Customer" + } + } + }, + "title": "CustomerDemographic" + }, + "NorthwindModel.CustomerDemographic-create": { + "type": "object", + "properties": { + "CustomerTypeID": { + "type": "string", + "maxLength": 10 + }, + "CustomerDesc": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Customers": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Customer-create" + } + } + }, + "required": [ + "CustomerTypeID" + ], + "title": "CustomerDemographic (for create)" + }, + "NorthwindModel.CustomerDemographic-update": { + "type": "object", + "properties": { + "CustomerDesc": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "CustomerDemographic (for update)" + }, + "NorthwindModel.Customer": { + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "ContactTitle": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Phone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Fax": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order" + } + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic" + } + } + }, + "title": "Customer" + }, + "NorthwindModel.Customer-create": { + "type": "object", + "properties": { + "CustomerID": { + "type": "string", + "maxLength": 5 + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "ContactTitle": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Phone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Fax": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order-create" + } + }, + "CustomerDemographics": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.CustomerDemographic-create" + } + } + }, + "required": [ + "CustomerID" + ], + "title": "Customer (for create)" + }, + "NorthwindModel.Customer-update": { + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "ContactTitle": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Phone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Fax": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + } + }, + "title": "Customer (for update)" + }, + "NorthwindModel.Employee": { + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "TitleOfCourtesy": { + "type": [ + "string", + "null" + ], + "maxLength": 25, + "example": "string" + }, + "BirthDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "HireDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "HomePhone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Extension": { + "type": [ + "string", + "null" + ], + "maxLength": 4, + "example": "string" + }, + "Photo": { + "type": [ + "string", + "null" + ], + "format": "base64url" + }, + "Notes": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReportsTo": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "PhotoPath": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "string" + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + }, + "Employee1": { + "$ref": "#/definitions/NorthwindModel.Employee" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order" + } + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Territory" + } + } + }, + "title": "Employee" + }, + "NorthwindModel.Employee-create": { + "type": "object", + "properties": { + "EmployeeID": { + "type": "integer", + "format": "int32" + }, + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "TitleOfCourtesy": { + "type": [ + "string", + "null" + ], + "maxLength": 25, + "example": "string" + }, + "BirthDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "HireDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "HomePhone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Extension": { + "type": [ + "string", + "null" + ], + "maxLength": 4, + "example": "string" + }, + "Photo": { + "type": [ + "string", + "null" + ], + "format": "base64url" + }, + "Notes": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReportsTo": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "PhotoPath": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "string" + }, + "Employees1": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Employee-create" + } + }, + "Employee1": { + "$ref": "#/definitions/NorthwindModel.Employee-create" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order-create" + } + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "EmployeeID" + ], + "title": "Employee (for create)" + }, + "NorthwindModel.Employee-update": { + "type": "object", + "properties": { + "LastName": { + "type": "string", + "maxLength": 20 + }, + "FirstName": { + "type": "string", + "maxLength": 10 + }, + "Title": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "TitleOfCourtesy": { + "type": [ + "string", + "null" + ], + "maxLength": 25, + "example": "string" + }, + "BirthDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "HireDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "HomePhone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Extension": { + "type": [ + "string", + "null" + ], + "maxLength": 4, + "example": "string" + }, + "Photo": { + "type": [ + "string", + "null" + ], + "format": "base64url" + }, + "Notes": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReportsTo": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "PhotoPath": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "string" + } + }, + "title": "Employee (for update)" + }, + "NorthwindModel.Order_Detail": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/definitions/NorthwindModel.Order" + }, + "Product": { + "$ref": "#/definitions/NorthwindModel.Product" + } + }, + "title": "Order_Detail" + }, + "NorthwindModel.Order_Detail-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "UnitPrice": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + }, + "Order": { + "$ref": "#/definitions/NorthwindModel.Order-create" + }, + "Product": { + "$ref": "#/definitions/NorthwindModel.Product-create" + } + }, + "required": [ + "OrderID", + "ProductID" + ], + "title": "Order_Detail (for create)" + }, + "NorthwindModel.Order_Detail-update": { + "type": "object", + "properties": { + "UnitPrice": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + } + }, + "title": "Order_Detail (for update)" + }, + "NorthwindModel.Order": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": [ + "string", + "null" + ], + "maxLength": 5, + "example": "string" + }, + "EmployeeID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "OrderDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "Freight": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "example": "string" + }, + "ShipAddress": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "ShipCity": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipRegion": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipPostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "ShipCountry": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Customer": { + "$ref": "#/definitions/NorthwindModel.Customer" + }, + "Employee": { + "$ref": "#/definitions/NorthwindModel.Employee" + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order_Detail" + } + }, + "Shipper": { + "$ref": "#/definitions/NorthwindModel.Shipper" + } + }, + "title": "Order" + }, + "NorthwindModel.Order-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": [ + "string", + "null" + ], + "maxLength": 5, + "example": "string" + }, + "EmployeeID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "OrderDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "Freight": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "example": "string" + }, + "ShipAddress": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "ShipCity": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipRegion": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipPostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "ShipCountry": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Customer": { + "$ref": "#/definitions/NorthwindModel.Customer-create" + }, + "Employee": { + "$ref": "#/definitions/NorthwindModel.Employee-create" + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order_Detail-create" + } + }, + "Shipper": { + "$ref": "#/definitions/NorthwindModel.Shipper-create" + } + }, + "required": [ + "OrderID" + ], + "title": "Order (for create)" + }, + "NorthwindModel.Order-update": { + "type": "object", + "properties": { + "CustomerID": { + "type": [ + "string", + "null" + ], + "maxLength": 5, + "example": "string" + }, + "EmployeeID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "OrderDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "Freight": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "example": "string" + }, + "ShipAddress": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "ShipCity": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipRegion": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipPostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "ShipCountry": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + } + }, + "title": "Order (for update)" + }, + "NorthwindModel.Product": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "CategoryID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "QuantityPerUnit": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "example": "string" + }, + "UnitPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "UnitsOnOrder": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "ReorderLevel": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "$ref": "#/definitions/NorthwindModel.Category" + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order_Detail" + } + }, + "Supplier": { + "$ref": "#/definitions/NorthwindModel.Supplier" + } + }, + "title": "Product" + }, + "NorthwindModel.Product-create": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "CategoryID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "QuantityPerUnit": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "example": "string" + }, + "UnitPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "UnitsOnOrder": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "ReorderLevel": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + }, + "Category": { + "$ref": "#/definitions/NorthwindModel.Category-create" + }, + "Order_Details": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order_Detail-create" + } + }, + "Supplier": { + "$ref": "#/definitions/NorthwindModel.Supplier-create" + } + }, + "required": [ + "ProductID" + ], + "title": "Product (for create)" + }, + "NorthwindModel.Product-update": { + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "CategoryID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "QuantityPerUnit": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "example": "string" + }, + "UnitPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "UnitsOnOrder": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "ReorderLevel": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + } + }, + "title": "Product (for update)" + }, + "NorthwindModel.Region": { + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Territory" + } + } + }, + "title": "Region" + }, + "NorthwindModel.Region-create": { + "type": "object", + "properties": { + "RegionID": { + "type": "integer", + "format": "int32" + }, + "RegionDescription": { + "type": "string", + "maxLength": 50 + }, + "Territories": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Territory-create" + } + } + }, + "required": [ + "RegionID" + ], + "title": "Region (for create)" + }, + "NorthwindModel.Region-update": { + "type": "object", + "properties": { + "RegionDescription": { + "type": "string", + "maxLength": 50 + } + }, + "title": "Region (for update)" + }, + "NorthwindModel.Shipper": { + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order" + } + } + }, + "title": "Shipper" + }, + "NorthwindModel.Shipper-create": { + "type": "object", + "properties": { + "ShipperID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Orders": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Order-create" + } + } + }, + "required": [ + "ShipperID" + ], + "title": "Shipper (for create)" + }, + "NorthwindModel.Shipper-update": { + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Phone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + } + }, + "title": "Shipper (for update)" + }, + "NorthwindModel.Supplier": { + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "ContactTitle": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Phone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Fax": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "HomePage": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Product" + } + } + }, + "title": "Supplier" + }, + "NorthwindModel.Supplier-create": { + "type": "object", + "properties": { + "SupplierID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "ContactTitle": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Phone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Fax": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "HomePage": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Product-create" + } + } + }, + "required": [ + "SupplierID" + ], + "title": "Supplier (for create)" + }, + "NorthwindModel.Supplier-update": { + "type": "object", + "properties": { + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "ContactTitle": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Phone": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "Fax": { + "type": [ + "string", + "null" + ], + "maxLength": 24, + "example": "string" + }, + "HomePage": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Supplier (for update)" + }, + "NorthwindModel.Territory": { + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/definitions/NorthwindModel.Region" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Employee" + } + } + }, + "title": "Territory" + }, + "NorthwindModel.Territory-create": { + "type": "object", + "properties": { + "TerritoryID": { + "type": "string", + "maxLength": 20 + }, + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + }, + "Region": { + "$ref": "#/definitions/NorthwindModel.Region-create" + }, + "Employees": { + "type": "array", + "items": { + "$ref": "#/definitions/NorthwindModel.Employee-create" + } + } + }, + "required": [ + "TerritoryID" + ], + "title": "Territory (for create)" + }, + "NorthwindModel.Territory-update": { + "type": "object", + "properties": { + "TerritoryDescription": { + "type": "string", + "maxLength": 50 + }, + "RegionID": { + "type": "integer", + "format": "int32" + } + }, + "title": "Territory (for update)" + }, + "NorthwindModel.Alphabetical_list_of_product": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "CategoryID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "QuantityPerUnit": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "example": "string" + }, + "UnitPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "UnitsOnOrder": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "ReorderLevel": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + }, + "title": "Alphabetical_list_of_product" + }, + "NorthwindModel.Alphabetical_list_of_product-create": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "SupplierID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "CategoryID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "QuantityPerUnit": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "example": "string" + }, + "UnitPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "UnitsOnOrder": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "ReorderLevel": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + } + }, + "required": [ + "ProductID", + "ProductName", + "Discontinued", + "CategoryName" + ], + "title": "Alphabetical_list_of_product (for create)" + }, + "NorthwindModel.Alphabetical_list_of_product-update": { + "type": "object", + "properties": { + "SupplierID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "CategoryID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "QuantityPerUnit": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "example": "string" + }, + "UnitPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "UnitsInStock": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "UnitsOnOrder": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "ReorderLevel": { + "type": [ + "integer", + "null" + ], + "format": "int16" + } + }, + "title": "Alphabetical_list_of_product (for update)" + }, + "NorthwindModel.Category_Sales_for_1997": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Category_Sales_for_1997" + }, + "NorthwindModel.Category_Sales_for_1997-create": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "CategorySales": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "CategoryName" + ], + "title": "Category_Sales_for_1997 (for create)" + }, + "NorthwindModel.Category_Sales_for_1997-update": { + "type": "object", + "properties": { + "CategorySales": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Category_Sales_for_1997 (for update)" + }, + "NorthwindModel.Current_Product_List": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + }, + "title": "Current_Product_List" + }, + "NorthwindModel.Current_Product_List-create": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + } + }, + "required": [ + "ProductID", + "ProductName" + ], + "title": "Current_Product_List (for create)" + }, + "NorthwindModel.Current_Product_List-update": { + "type": "object", + "title": "Current_Product_List (for update)" + }, + "NorthwindModel.Customer_and_Suppliers_by_City": { + "type": "object", + "properties": { + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + }, + "title": "Customer_and_Suppliers_by_City" + }, + "NorthwindModel.Customer_and_Suppliers_by_City-create": { + "type": "object", + "properties": { + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ContactName": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + }, + "Relationship": { + "type": "string", + "maxLength": 9 + } + }, + "required": [ + "CompanyName", + "Relationship" + ], + "title": "Customer_and_Suppliers_by_City (for create)" + }, + "NorthwindModel.Customer_and_Suppliers_by_City-update": { + "type": "object", + "properties": { + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ContactName": { + "type": [ + "string", + "null" + ], + "maxLength": 30, + "example": "string" + } + }, + "title": "Customer_and_Suppliers_by_City (for update)" + }, + "NorthwindModel.Invoice": { + "type": "object", + "properties": { + "ShipName": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "example": "string" + }, + "ShipAddress": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "ShipCity": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipRegion": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipPostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "ShipCountry": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "CustomerID": { + "type": [ + "string", + "null" + ], + "maxLength": 5, + "example": "string" + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Freight": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Invoice" + }, + "NorthwindModel.Invoice-create": { + "type": "object", + "properties": { + "ShipName": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "example": "string" + }, + "ShipAddress": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "ShipCity": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipRegion": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipPostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "ShipCountry": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "CustomerID": { + "type": [ + "string", + "null" + ], + "maxLength": 5, + "example": "string" + }, + "CustomerName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Salesperson": { + "type": "string", + "maxLength": 31 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "OrderDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipperName": { + "type": "string", + "maxLength": 40 + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Freight": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "CustomerName", + "Salesperson", + "OrderID", + "ShipperName", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount" + ], + "title": "Invoice (for create)" + }, + "NorthwindModel.Invoice-update": { + "type": "object", + "properties": { + "ShipName": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "example": "string" + }, + "ShipAddress": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "ShipCity": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipRegion": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipPostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "ShipCountry": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "CustomerID": { + "type": [ + "string", + "null" + ], + "maxLength": 5, + "example": "string" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "OrderDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ExtendedPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Freight": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Invoice (for update)" + }, + "NorthwindModel.Order_Details_Extended": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Order_Details_Extended" + }, + "NorthwindModel.Order_Details_Extended-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "ProductID": { + "type": "integer", + "format": "int32" + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "Quantity": { + "type": "integer", + "format": "int16" + }, + "Discount": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + }, + "ExtendedPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "OrderID", + "ProductID", + "ProductName", + "UnitPrice", + "Quantity", + "Discount" + ], + "title": "Order_Details_Extended (for create)" + }, + "NorthwindModel.Order_Details_Extended-update": { + "type": "object", + "properties": { + "ExtendedPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Order_Details_Extended (for update)" + }, + "NorthwindModel.Order_Subtotal": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Order_Subtotal" + }, + "NorthwindModel.Order_Subtotal-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "OrderID" + ], + "title": "Order_Subtotal (for create)" + }, + "NorthwindModel.Order_Subtotal-update": { + "type": "object", + "properties": { + "Subtotal": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Order_Subtotal (for update)" + }, + "NorthwindModel.Orders_Qry": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": [ + "string", + "null" + ], + "maxLength": 5, + "example": "string" + }, + "EmployeeID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "OrderDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "Freight": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "example": "string" + }, + "ShipAddress": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "ShipCity": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipRegion": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipPostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "ShipCountry": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + } + }, + "title": "Orders_Qry" + }, + "NorthwindModel.Orders_Qry-create": { + "type": "object", + "properties": { + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CustomerID": { + "type": [ + "string", + "null" + ], + "maxLength": 5, + "example": "string" + }, + "EmployeeID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "OrderDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "Freight": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "example": "string" + }, + "ShipAddress": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "ShipCity": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipRegion": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipPostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "ShipCountry": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + } + }, + "required": [ + "OrderID", + "CompanyName" + ], + "title": "Orders_Qry (for create)" + }, + "NorthwindModel.Orders_Qry-update": { + "type": "object", + "properties": { + "CustomerID": { + "type": [ + "string", + "null" + ], + "maxLength": 5, + "example": "string" + }, + "EmployeeID": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "OrderDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "RequiredDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "ShipVia": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "Freight": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShipName": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "example": "string" + }, + "ShipAddress": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "ShipCity": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipRegion": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "ShipPostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "ShipCountry": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Address": { + "type": [ + "string", + "null" + ], + "maxLength": 60, + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "Region": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + }, + "PostalCode": { + "type": [ + "string", + "null" + ], + "maxLength": 10, + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "maxLength": 15, + "example": "string" + } + }, + "title": "Orders_Qry (for update)" + }, + "NorthwindModel.Product_Sales_for_1997": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Product_Sales_for_1997" + }, + "NorthwindModel.Product_Sales_for_1997-create": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "CategoryName", + "ProductName" + ], + "title": "Product_Sales_for_1997 (for create)" + }, + "NorthwindModel.Product_Sales_for_1997-update": { + "type": "object", + "properties": { + "ProductSales": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Product_Sales_for_1997 (for update)" + }, + "NorthwindModel.Products_Above_Average_Price": { + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Products_Above_Average_Price" + }, + "NorthwindModel.Products_Above_Average_Price-create": { + "type": "object", + "properties": { + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "UnitPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "ProductName" + ], + "title": "Products_Above_Average_Price (for create)" + }, + "NorthwindModel.Products_Above_Average_Price-update": { + "type": "object", + "properties": { + "UnitPrice": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Products_Above_Average_Price (for update)" + }, + "NorthwindModel.Products_by_Category": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "example": "string" + }, + "UnitsInStock": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + } + }, + "title": "Products_by_Category" + }, + "NorthwindModel.Products_by_Category-create": { + "type": "object", + "properties": { + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "QuantityPerUnit": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "example": "string" + }, + "UnitsInStock": { + "type": [ + "integer", + "null" + ], + "format": "int16" + }, + "Discontinued": { + "type": "boolean" + } + }, + "required": [ + "CategoryName", + "ProductName", + "Discontinued" + ], + "title": "Products_by_Category (for create)" + }, + "NorthwindModel.Products_by_Category-update": { + "type": "object", + "properties": { + "QuantityPerUnit": { + "type": [ + "string", + "null" + ], + "maxLength": 20, + "example": "string" + }, + "UnitsInStock": { + "type": [ + "integer", + "null" + ], + "format": "int16" + } + }, + "title": "Products_by_Category (for update)" + }, + "NorthwindModel.Sales_by_Category": { + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Sales_by_Category" + }, + "NorthwindModel.Sales_by_Category-create": { + "type": "object", + "properties": { + "CategoryID": { + "type": "integer", + "format": "int32" + }, + "CategoryName": { + "type": "string", + "maxLength": 15 + }, + "ProductName": { + "type": "string", + "maxLength": 40 + }, + "ProductSales": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "CategoryID", + "CategoryName", + "ProductName" + ], + "title": "Sales_by_Category (for create)" + }, + "NorthwindModel.Sales_by_Category-update": { + "type": "object", + "properties": { + "ProductSales": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Sales_by_Category (for update)" + }, + "NorthwindModel.Sales_Totals_by_Amount": { + "type": "object", + "properties": { + "SaleAmount": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + }, + "title": "Sales_Totals_by_Amount" + }, + "NorthwindModel.Sales_Totals_by_Amount-create": { + "type": "object", + "properties": { + "SaleAmount": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "CompanyName": { + "type": "string", + "maxLength": 40 + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + }, + "required": [ + "OrderID", + "CompanyName" + ], + "title": "Sales_Totals_by_Amount (for create)" + }, + "NorthwindModel.Sales_Totals_by_Amount-update": { + "type": "object", + "properties": { + "SaleAmount": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + }, + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + }, + "title": "Sales_Totals_by_Amount (for update)" + }, + "NorthwindModel.Summary_of_Sales_by_Quarter": { + "type": "object", + "properties": { + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Summary_of_Sales_by_Quarter" + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-create": { + "type": "object", + "properties": { + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "OrderID" + ], + "title": "Summary_of_Sales_by_Quarter (for create)" + }, + "NorthwindModel.Summary_of_Sales_by_Quarter-update": { + "type": "object", + "properties": { + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Subtotal": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Summary_of_Sales_by_Quarter (for update)" + }, + "NorthwindModel.Summary_of_Sales_by_Year": { + "type": "object", + "properties": { + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Summary_of_Sales_by_Year" + }, + "NorthwindModel.Summary_of_Sales_by_Year-create": { + "type": "object", + "properties": { + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "OrderID": { + "type": "integer", + "format": "int32" + }, + "Subtotal": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "required": [ + "OrderID" + ], + "title": "Summary_of_Sales_by_Year (for create)" + }, + "NorthwindModel.Summary_of_Sales_by_Year-update": { + "type": "object", + "properties": { + "ShippedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Subtotal": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-4, + "example": 0 + } + }, + "title": "Summary_of_Sales_by_Year (for update)" + }, + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "type": "integer", + "minimum": 0 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "type": "integer", + "minimum": 0 + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "type": "boolean" + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "type": "string" + } + }, + "responses": { + "error": { + "description": "Error", + "schema": { + "$ref": "#/definitions/error" + } + } + } +} diff --git a/odata-openapi/tools/tests/Northwind-key-as-segment.xml b/odata-openapi/tools/tests/Northwind-key-as-segment.xml new file mode 100644 index 00000000..0076e159 --- /dev/null +++ b/odata-openapi/tools/tests/Northwind-key-as-segment.xml @@ -0,0 +1,453 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/tests/TripPin.openapi3.json b/odata-openapi/tools/tests/TripPin.openapi3.json new file mode 100644 index 00000000..b8a8467d --- /dev/null +++ b/odata-openapi/tools/tests/TripPin.openapi3.json @@ -0,0 +1,4495 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "TripPin service is a sample service for OData V4.", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[City],[Location],[Location]++-[City],[Location]^[EventLocation],[Location]^[AirportLocation],[Photo{bg:orange}],[Person{bg:orange}],[Person]++-*[Location],[Person]++-0..1[PersonGender],[Person]-*>[Person],[Person]++-*>[Trip],[Person]-0..1>[Photo],[Airline{bg:orange}],[Airport{bg:orange}],[Airport]++-[AirportLocation],[PlanItem{bg:orange}],[PlanItem]^[PublicTransportation{bg:orange}],[PublicTransportation]^[Flight{bg:orange}],[Flight]->[Airport],[Flight]->[Airport],[Flight]->[Airline],[PlanItem]^[Event{bg:orange}],[Event]++-[EventLocation],[Trip{bg:orange}],[Trip]-*>[Photo],[Trip]++-*>[PlanItem],[Photos{bg:dodgerblue}]++-*>[Photo],[People{bg:dodgerblue}]++-*>[Person],[Airlines{bg:dodgerblue}]++-*>[Airline],[Airports{bg:dodgerblue}]++-*>[Airport],[Me{bg:dodgerblue}]++->[Person],[GetNearestAirport{bg:dodgerblue}]->[Airport],[ResetDataSource{bg:dodgerblue}])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Photos" + }, + { + "name": "People" + }, + { + "name": "Airlines" + }, + { + "name": "Airports" + }, + { + "name": "Me" + } + ], + "paths": { + "/Photos": { + "get": { + "summary": "Get entities from Photos", + "tags": [ + "Photos" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Id desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Photo", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Photos", + "tags": [ + "Photos" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Photos({Id})": { + "parameters": [ + { + "name": "Id", + "in": "path", + "required": true, + "description": "key: Id", + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + } + } + ], + "get": { + "summary": "Get entity from Photos by key", + "tags": [ + "Photos" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Photos", + "tags": [ + "Photos" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Photos", + "tags": [ + "Photos" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People": { + "get": { + "summary": "Get entities from People", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "UserName desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Emails", + "Emails desc", + "AddressInfo", + "AddressInfo desc", + "Gender", + "Gender desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to People", + "tags": [ + "People" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from People by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in People", + "tags": [ + "People" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from People", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Microsoft.OData.SampleService.Models.TripPin.GetFavoriteAirline()": { + "get": { + "summary": "Invoke function GetFavoriteAirline", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Microsoft.OData.SampleService.Models.TripPin.GetFriendsTrips(userName='{userName}')": { + "get": { + "summary": "Invoke function GetFriendsTrips", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + }, + { + "name": "userName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "title": "Collection of Trip", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Microsoft.OData.SampleService.Models.TripPin.ShareTrip": { + "post": { + "summary": "Invoke action ShareTrip", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "tripId": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Friends": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Friends", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "UserName desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Emails", + "Emails desc", + "AddressInfo", + "AddressInfo desc", + "Gender", + "Gender desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Friends", + "tags": [ + "People" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Trips", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "TripId desc", + "ShareId", + "ShareId desc", + "Description", + "Description desc", + "Name", + "Name desc", + "Budget", + "Budget desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Tags", + "Tags desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Trip", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Trips", + "tags": [ + "People" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Trips by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Trips", + "tags": [ + "People" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Trips", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})/Microsoft.OData.SampleService.Models.TripPin.GetInvolvedPeople()": { + "get": { + "summary": "Invoke function GetInvolvedPeople", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})/Photos": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Photos", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Id desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Photo", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})/PlanItems": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related PlanItems", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "PlanItemId desc", + "ConfirmationCode", + "ConfirmationCode desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Duration", + "Duration desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of PlanItem", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related PlanItems", + "tags": [ + "People" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})/PlanItems({PlanItemId-2})": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "PlanItemId-2", + "in": "path", + "required": true, + "description": "key: PlanItemId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related PlanItems by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related PlanItems", + "tags": [ + "People" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related PlanItems", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{UserName}')/Photo": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Photo", + "tags": [ + "People", + "Photos" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Airlines": { + "get": { + "summary": "Get entities from Airlines", + "tags": [ + "Airlines" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "AirlineCode", + "AirlineCode desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "AirlineCode", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Airline", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Airlines", + "tags": [ + "Airlines" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Airlines('{AirlineCode}')": { + "parameters": [ + { + "name": "AirlineCode", + "in": "path", + "required": true, + "description": "key: AirlineCode", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Airlines by key", + "tags": [ + "Airlines" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "AirlineCode", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Airlines", + "tags": [ + "Airlines" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Airlines", + "tags": [ + "Airlines" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Airports": { + "get": { + "summary": "Get entities from Airports", + "tags": [ + "Airports" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "IcaoCode", + "IcaoCode desc", + "Name", + "Name desc", + "IataCode", + "IataCode desc", + "Location", + "Location desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "IcaoCode", + "Name", + "IataCode", + "Location" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Airport", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Airports('{IcaoCode}')": { + "parameters": [ + { + "name": "IcaoCode", + "in": "path", + "required": true, + "description": "key: IcaoCode", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Airports by key", + "tags": [ + "Airports" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "IcaoCode", + "Name", + "IataCode", + "Location" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Airports", + "tags": [ + "Airports" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me": { + "get": { + "summary": "Get Me", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update Me", + "tags": [ + "Me" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Microsoft.OData.SampleService.Models.TripPin.GetFavoriteAirline()": { + "get": { + "summary": "Invoke function GetFavoriteAirline", + "tags": [ + "Me" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Microsoft.OData.SampleService.Models.TripPin.GetFriendsTrips(userName='{userName}')": { + "get": { + "summary": "Invoke function GetFriendsTrips", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "userName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "title": "Collection of Trip", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Microsoft.OData.SampleService.Models.TripPin.ShareTrip": { + "post": { + "summary": "Invoke action ShareTrip", + "tags": [ + "Me" + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "tripId": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Friends": { + "get": { + "summary": "Get entities from related Friends", + "tags": [ + "Me", + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "UserName desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Emails", + "Emails desc", + "AddressInfo", + "AddressInfo desc", + "Gender", + "Gender desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Friends", + "tags": [ + "Me", + "People" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips": { + "get": { + "summary": "Get entities from related Trips", + "tags": [ + "Me" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "TripId desc", + "ShareId", + "ShareId desc", + "Description", + "Description desc", + "Name", + "Name desc", + "Budget", + "Budget desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Tags", + "Tags desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Trip", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Trips", + "tags": [ + "Me" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})": { + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Trips by key", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Trips", + "tags": [ + "Me" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Trips", + "tags": [ + "Me" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})/Microsoft.OData.SampleService.Models.TripPin.GetInvolvedPeople()": { + "get": { + "summary": "Invoke function GetInvolvedPeople", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})/Photos": { + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Photos", + "tags": [ + "Me" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Id desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Photo", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})/PlanItems": { + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related PlanItems", + "tags": [ + "Me" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "PlanItemId desc", + "ConfirmationCode", + "ConfirmationCode desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Duration", + "Duration desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of PlanItem", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related PlanItems", + "tags": [ + "Me" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})/PlanItems({PlanItemId-2})": { + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "PlanItemId-2", + "in": "path", + "required": true, + "description": "key: PlanItemId", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related PlanItems by key", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related PlanItems", + "tags": [ + "Me" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related PlanItems", + "tags": [ + "Me" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Me/Photo": { + "get": { + "summary": "Get related Photo", + "tags": [ + "Me", + "Photos" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/GetNearestAirport(lat={lat},lon={lon})": { + "get": { + "summary": "Invoke function GetNearestAirport", + "tags": [ + "Airports" + ], + "parameters": [ + { + "name": "lat", + "in": "path", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + }, + { + "name": "lon", + "in": "path", + "required": true, + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ResetDataSource": { + "post": { + "summary": "Invoke action ResetDataSource", + "tags": [ + "Service Operations" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Photos HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "Microsoft.OData.SampleService.Models.TripPin.PersonGender": { + "type": "string", + "enum": [ + "Male", + "Female", + "Unknown" + ], + "title": "PersonGender" + }, + "Microsoft.OData.SampleService.Models.TripPin.City": { + "type": "object", + "properties": { + "CountryRegion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Region": { + "type": "string" + } + }, + "title": "City" + }, + "Microsoft.OData.SampleService.Models.TripPin.City-create": { + "type": "object", + "properties": { + "CountryRegion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Region": { + "type": "string" + } + }, + "title": "City (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.City-update": { + "type": "object", + "properties": { + "CountryRegion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Region": { + "type": "string" + } + }, + "title": "City (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Location": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation" + }, + { + + } + ], + "title": "Location" + }, + "Microsoft.OData.SampleService.Models.TripPin.Location-create": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-create" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation-create" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-create" + }, + { + + } + ], + "title": "Location (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Location-update": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-update" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation-update" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-update" + }, + { + + } + ], + "title": "Location (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.EventLocation": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City" + }, + "BuildingInfo": { + "type": "string", + "nullable": true + } + }, + "title": "EventLocation" + }, + "Microsoft.OData.SampleService.Models.TripPin.EventLocation-create": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-create" + }, + "BuildingInfo": { + "type": "string", + "nullable": true + } + }, + "title": "EventLocation (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.EventLocation-update": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-update" + }, + "BuildingInfo": { + "type": "string", + "nullable": true + } + }, + "title": "EventLocation (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.AirportLocation": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City" + }, + "Loc": { + "$ref": "#/components/schemas/geoPoint" + } + }, + "title": "AirportLocation" + }, + "Microsoft.OData.SampleService.Models.TripPin.AirportLocation-create": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-create" + }, + "Loc": { + "$ref": "#/components/schemas/geoPoint" + } + }, + "title": "AirportLocation (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.AirportLocation-update": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.City-update" + }, + "Loc": { + "$ref": "#/components/schemas/geoPoint" + } + }, + "title": "AirportLocation (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Photo": { + "type": "object", + "properties": { + "Id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "Name": { + "type": "string", + "nullable": true + } + }, + "title": "Photo" + }, + "Microsoft.OData.SampleService.Models.TripPin.Photo-create": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "title": "Photo (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Photo-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "title": "Photo (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Person": { + "type": "object", + "properties": { + "UserName": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "AddressInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Location" + } + }, + "Gender": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PersonGender" + } + ] + }, + "Concurrency": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "Friends": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person" + } + }, + "Trips": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + }, + "Photo": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + ] + } + }, + "title": "Person" + }, + "Microsoft.OData.SampleService.Models.TripPin.Person-create": { + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "AddressInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Location-create" + } + }, + "Gender": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PersonGender" + } + ] + }, + "Friends": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + }, + "Trips": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Trip-create" + } + }, + "Photo": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo-create" + } + ] + } + }, + "title": "Person (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Person-update": { + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "AddressInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Location-update" + } + }, + "Gender": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PersonGender" + } + ] + } + }, + "title": "Person (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airline": { + "type": "object", + "properties": { + "AirlineCode": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "title": "Airline" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airline-create": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "title": "Airline (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airline-update": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "title": "Airline (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airport": { + "type": "object", + "properties": { + "IcaoCode": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "IataCode": { + "type": "string" + }, + "Location": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation" + } + }, + "title": "Airport" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airport-create": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "IataCode": { + "type": "string" + }, + "Location": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-create" + } + }, + "title": "Airport (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airport-update": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Location": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-update" + } + }, + "title": "Airport (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.PlanItem": { + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PublicTransportation" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Event" + }, + { + + } + ], + "title": "PlanItem" + }, + "Microsoft.OData.SampleService.Models.TripPin.PlanItem-create": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-create" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Event-create" + }, + { + + } + ], + "title": "PlanItem (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.PlanItem-update": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-update" + }, + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Event-update" + }, + { + + } + ], + "title": "PlanItem (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.PublicTransportation": { + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Flight" + }, + { + + } + ], + "title": "PublicTransportation" + }, + "Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-create": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Flight-create" + }, + { + + } + ], + "title": "PublicTransportation (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-update": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Flight-update" + }, + { + + } + ], + "title": "PublicTransportation (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Flight": { + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": "string", + "nullable": true + }, + "FlightNumber": { + "type": "string" + }, + "From": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + }, + "To": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport" + }, + "Airline": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + }, + "title": "Flight" + }, + "Microsoft.OData.SampleService.Models.TripPin.Flight-create": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": "string", + "nullable": true + }, + "FlightNumber": { + "type": "string" + }, + "From": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport-create" + }, + "To": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airport-create" + }, + "Airline": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Airline-create" + } + }, + "title": "Flight (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Flight-update": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": "string", + "nullable": true + }, + "FlightNumber": { + "type": "string" + } + }, + "title": "Flight (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Event": { + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + }, + "Description": { + "type": "string", + "nullable": true + }, + "OccursAt": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation" + } + }, + "title": "Event" + }, + "Microsoft.OData.SampleService.Models.TripPin.Event-create": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + }, + "Description": { + "type": "string", + "nullable": true + }, + "OccursAt": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation-create" + } + }, + "title": "Event (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Event-update": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": "string", + "nullable": true + }, + "StartsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": "string", + "nullable": true, + "format": "duration", + "example": "P4DT15H51M04S" + }, + "Description": { + "type": "string", + "nullable": true + }, + "OccursAt": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.EventLocation-update" + } + }, + "title": "Event (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Trip": { + "type": "object", + "properties": { + "TripId": { + "type": "integer", + "format": "int32" + }, + "ShareId": { + "type": "string", + "nullable": true, + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Description": { + "type": "string", + "nullable": true + }, + "Name": { + "type": "string" + }, + "Budget": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Photos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + }, + "PlanItems": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + }, + "title": "Trip" + }, + "Microsoft.OData.SampleService.Models.TripPin.Trip-create": { + "type": "object", + "properties": { + "ShareId": { + "type": "string", + "nullable": true, + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Description": { + "type": "string", + "nullable": true + }, + "Name": { + "type": "string" + }, + "Budget": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Photos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.Photo-create" + } + }, + "PlanItems": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.SampleService.Models.TripPin.PlanItem-create" + } + } + }, + "title": "Trip (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Trip-update": { + "type": "object", + "properties": { + "ShareId": { + "type": "string", + "nullable": true, + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Description": { + "type": "string", + "nullable": true + }, + "Name": { + "type": "string" + }, + "Budget": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "title": "Trip (for update)" + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "geoPoint": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + }, + "coordinates": { + "$ref": "#/components/schemas/geoPosition" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2 + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} diff --git a/odata-openapi/tools/tests/TripPin.swagger.json b/odata-openapi/tools/tests/TripPin.swagger.json new file mode 100644 index 00000000..0eb769c4 --- /dev/null +++ b/odata-openapi/tools/tests/TripPin.swagger.json @@ -0,0 +1,4095 @@ +{ + "swagger": "2.0", + "info": { + "title": "TripPin service is a sample service for OData V4.", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[City],[Location],[Location]++-[City],[Location]^[EventLocation],[Location]^[AirportLocation],[Photo{bg:orange}],[Person{bg:orange}],[Person]++-*[Location],[Person]++-0..1[PersonGender],[Person]-*>[Person],[Person]++-*>[Trip],[Person]-0..1>[Photo],[Airline{bg:orange}],[Airport{bg:orange}],[Airport]++-[AirportLocation],[PlanItem{bg:orange}],[PlanItem]^[PublicTransportation{bg:orange}],[PublicTransportation]^[Flight{bg:orange}],[Flight]->[Airport],[Flight]->[Airport],[Flight]->[Airline],[PlanItem]^[Event{bg:orange}],[Event]++-[EventLocation],[Trip{bg:orange}],[Trip]-*>[Photo],[Trip]++-*>[PlanItem],[Photos{bg:dodgerblue}]++-*>[Photo],[People{bg:dodgerblue}]++-*>[Person],[Airlines{bg:dodgerblue}]++-*>[Airline],[Airports{bg:dodgerblue}]++-*>[Airport],[Me{bg:dodgerblue}]++->[Person],[GetNearestAirport{bg:dodgerblue}]->[Airport],[ResetDataSource{bg:dodgerblue}])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "schemes": [ + "https" + ], + "host": "localhost", + "basePath": "/service-root", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + { + "name": "Photos" + }, + { + "name": "People" + }, + { + "name": "Airlines" + }, + { + "name": "Airports" + }, + { + "name": "Me" + } + ], + "paths": { + "/Photos": { + "get": { + "summary": "Get entities from Photos", + "tags": [ + "Photos" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Id desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Photo", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Photos", + "tags": [ + "Photos" + ], + "parameters": [ + { + "name": "Photo", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Photos({Id})": { + "parameters": [ + { + "name": "Id", + "in": "path", + "required": true, + "description": "key: Id", + "type": "integer", + "format": "int64" + } + ], + "get": { + "summary": "Get entity from Photos by key", + "tags": [ + "Photos" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Photos", + "tags": [ + "Photos" + ], + "parameters": [ + { + "name": "Photo", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Photos", + "tags": [ + "Photos" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People": { + "get": { + "summary": "Get entities from People", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "UserName desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Emails", + "Emails desc", + "AddressInfo", + "AddressInfo desc", + "Gender", + "Gender desc", + "Concurrency", + "Concurrency desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to People", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "Person", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + } + ], + "get": { + "summary": "Get entity from People by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in People", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "Person", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from People", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Microsoft.OData.SampleService.Models.TripPin.GetFavoriteAirline()": { + "get": { + "summary": "Invoke function GetFavoriteAirline", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Microsoft.OData.SampleService.Models.TripPin.GetFriendsTrips(userName='{userName}')": { + "get": { + "summary": "Invoke function GetFriendsTrips", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + }, + { + "name": "userName", + "in": "path", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "title": "Collection of Trip", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Microsoft.OData.SampleService.Models.TripPin.ShareTrip": { + "post": { + "summary": "Invoke action ShareTrip", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "tripId": { + "type": "integer", + "format": "int32" + } + } + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Friends": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Friends", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "UserName desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Emails", + "Emails desc", + "AddressInfo", + "AddressInfo desc", + "Gender", + "Gender desc", + "Concurrency", + "Concurrency desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Friends", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "Person", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Trips", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "TripId desc", + "ShareId", + "ShareId desc", + "Description", + "Description desc", + "Name", + "Name desc", + "Budget", + "Budget desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Tags", + "Tags desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Trip", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Trips", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "Trip", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related Trips by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Trips", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "Trip", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Trips", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})/Microsoft.OData.SampleService.Models.TripPin.GetInvolvedPeople()": { + "get": { + "summary": "Invoke function GetInvolvedPeople", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})/Photos": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Photos", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Id desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Photo", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})/PlanItems": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related PlanItems", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "PlanItemId desc", + "ConfirmationCode", + "ConfirmationCode desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Duration", + "Duration desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of PlanItem", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related PlanItems", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "PlanItem", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Trips({TripId-1})/PlanItems({PlanItemId-2})": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + }, + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + }, + { + "name": "PlanItemId-2", + "in": "path", + "required": true, + "description": "key: PlanItemId", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related PlanItems by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related PlanItems", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "PlanItem", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related PlanItems", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{UserName}')/Photo": { + "parameters": [ + { + "name": "UserName", + "in": "path", + "required": true, + "description": "key: UserName", + "type": "string" + } + ], + "get": { + "summary": "Get related Photo", + "tags": [ + "People", + "Photos" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Airlines": { + "get": { + "summary": "Get entities from Airlines", + "tags": [ + "Airlines" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "AirlineCode", + "AirlineCode desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "AirlineCode", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Airline", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Airlines", + "tags": [ + "Airlines" + ], + "parameters": [ + { + "name": "Airline", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airline-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Airlines('{AirlineCode}')": { + "parameters": [ + { + "name": "AirlineCode", + "in": "path", + "required": true, + "description": "key: AirlineCode", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Airlines by key", + "tags": [ + "Airlines" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "AirlineCode", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Airlines", + "tags": [ + "Airlines" + ], + "parameters": [ + { + "name": "Airline", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airline-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Airlines", + "tags": [ + "Airlines" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Airports": { + "get": { + "summary": "Get entities from Airports", + "tags": [ + "Airports" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "IcaoCode", + "IcaoCode desc", + "Name", + "Name desc", + "IataCode", + "IataCode desc", + "Location", + "Location desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "IcaoCode", + "Name", + "IataCode", + "Location" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Airport", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airport" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Airports('{IcaoCode}')": { + "parameters": [ + { + "name": "IcaoCode", + "in": "path", + "required": true, + "description": "key: IcaoCode", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Airports by key", + "tags": [ + "Airports" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "IcaoCode", + "Name", + "IataCode", + "Location" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airport" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Airports", + "tags": [ + "Airports" + ], + "parameters": [ + { + "name": "Airport", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airport-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me": { + "get": { + "summary": "Get Me", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update Me", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "Person", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Microsoft.OData.SampleService.Models.TripPin.GetFavoriteAirline()": { + "get": { + "summary": "Invoke function GetFavoriteAirline", + "tags": [ + "Me" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Microsoft.OData.SampleService.Models.TripPin.GetFriendsTrips(userName='{userName}')": { + "get": { + "summary": "Invoke function GetFriendsTrips", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "userName", + "in": "path", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "title": "Collection of Trip", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Microsoft.OData.SampleService.Models.TripPin.ShareTrip": { + "post": { + "summary": "Invoke action ShareTrip", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "tripId": { + "type": "integer", + "format": "int32" + } + } + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Friends": { + "get": { + "summary": "Get entities from related Friends", + "tags": [ + "Me", + "People" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "UserName desc", + "FirstName", + "FirstName desc", + "LastName", + "LastName desc", + "Emails", + "Emails desc", + "AddressInfo", + "AddressInfo desc", + "Gender", + "Gender desc", + "Concurrency", + "Concurrency desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "UserName", + "FirstName", + "LastName", + "Emails", + "AddressInfo", + "Gender", + "Concurrency" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Friends", + "Trips", + "Photo" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Friends", + "tags": [ + "Me", + "People" + ], + "parameters": [ + { + "name": "Person", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Trips": { + "get": { + "summary": "Get entities from related Trips", + "tags": [ + "Me" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "TripId desc", + "ShareId", + "ShareId desc", + "Description", + "Description desc", + "Name", + "Name desc", + "Budget", + "Budget desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Tags", + "Tags desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Trip", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Trips", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "Trip", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})": { + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related Trips by key", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "TripId", + "ShareId", + "Description", + "Name", + "Budget", + "StartsAt", + "EndsAt", + "Tags" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Photos", + "PlanItems" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Trips", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "Trip", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Trips", + "tags": [ + "Me" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})/Microsoft.OData.SampleService.Models.TripPin.GetInvolvedPeople()": { + "get": { + "summary": "Invoke function GetInvolvedPeople", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})/Photos": { + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Photos", + "tags": [ + "Me" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Id desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Photo", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})/PlanItems": { + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related PlanItems", + "tags": [ + "Me" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "PlanItemId desc", + "ConfirmationCode", + "ConfirmationCode desc", + "StartsAt", + "StartsAt desc", + "EndsAt", + "EndsAt desc", + "Duration", + "Duration desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of PlanItem", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related PlanItems", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "PlanItem", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Trips({TripId-1})/PlanItems({PlanItemId-2})": { + "parameters": [ + { + "name": "TripId-1", + "in": "path", + "required": true, + "description": "key: TripId", + "type": "integer", + "format": "int32" + }, + { + "name": "PlanItemId-2", + "in": "path", + "required": true, + "description": "key: PlanItemId", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related PlanItems by key", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PlanItemId", + "ConfirmationCode", + "StartsAt", + "EndsAt", + "Duration" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related PlanItems", + "tags": [ + "Me" + ], + "parameters": [ + { + "name": "PlanItem", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related PlanItems", + "tags": [ + "Me" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Me/Photo": { + "get": { + "summary": "Get related Photo", + "tags": [ + "Me", + "Photos" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Id", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/GetNearestAirport(lat={lat},lon={lon})": { + "get": { + "summary": "Invoke function GetNearestAirport", + "tags": [ + "Airports" + ], + "parameters": [ + { + "name": "lat", + "in": "path", + "required": true, + "type": "number", + "format": "double" + }, + { + "name": "lon", + "in": "path", + "required": true, + "type": "number", + "format": "double" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airport" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ResetDataSource": { + "post": { + "summary": "Invoke action ResetDataSource", + "tags": [ + "Service Operations" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).", + "tags": [ + "Batch Requests" + ], + "consumes": [ + "multipart/mixed;boundary=request-separator" + ], + "produces": [ + "multipart/mixed" + ], + "parameters": [ + { + "name": "requestBody", + "in": "body", + "description": "Batch request", + "schema": { + "type": "string", + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Photos HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + ], + "responses": { + "200": { + "description": "Batch response", + "schema": { + "type": "string", + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + } + }, + "definitions": { + "Microsoft.OData.SampleService.Models.TripPin.PersonGender": { + "type": "string", + "enum": [ + "Male", + "Female", + "Unknown" + ], + "title": "PersonGender" + }, + "Microsoft.OData.SampleService.Models.TripPin.City": { + "type": "object", + "properties": { + "CountryRegion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Region": { + "type": "string" + } + }, + "title": "City" + }, + "Microsoft.OData.SampleService.Models.TripPin.City-create": { + "type": "object", + "properties": { + "CountryRegion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Region": { + "type": "string" + } + }, + "title": "City (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.City-update": { + "type": "object", + "properties": { + "CountryRegion": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Region": { + "type": "string" + } + }, + "title": "City (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Location": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.City" + } + }, + "title": "Location" + }, + "Microsoft.OData.SampleService.Models.TripPin.Location-create": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.City-create" + } + }, + "title": "Location (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Location-update": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.City-update" + } + }, + "title": "Location (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.EventLocation": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.City" + }, + "BuildingInfo": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "EventLocation" + }, + "Microsoft.OData.SampleService.Models.TripPin.EventLocation-create": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.City-create" + }, + "BuildingInfo": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "EventLocation (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.EventLocation-update": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.City-update" + }, + "BuildingInfo": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "EventLocation (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.AirportLocation": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.City" + }, + "Loc": { + "$ref": "#/definitions/geoPoint" + } + }, + "title": "AirportLocation" + }, + "Microsoft.OData.SampleService.Models.TripPin.AirportLocation-create": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.City-create" + }, + "Loc": { + "$ref": "#/definitions/geoPoint" + } + }, + "title": "AirportLocation (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.AirportLocation-update": { + "type": "object", + "properties": { + "Address": { + "type": "string" + }, + "City": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.City-update" + }, + "Loc": { + "$ref": "#/definitions/geoPoint" + } + }, + "title": "AirportLocation (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Photo": { + "type": "object", + "properties": { + "Id": { + "type": [ + "integer", + "string" + ], + "format": "int64", + "example": "42" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Photo" + }, + "Microsoft.OData.SampleService.Models.TripPin.Photo-create": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Photo (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Photo-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Photo (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Person": { + "type": "object", + "properties": { + "UserName": { + "type": "string" + }, + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "AddressInfo": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Location" + } + }, + "Gender": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PersonGender" + }, + "Concurrency": { + "type": [ + "integer", + "string" + ], + "format": "int64", + "example": "42" + }, + "Friends": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person" + } + }, + "Trips": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip" + } + }, + "Photo": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + }, + "title": "Person" + }, + "Microsoft.OData.SampleService.Models.TripPin.Person-create": { + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "AddressInfo": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Location-create" + } + }, + "Gender": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PersonGender" + }, + "Friends": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Person-create" + } + }, + "Trips": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Trip-create" + } + }, + "Photo": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo-create" + } + }, + "title": "Person (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Person-update": { + "type": "object", + "properties": { + "FirstName": { + "type": "string" + }, + "LastName": { + "type": "string" + }, + "Emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "AddressInfo": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Location-update" + } + }, + "Gender": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PersonGender" + } + }, + "title": "Person (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airline": { + "type": "object", + "properties": { + "AirlineCode": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "title": "Airline" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airline-create": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "title": "Airline (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airline-update": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "title": "Airline (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airport": { + "type": "object", + "properties": { + "IcaoCode": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "IataCode": { + "type": "string" + }, + "Location": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.AirportLocation" + } + }, + "title": "Airport" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airport-create": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "IataCode": { + "type": "string" + }, + "Location": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-create" + } + }, + "title": "Airport (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Airport-update": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Location": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.AirportLocation-update" + } + }, + "title": "Airport (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.PlanItem": { + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + } + }, + "title": "PlanItem" + }, + "Microsoft.OData.SampleService.Models.TripPin.PlanItem-create": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + } + }, + "title": "PlanItem (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.PlanItem-update": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + } + }, + "title": "PlanItem (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.PublicTransportation": { + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "PublicTransportation" + }, + "Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-create": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "PublicTransportation (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.PublicTransportation-update": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "PublicTransportation (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Flight": { + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "FlightNumber": { + "type": "string" + }, + "From": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airport" + }, + "To": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airport" + }, + "Airline": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airline" + } + }, + "title": "Flight" + }, + "Microsoft.OData.SampleService.Models.TripPin.Flight-create": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "FlightNumber": { + "type": "string" + }, + "From": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airport-create" + }, + "To": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airport-create" + }, + "Airline": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Airline-create" + } + }, + "title": "Flight (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Flight-update": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + }, + "SeatNumber": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "FlightNumber": { + "type": "string" + } + }, + "title": "Flight (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Event": { + "type": "object", + "properties": { + "PlanItemId": { + "type": "integer", + "format": "int32" + }, + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "OccursAt": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.EventLocation" + } + }, + "title": "Event" + }, + "Microsoft.OData.SampleService.Models.TripPin.Event-create": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "OccursAt": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.EventLocation-create" + } + }, + "title": "Event (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Event-update": { + "type": "object", + "properties": { + "ConfirmationCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "StartsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Duration": { + "type": [ + "string", + "null" + ], + "format": "duration", + "example": "P4DT15H51M04S" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "OccursAt": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.EventLocation-update" + } + }, + "title": "Event (for update)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Trip": { + "type": "object", + "properties": { + "TripId": { + "type": "integer", + "format": "int32" + }, + "ShareId": { + "type": [ + "string", + "null" + ], + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Name": { + "type": "string" + }, + "Budget": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Photos": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo" + } + }, + "PlanItems": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem" + } + } + }, + "title": "Trip" + }, + "Microsoft.OData.SampleService.Models.TripPin.Trip-create": { + "type": "object", + "properties": { + "ShareId": { + "type": [ + "string", + "null" + ], + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Name": { + "type": "string" + }, + "Budget": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "Photos": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.Photo-create" + } + }, + "PlanItems": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.OData.SampleService.Models.TripPin.PlanItem-create" + } + } + }, + "title": "Trip (for create)" + }, + "Microsoft.OData.SampleService.Models.TripPin.Trip-update": { + "type": "object", + "properties": { + "ShareId": { + "type": [ + "string", + "null" + ], + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Name": { + "type": "string" + }, + "Budget": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + }, + "StartsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "EndsAt": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "title": "Trip (for update)" + }, + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "geoPoint": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + }, + "coordinates": { + "$ref": "#/definitions/geoPosition" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2 + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "type": "integer", + "minimum": 0 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "type": "integer", + "minimum": 0 + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "type": "boolean" + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "type": "string" + } + }, + "responses": { + "error": { + "description": "Error", + "schema": { + "$ref": "#/definitions/error" + } + } + } +} diff --git a/odata-openapi/tools/tests/TripPin.xml b/odata-openapi/tools/tests/TripPin.xml new file mode 100644 index 00000000..cb72f466 --- /dev/null +++ b/odata-openapi/tools/tests/TripPin.xml @@ -0,0 +1,342 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + image/jpeg + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + + + + + + + + + + + + + + + + + Org.OData.Core.V1.Permission/Read + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Org.OData.Capabilities.V1.SearchExpressions/none + + + + + + + + + + + + + + + + + + + + + + Concurrency + + + + + + + + Org.OData.Capabilities.V1.SearchExpressions/none + + + + + + + + + Trips + Friends + + + + + + + + + + + + Org.OData.Capabilities.V1.SearchExpressions/none + + + + + + + + + + + + + + + + + + + Org.OData.Capabilities.V1.SearchExpressions/none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Org.OData.Capabilities.V1.ConformanceLevelType/Advanced + + + + application/json;odata.metadata=full;IEEE754Compatible=false;odata.streaming=true + application/json;odata.metadata=minimal;IEEE754Compatible=false;odata.streaming=true + application/json;odata.metadata=none;IEEE754Compatible=false;odata.streaming=true + + + + + + + contains + endswith + startswith + length + indexof + substring + tolower + toupper + trim + concat + year + month + day + hour + minute + second + round + floor + ceiling + cast + isof + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/tests/annotations-v2.openapi3.json b/odata-openapi/tools/tests/annotations-v2.openapi3.json new file mode 100644 index 00000000..41a2eede --- /dev/null +++ b/odata-openapi/tools/tests/annotations-v2.openapi3.json @@ -0,0 +1,147 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "OData CSDL Document for namespace Supported.Annotations", + "version": "", + "description": "\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[SinglePartKey{bg:orange}])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "paths": { + + }, + "components": { + "schemas": { + "Supported.Annotations.SinglePartKey": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": "string", + "nullable": true, + "pattern": "^.+$" + }, + "AllowedValues": { + "type": "string", + "nullable": true, + "enum": [ + "red", + "green", + "blue" + ] + }, + "Maximum": { + "type": "string", + "nullable": true, + "format": "decimal", + "multipleOf": 1, + "maximum": -1, + "example": "-1" + }, + "Minimum": { + "type": "string", + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": "1" + }, + "Example": { + "type": "string", + "nullable": true, + "example": "Hello World" + } + }, + "title": "SinglePartKey" + }, + "Supported.Annotations.SinglePartKey-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": "string", + "nullable": true, + "pattern": "^.+$" + }, + "AllowedValues": { + "type": "string", + "nullable": true, + "enum": [ + "red", + "green", + "blue" + ] + }, + "Maximum": { + "type": "string", + "nullable": true, + "format": "decimal", + "multipleOf": 1, + "maximum": -1, + "example": "-1" + }, + "Minimum": { + "type": "string", + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": "1" + }, + "Example": { + "type": "string", + "nullable": true, + "example": "Hello World" + } + }, + "required": [ + "ID" + ], + "title": "SinglePartKey (for create)" + }, + "Supported.Annotations.SinglePartKey-update": { + "type": "object", + "properties": { + "Pattern": { + "type": "string", + "nullable": true, + "pattern": "^.+$" + }, + "AllowedValues": { + "type": "string", + "nullable": true, + "enum": [ + "red", + "green", + "blue" + ] + }, + "Maximum": { + "type": "string", + "nullable": true, + "format": "decimal", + "multipleOf": 1, + "maximum": -1, + "example": "-1" + }, + "Minimum": { + "type": "string", + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": "1" + }, + "Example": { + "type": "string", + "nullable": true, + "example": "Hello World" + } + }, + "title": "SinglePartKey (for update)" + } + } + } +} diff --git a/odata-openapi/tools/tests/annotations-v2.swagger.json b/odata-openapi/tools/tests/annotations-v2.swagger.json new file mode 100644 index 00000000..00336998 --- /dev/null +++ b/odata-openapi/tools/tests/annotations-v2.swagger.json @@ -0,0 +1,175 @@ +{ + "swagger": "2.0", + "info": { + "title": "OData CSDL Document for namespace Supported.Annotations", + "version": "", + "description": "\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[SinglePartKey{bg:orange}])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "paths": { + + }, + "definitions": { + "Supported.Annotations.SinglePartKey": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": [ + "string", + "null" + ], + "pattern": "^.+$", + "example": "string" + }, + "AllowedValues": { + "type": [ + "string", + "null" + ], + "enum": [ + "red", + "green", + "blue" + ], + "example": "string" + }, + "Maximum": { + "type": [ + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1, + "maximum": -1, + "example": "-1" + }, + "Minimum": { + "type": "string", + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": "1" + }, + "Example": { + "type": [ + "string", + "null" + ], + "example": "Hello World" + } + }, + "title": "SinglePartKey" + }, + "Supported.Annotations.SinglePartKey-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": [ + "string", + "null" + ], + "pattern": "^.+$", + "example": "string" + }, + "AllowedValues": { + "type": [ + "string", + "null" + ], + "enum": [ + "red", + "green", + "blue" + ], + "example": "string" + }, + "Maximum": { + "type": [ + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1, + "maximum": -1, + "example": "-1" + }, + "Minimum": { + "type": "string", + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": "1" + }, + "Example": { + "type": [ + "string", + "null" + ], + "example": "Hello World" + } + }, + "required": [ + "ID" + ], + "title": "SinglePartKey (for create)" + }, + "Supported.Annotations.SinglePartKey-update": { + "type": "object", + "properties": { + "Pattern": { + "type": [ + "string", + "null" + ], + "pattern": "^.+$", + "example": "string" + }, + "AllowedValues": { + "type": [ + "string", + "null" + ], + "enum": [ + "red", + "green", + "blue" + ], + "example": "string" + }, + "Maximum": { + "type": [ + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1, + "maximum": -1, + "example": "-1" + }, + "Minimum": { + "type": "string", + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": "1" + }, + "Example": { + "type": [ + "string", + "null" + ], + "example": "Hello World" + } + }, + "title": "SinglePartKey (for update)" + } + } +} diff --git a/odata-openapi/tools/tests/annotations-v2.xml b/odata-openapi/tools/tests/annotations-v2.xml new file mode 100644 index 00000000..c0419a01 --- /dev/null +++ b/odata-openapi/tools/tests/annotations-v2.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/tests/annotations.openapi3.json b/odata-openapi/tools/tests/annotations.openapi3.json new file mode 100644 index 00000000..46847242 --- /dev/null +++ b/odata-openapi/tools/tests/annotations.openapi3.json @@ -0,0 +1,3189 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Service for namespace Supported.Annotations", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[SinglePartKey{bg:orange}],[SinglePartKey]-0..1>[TwoPartKey],[SinglePartKey]-*>[TwoPartKey],[SinglePartKey]-0..1>[TwoPartKey],[SinglePartKey]-*>[TwoPartKey],[SinglePartKey]-0..1>[TwoPartKey],[SinglePartKey]-*>[TwoPartKey],[TwoPartKey{bg:orange}],[AllSet{bg:dodgerblue}]++-*>[SinglePartKey],[NoNavigationSet{bg:dodgerblue}]++-*>[SinglePartKey],[OneNavigationSet{bg:dodgerblue}]++-*>[SinglePartKey],[ReadListOnlySet{bg:dodgerblue}]++-*>[SinglePartKey],[AllSingleton{bg:dodgerblue}]++->[SinglePartKey],[ReadOnlySingleton{bg:dodgerblue}]++->[SinglePartKey],[TwoAllSet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoReadOnlySet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoReadOnlyByKeySet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoWriteOnlySet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoNothingSet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoWriteOnlySingleton{bg:dodgerblue}]++->[TwoPartKey],[TwoNothingSingleton{bg:dodgerblue}]++->[TwoPartKey])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "AllSet" + }, + { + "name": "NoNavigationSet" + }, + { + "name": "OneNavigationSet" + }, + { + "name": "ReadListOnlySet" + }, + { + "name": "AllSingleton", + "description": "First Singleton" + }, + { + "name": "ReadOnlySingleton" + }, + { + "name": "TwoAllSet" + }, + { + "name": "TwoReadOnlySet" + }, + { + "name": "TwoReadOnlyByKeySet" + }, + { + "name": "TwoWriteOnlySet" + }, + { + "name": "TwoNothingSet" + }, + { + "name": "TwoWriteOnlySingleton" + }, + { + "name": "TwoNothingSingleton" + } + ], + "paths": { + "/AllSet": { + "get": { + "summary": "Get entities from AllSet", + "tags": [ + "AllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)\n\nRequired filter properties:\n- RequiredInFilter", + "schema": { + "type": "string" + }, + "required": true + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Pattern", + "Pattern desc", + "PatternExt", + "PatternExt desc", + "AllowedValues", + "AllowedValues desc", + "AllowedValuesExt", + "AllowedValuesExt desc", + "Maximum", + "Maximum desc", + "MaximumExt", + "MaximumExt desc", + "Minimum", + "Minimum desc", + "MinimumExt", + "MinimumExt desc", + "ExampleExt", + "ExampleExt desc", + "Computed", + "Computed desc", + "ComputedExt", + "ComputedExt desc", + "Immutable", + "Immutable desc", + "RequiredInFilter", + "RequiredInFilter desc", + "ImmutableExt", + "ImmutableExt desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SinglePartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to AllSet", + "tags": [ + "AllSet" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from AllSet by key", + "tags": [ + "AllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in AllSet", + "tags": [ + "AllSet" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from AllSet", + "tags": [ + "AllSet" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/AllOne": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related AllOne", + "tags": [ + "AllSet", + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/AllMany": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "AllSet", + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related AllMany", + "tags": [ + "AllSet", + "TwoAllSet" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/ReadOnlyOne": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related ReadOnlyOne", + "tags": [ + "AllSet", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/ReadOnlyMany": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related ReadOnlyMany", + "tags": [ + "AllSet", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSet('{ID}')/NothingOne": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ] + }, + "/AllSet('{ID}')/NothingMany": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ] + }, + "/NoNavigationSet": { + "get": { + "summary": "Get entities from NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Pattern", + "Pattern desc", + "PatternExt", + "PatternExt desc", + "AllowedValues", + "AllowedValues desc", + "AllowedValuesExt", + "AllowedValuesExt desc", + "Maximum", + "Maximum desc", + "MaximumExt", + "MaximumExt desc", + "Minimum", + "Minimum desc", + "MinimumExt", + "MinimumExt desc", + "Example", + "Example desc", + "ExampleExt", + "ExampleExt desc", + "Computed", + "Computed desc", + "ComputedExt", + "ComputedExt desc", + "Immutable", + "Immutable desc", + "RequiredInFilter", + "RequiredInFilter desc", + "ImmutableExt", + "ImmutableExt desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SinglePartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/NoNavigationSet('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from NoNavigationSet by key", + "tags": [ + "NoNavigationSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OneNavigationSet": { + "get": { + "summary": "Get entities from OneNavigationSet", + "tags": [ + "OneNavigationSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Pattern", + "Pattern desc", + "PatternExt", + "PatternExt desc", + "AllowedValues", + "AllowedValues desc", + "AllowedValuesExt", + "AllowedValuesExt desc", + "Maximum", + "Maximum desc", + "MaximumExt", + "MaximumExt desc", + "Minimum", + "Minimum desc", + "MinimumExt", + "MinimumExt desc", + "Example", + "Example desc", + "ExampleExt", + "ExampleExt desc", + "Computed", + "Computed desc", + "ComputedExt", + "ComputedExt desc", + "Immutable", + "Immutable desc", + "RequiredInFilter", + "RequiredInFilter desc", + "ImmutableExt", + "ImmutableExt desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SinglePartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OneNavigationSet('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from OneNavigationSet by key", + "tags": [ + "OneNavigationSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/OneNavigationSet('{ID}')/AllMany": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "OneNavigationSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadListOnlySet": { + "get": { + "summary": "Supports only read-list", + "description": "Does not support any query options", + "tags": [ + "ReadListOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SinglePartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton": { + "get": { + "summary": "Get AllSingleton", + "tags": [ + "AllSingleton" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update AllSingleton", + "tags": [ + "AllSingleton" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/AllOne": { + "get": { + "summary": "Get related AllOne", + "tags": [ + "AllSingleton", + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/AllMany": { + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "AllSingleton", + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related AllMany", + "tags": [ + "AllSingleton", + "TwoAllSet" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/ReadOnlyOne": { + "get": { + "summary": "Get related ReadOnlyOne", + "tags": [ + "AllSingleton", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/ReadOnlyMany": { + "get": { + "summary": "Get entities from related ReadOnlyMany", + "tags": [ + "AllSingleton", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/AllSingleton/NothingOne": { + + }, + "/AllSingleton/NothingMany": { + + }, + "/ReadOnlySingleton": { + "get": { + "summary": "Supports only read", + "description": "Does not support `$select` and `$expand`", + "tags": [ + "ReadOnlySingleton" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.SinglePartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadOnlySingleton/AllOne": { + "get": { + "summary": "Get related AllOne", + "tags": [ + "ReadOnlySingleton", + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadOnlySingleton/AllMany": { + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "ReadOnlySingleton", + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadOnlySingleton/ReadOnlyOne": { + "get": { + "summary": "Get related ReadOnlyOne", + "tags": [ + "ReadOnlySingleton", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadOnlySingleton/ReadOnlyMany": { + "get": { + "summary": "Get entities from related ReadOnlyMany", + "tags": [ + "ReadOnlySingleton", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related ReadOnlyMany", + "tags": [ + "ReadOnlySingleton", + "TwoReadOnlySet" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ReadOnlySingleton/NothingOne": { + + }, + "/ReadOnlySingleton/NothingMany": { + "get": { + "summary": "Get entities from related NothingMany", + "tags": [ + "ReadOnlySingleton", + "TwoNothingSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoAllSet": { + "get": { + "summary": "Get entities from TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoAllSet(One={One},Two={Two})": { + "parameters": [ + { + "name": "One", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from TwoAllSet by key", + "tags": [ + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoReadOnlySet": { + "get": { + "summary": "Supports read-list", + "description": "Does not support any query options", + "tags": [ + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoReadOnlySet(One={One},Two={Two})": { + "parameters": [ + { + "name": "One", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from TwoReadOnlySet by key", + "tags": [ + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoReadOnlyByKeySet": { + + }, + "/TwoReadOnlyByKeySet(One={One},Two={Two})": { + "parameters": [ + { + "name": "One", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from TwoReadOnlyByKeySet by key", + "tags": [ + "TwoReadOnlyByKeySet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoWriteOnlySet": { + "post": { + "summary": "Supports insert", + "tags": [ + "TwoWriteOnlySet" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoWriteOnlySet(One={One},Two={Two})": { + "parameters": [ + { + "name": "One", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "patch": { + "summary": "Supports update", + "tags": [ + "TwoWriteOnlySet" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Supports delete", + "tags": [ + "TwoWriteOnlySet" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoNothingSet": { + + }, + "/TwoWriteOnlySingleton": { + "patch": { + "summary": "Supports update", + "tags": [ + "TwoWriteOnlySingleton" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TwoNothingSingleton": { + + } + }, + "components": { + "schemas": { + "Supported.Annotations.SinglePartKey": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": "string", + "nullable": true, + "pattern": "^.+$" + }, + "PatternExt": { + "type": "string", + "nullable": true, + "pattern": "^.+$" + }, + "AllowedValues": { + "type": "string", + "nullable": true, + "enum": [ + "red", + "green", + "blue" + ] + }, + "AllowedValuesExt": { + "type": "string", + "nullable": true, + "enum": [ + "red", + "green", + "blue" + ] + }, + "Maximum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "minimum": -99999, + "maximum": 0, + "exclusiveMaximum": true, + "example": 0 + }, + "MaximumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "maximum": -1, + "example": -1 + }, + "Minimum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-2, + "minimum": 1, + "maximum": 999.99, + "example": 0 + }, + "MinimumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": 1 + }, + "Example": { + "type": "string", + "nullable": true, + "example": "Hello World" + }, + "ExampleExt": { + "type": "string", + "nullable": true, + "example": "Hello external World" + }, + "Computed": { + "type": "string", + "nullable": true + }, + "ComputedExt": { + "type": "string", + "nullable": true + }, + "Immutable": { + "type": "string", + "nullable": true + }, + "RequiredInFilter": { + "type": "string", + "nullable": true + }, + "ImmutableExt": { + "type": "string", + "nullable": true + }, + "AllOne": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + ] + }, + "AllMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + }, + "ReadOnlyOne": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + ] + }, + "ReadOnlyMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + }, + "NothingOne": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + ] + }, + "NothingMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey" + } + } + }, + "title": "SinglePartKey" + }, + "Supported.Annotations.SinglePartKey-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": "string", + "nullable": true, + "pattern": "^.+$" + }, + "PatternExt": { + "type": "string", + "nullable": true, + "pattern": "^.+$" + }, + "AllowedValues": { + "type": "string", + "nullable": true, + "enum": [ + "red", + "green", + "blue" + ] + }, + "AllowedValuesExt": { + "type": "string", + "nullable": true, + "enum": [ + "red", + "green", + "blue" + ] + }, + "Maximum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "minimum": -99999, + "maximum": 0, + "exclusiveMaximum": true, + "example": 0 + }, + "MaximumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "maximum": -1, + "example": -1 + }, + "Minimum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-2, + "minimum": 1, + "maximum": 999.99, + "example": 0 + }, + "MinimumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": 1 + }, + "Example": { + "type": "string", + "nullable": true, + "example": "Hello World" + }, + "ExampleExt": { + "type": "string", + "nullable": true, + "example": "Hello external World" + }, + "Immutable": { + "type": "string", + "nullable": true + }, + "RequiredInFilter": { + "type": "string", + "nullable": true + }, + "ImmutableExt": { + "type": "string", + "nullable": true + }, + "AllOne": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + ] + }, + "AllMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + }, + "ReadOnlyOne": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + ] + }, + "ReadOnlyMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + }, + "NothingOne": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + ] + }, + "NothingMany": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Supported.Annotations.TwoPartKey-create" + } + } + }, + "required": [ + "ID" + ], + "title": "SinglePartKey (for create)" + }, + "Supported.Annotations.SinglePartKey-update": { + "type": "object", + "properties": { + "Pattern": { + "type": "string", + "nullable": true, + "pattern": "^.+$" + }, + "PatternExt": { + "type": "string", + "nullable": true, + "pattern": "^.+$" + }, + "AllowedValues": { + "type": "string", + "nullable": true, + "enum": [ + "red", + "green", + "blue" + ] + }, + "AllowedValuesExt": { + "type": "string", + "nullable": true, + "enum": [ + "red", + "green", + "blue" + ] + }, + "Maximum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "minimum": -99999, + "maximum": 0, + "exclusiveMaximum": true, + "example": 0 + }, + "MaximumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "maximum": -1, + "example": -1 + }, + "Minimum": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1.0e-2, + "minimum": 1, + "maximum": 999.99, + "example": 0 + }, + "MinimumExt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": 1 + }, + "Example": { + "type": "string", + "nullable": true, + "example": "Hello World" + }, + "ExampleExt": { + "type": "string", + "nullable": true, + "example": "Hello external World" + }, + "RequiredInFilter": { + "type": "string", + "nullable": true + } + }, + "title": "SinglePartKey (for update)" + }, + "Supported.Annotations.TwoPartKey": { + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "title": "TwoPartKey" + }, + "Supported.Annotations.TwoPartKey-create": { + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "One", + "Two" + ], + "title": "TwoPartKey (for create)" + }, + "Supported.Annotations.TwoPartKey-update": { + "type": "object", + "title": "TwoPartKey (for update)" + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} diff --git a/odata-openapi/tools/tests/annotations.swagger.json b/odata-openapi/tools/tests/annotations.swagger.json new file mode 100644 index 00000000..86d78fe2 --- /dev/null +++ b/odata-openapi/tools/tests/annotations.swagger.json @@ -0,0 +1,2861 @@ +{ + "swagger": "2.0", + "info": { + "title": "Service for namespace Supported.Annotations", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[SinglePartKey{bg:orange}],[SinglePartKey]-0..1>[TwoPartKey],[SinglePartKey]-*>[TwoPartKey],[SinglePartKey]-0..1>[TwoPartKey],[SinglePartKey]-*>[TwoPartKey],[SinglePartKey]-0..1>[TwoPartKey],[SinglePartKey]-*>[TwoPartKey],[TwoPartKey{bg:orange}],[AllSet{bg:dodgerblue}]++-*>[SinglePartKey],[NoNavigationSet{bg:dodgerblue}]++-*>[SinglePartKey],[OneNavigationSet{bg:dodgerblue}]++-*>[SinglePartKey],[ReadListOnlySet{bg:dodgerblue}]++-*>[SinglePartKey],[AllSingleton{bg:dodgerblue}]++->[SinglePartKey],[ReadOnlySingleton{bg:dodgerblue}]++->[SinglePartKey],[TwoAllSet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoReadOnlySet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoReadOnlyByKeySet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoWriteOnlySet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoNothingSet{bg:dodgerblue}]++-*>[TwoPartKey],[TwoWriteOnlySingleton{bg:dodgerblue}]++->[TwoPartKey],[TwoNothingSingleton{bg:dodgerblue}]++->[TwoPartKey])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "schemes": [ + "https" + ], + "host": "localhost", + "basePath": "/service-root", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + { + "name": "AllSet" + }, + { + "name": "NoNavigationSet" + }, + { + "name": "OneNavigationSet" + }, + { + "name": "ReadListOnlySet" + }, + { + "name": "AllSingleton", + "description": "First Singleton" + }, + { + "name": "ReadOnlySingleton" + }, + { + "name": "TwoAllSet" + }, + { + "name": "TwoReadOnlySet" + }, + { + "name": "TwoReadOnlyByKeySet" + }, + { + "name": "TwoWriteOnlySet" + }, + { + "name": "TwoNothingSet" + }, + { + "name": "TwoWriteOnlySingleton" + }, + { + "name": "TwoNothingSingleton" + } + ], + "paths": { + "/AllSet": { + "get": { + "summary": "Get entities from AllSet", + "tags": [ + "AllSet" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)\n\nRequired filter properties:\n- RequiredInFilter", + "type": "string", + "required": true + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Pattern", + "Pattern desc", + "PatternExt", + "PatternExt desc", + "AllowedValues", + "AllowedValues desc", + "AllowedValuesExt", + "AllowedValuesExt desc", + "Maximum", + "Maximum desc", + "MaximumExt", + "MaximumExt desc", + "Minimum", + "Minimum desc", + "MinimumExt", + "MinimumExt desc", + "ExampleExt", + "ExampleExt desc", + "Computed", + "Computed desc", + "ComputedExt", + "ComputedExt desc", + "Immutable", + "Immutable desc", + "RequiredInFilter", + "RequiredInFilter desc", + "ImmutableExt", + "ImmutableExt desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SinglePartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to AllSet", + "tags": [ + "AllSet" + ], + "parameters": [ + { + "name": "SinglePartKey", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSet('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from AllSet by key", + "tags": [ + "AllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in AllSet", + "tags": [ + "AllSet" + ], + "parameters": [ + { + "name": "SinglePartKey", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from AllSet", + "tags": [ + "AllSet" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSet('{ID}')/AllOne": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get related AllOne", + "tags": [ + "AllSet", + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSet('{ID}')/AllMany": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "AllSet", + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related AllMany", + "tags": [ + "AllSet", + "TwoAllSet" + ], + "parameters": [ + { + "name": "TwoPartKey", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSet('{ID}')/ReadOnlyOne": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get related ReadOnlyOne", + "tags": [ + "AllSet", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSet('{ID}')/ReadOnlyMany": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related ReadOnlyMany", + "tags": [ + "AllSet", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSet('{ID}')/NothingOne": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ] + }, + "/AllSet('{ID}')/NothingMany": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ] + }, + "/NoNavigationSet": { + "get": { + "summary": "Get entities from NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Pattern", + "Pattern desc", + "PatternExt", + "PatternExt desc", + "AllowedValues", + "AllowedValues desc", + "AllowedValuesExt", + "AllowedValuesExt desc", + "Maximum", + "Maximum desc", + "MaximumExt", + "MaximumExt desc", + "Minimum", + "Minimum desc", + "MinimumExt", + "MinimumExt desc", + "Example", + "Example desc", + "ExampleExt", + "ExampleExt desc", + "Computed", + "Computed desc", + "ComputedExt", + "ComputedExt desc", + "Immutable", + "Immutable desc", + "RequiredInFilter", + "RequiredInFilter desc", + "ImmutableExt", + "ImmutableExt desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SinglePartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "parameters": [ + { + "name": "SinglePartKey", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/NoNavigationSet('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from NoNavigationSet by key", + "tags": [ + "NoNavigationSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "parameters": [ + { + "name": "SinglePartKey", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from NoNavigationSet", + "tags": [ + "NoNavigationSet" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/OneNavigationSet": { + "get": { + "summary": "Get entities from OneNavigationSet", + "tags": [ + "OneNavigationSet" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Pattern", + "Pattern desc", + "PatternExt", + "PatternExt desc", + "AllowedValues", + "AllowedValues desc", + "AllowedValuesExt", + "AllowedValuesExt desc", + "Maximum", + "Maximum desc", + "MaximumExt", + "MaximumExt desc", + "Minimum", + "Minimum desc", + "MinimumExt", + "MinimumExt desc", + "Example", + "Example desc", + "ExampleExt", + "ExampleExt desc", + "Computed", + "Computed desc", + "ComputedExt", + "ComputedExt desc", + "Immutable", + "Immutable desc", + "RequiredInFilter", + "RequiredInFilter desc", + "ImmutableExt", + "ImmutableExt desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SinglePartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/OneNavigationSet('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from OneNavigationSet by key", + "tags": [ + "OneNavigationSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/OneNavigationSet('{ID}')/AllMany": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "OneNavigationSet" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ReadListOnlySet": { + "get": { + "summary": "Supports only read-list", + "description": "Does not support any query options", + "tags": [ + "ReadListOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SinglePartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSingleton": { + "get": { + "summary": "Get AllSingleton", + "tags": [ + "AllSingleton" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Pattern", + "PatternExt", + "AllowedValues", + "AllowedValuesExt", + "Maximum", + "MaximumExt", + "Minimum", + "MinimumExt", + "Example", + "ExampleExt", + "Computed", + "ComputedExt", + "Immutable", + "RequiredInFilter", + "ImmutableExt" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "AllOne", + "AllMany", + "ReadOnlyOne", + "ReadOnlyMany", + "NothingOne", + "NothingMany" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update AllSingleton", + "tags": [ + "AllSingleton" + ], + "parameters": [ + { + "name": "SinglePartKey", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSingleton/AllOne": { + "get": { + "summary": "Get related AllOne", + "tags": [ + "AllSingleton", + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSingleton/AllMany": { + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "AllSingleton", + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related AllMany", + "tags": [ + "AllSingleton", + "TwoAllSet" + ], + "parameters": [ + { + "name": "TwoPartKey", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSingleton/ReadOnlyOne": { + "get": { + "summary": "Get related ReadOnlyOne", + "tags": [ + "AllSingleton", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSingleton/ReadOnlyMany": { + "get": { + "summary": "Get entities from related ReadOnlyMany", + "tags": [ + "AllSingleton", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/AllSingleton/NothingOne": { + + }, + "/AllSingleton/NothingMany": { + + }, + "/ReadOnlySingleton": { + "get": { + "summary": "Supports only read", + "description": "Does not support `$select` and `$expand`", + "tags": [ + "ReadOnlySingleton" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.SinglePartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ReadOnlySingleton/AllOne": { + "get": { + "summary": "Get related AllOne", + "tags": [ + "ReadOnlySingleton", + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ReadOnlySingleton/AllMany": { + "get": { + "summary": "Get entities from related AllMany", + "tags": [ + "ReadOnlySingleton", + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Two", + "Two desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ReadOnlySingleton/ReadOnlyOne": { + "get": { + "summary": "Get related ReadOnlyOne", + "tags": [ + "ReadOnlySingleton", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ReadOnlySingleton/ReadOnlyMany": { + "get": { + "summary": "Get entities from related ReadOnlyMany", + "tags": [ + "ReadOnlySingleton", + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related ReadOnlyMany", + "tags": [ + "ReadOnlySingleton", + "TwoReadOnlySet" + ], + "parameters": [ + { + "name": "TwoPartKey", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ReadOnlySingleton/NothingOne": { + + }, + "/ReadOnlySingleton/NothingMany": { + "get": { + "summary": "Get entities from related NothingMany", + "tags": [ + "ReadOnlySingleton", + "TwoNothingSet" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TwoAllSet": { + "get": { + "summary": "Get entities from TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "parameters": [ + { + "name": "TwoPartKey", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TwoAllSet(One={One},Two={Two})": { + "parameters": [ + { + "name": "One", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from TwoAllSet by key", + "tags": [ + "TwoAllSet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "parameters": [ + { + "name": "TwoPartKey", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from TwoAllSet", + "tags": [ + "TwoAllSet" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TwoReadOnlySet": { + "get": { + "summary": "Supports read-list", + "description": "Does not support any query options", + "tags": [ + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of TwoPartKey", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TwoReadOnlySet(One={One},Two={Two})": { + "parameters": [ + { + "name": "One", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from TwoReadOnlySet by key", + "tags": [ + "TwoReadOnlySet" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TwoReadOnlyByKeySet": { + + }, + "/TwoReadOnlyByKeySet(One={One},Two={Two})": { + "parameters": [ + { + "name": "One", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from TwoReadOnlyByKeySet by key", + "tags": [ + "TwoReadOnlyByKeySet" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TwoWriteOnlySet": { + "post": { + "summary": "Supports insert", + "tags": [ + "TwoWriteOnlySet" + ], + "parameters": [ + { + "name": "TwoPartKey", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TwoWriteOnlySet(One={One},Two={Two})": { + "parameters": [ + { + "name": "One", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "patch": { + "summary": "Supports update", + "tags": [ + "TwoWriteOnlySet" + ], + "parameters": [ + { + "name": "TwoPartKey", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Supports delete", + "tags": [ + "TwoWriteOnlySet" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TwoNothingSet": { + + }, + "/TwoWriteOnlySingleton": { + "patch": { + "summary": "Supports update", + "tags": [ + "TwoWriteOnlySingleton" + ], + "parameters": [ + { + "name": "TwoPartKey", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TwoNothingSingleton": { + + } + }, + "definitions": { + "Supported.Annotations.SinglePartKey": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": [ + "string", + "null" + ], + "pattern": "^.+$", + "example": "string" + }, + "PatternExt": { + "type": [ + "string", + "null" + ], + "pattern": "^.+$", + "example": "string" + }, + "AllowedValues": { + "type": [ + "string", + "null" + ], + "enum": [ + "red", + "green", + "blue" + ], + "example": "string" + }, + "AllowedValuesExt": { + "type": [ + "string", + "null" + ], + "enum": [ + "red", + "green", + "blue" + ], + "example": "string" + }, + "Maximum": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "minimum": -99999, + "maximum": 0, + "exclusiveMaximum": true, + "example": 0 + }, + "MaximumExt": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "maximum": -1, + "example": -1 + }, + "Minimum": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-2, + "minimum": 1, + "maximum": 999.99, + "example": 0 + }, + "MinimumExt": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": 1 + }, + "Example": { + "type": [ + "string", + "null" + ], + "example": "Hello World" + }, + "ExampleExt": { + "type": [ + "string", + "null" + ], + "example": "Hello external World" + }, + "Computed": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ComputedExt": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Immutable": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "RequiredInFilter": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ImmutableExt": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "AllOne": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + }, + "AllMany": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "ReadOnlyOne": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + }, + "ReadOnlyMany": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + }, + "NothingOne": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + }, + "NothingMany": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey" + } + } + }, + "title": "SinglePartKey" + }, + "Supported.Annotations.SinglePartKey-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Pattern": { + "type": [ + "string", + "null" + ], + "pattern": "^.+$", + "example": "string" + }, + "PatternExt": { + "type": [ + "string", + "null" + ], + "pattern": "^.+$", + "example": "string" + }, + "AllowedValues": { + "type": [ + "string", + "null" + ], + "enum": [ + "red", + "green", + "blue" + ], + "example": "string" + }, + "AllowedValuesExt": { + "type": [ + "string", + "null" + ], + "enum": [ + "red", + "green", + "blue" + ], + "example": "string" + }, + "Maximum": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "minimum": -99999, + "maximum": 0, + "exclusiveMaximum": true, + "example": 0 + }, + "MaximumExt": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "maximum": -1, + "example": -1 + }, + "Minimum": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-2, + "minimum": 1, + "maximum": 999.99, + "example": 0 + }, + "MinimumExt": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": 1 + }, + "Example": { + "type": [ + "string", + "null" + ], + "example": "Hello World" + }, + "ExampleExt": { + "type": [ + "string", + "null" + ], + "example": "Hello external World" + }, + "Immutable": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "RequiredInFilter": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ImmutableExt": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "AllOne": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + }, + "AllMany": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + } + }, + "ReadOnlyOne": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + }, + "ReadOnlyMany": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + } + }, + "NothingOne": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + }, + "NothingMany": { + "type": "array", + "items": { + "$ref": "#/definitions/Supported.Annotations.TwoPartKey-create" + } + } + }, + "required": [ + "ID" + ], + "title": "SinglePartKey (for create)" + }, + "Supported.Annotations.SinglePartKey-update": { + "type": "object", + "properties": { + "Pattern": { + "type": [ + "string", + "null" + ], + "pattern": "^.+$", + "example": "string" + }, + "PatternExt": { + "type": [ + "string", + "null" + ], + "pattern": "^.+$", + "example": "string" + }, + "AllowedValues": { + "type": [ + "string", + "null" + ], + "enum": [ + "red", + "green", + "blue" + ], + "example": "string" + }, + "AllowedValuesExt": { + "type": [ + "string", + "null" + ], + "enum": [ + "red", + "green", + "blue" + ], + "example": "string" + }, + "Maximum": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "minimum": -99999, + "maximum": 0, + "exclusiveMaximum": true, + "example": 0 + }, + "MaximumExt": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "maximum": -1, + "example": -1 + }, + "Minimum": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1.0e-2, + "minimum": 1, + "maximum": 999.99, + "example": 0 + }, + "MinimumExt": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1.0e-5, + "minimum": 0, + "exclusiveMinimum": true, + "example": 1 + }, + "Example": { + "type": [ + "string", + "null" + ], + "example": "Hello World" + }, + "ExampleExt": { + "type": [ + "string", + "null" + ], + "example": "Hello external World" + }, + "RequiredInFilter": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "SinglePartKey (for update)" + }, + "Supported.Annotations.TwoPartKey": { + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "title": "TwoPartKey" + }, + "Supported.Annotations.TwoPartKey-create": { + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "One", + "Two" + ], + "title": "TwoPartKey (for create)" + }, + "Supported.Annotations.TwoPartKey-update": { + "type": "object", + "title": "TwoPartKey (for update)" + }, + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "type": "integer", + "minimum": 0 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "type": "integer", + "minimum": 0 + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "type": "boolean" + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "type": "string" + } + }, + "responses": { + "error": { + "description": "Error", + "schema": { + "$ref": "#/definitions/error" + } + } + } +} diff --git a/odata-openapi/tools/tests/annotations.xml b/odata-openapi/tools/tests/annotations.xml new file mode 100644 index 00000000..1d401a14 --- /dev/null +++ b/odata-openapi/tools/tests/annotations.xml @@ -0,0 +1,526 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RequiredInFilter + + + + + + + + + Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + One + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Two + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/tests/authorization.openapi3.json b/odata-openapi/tools/tests/authorization.openapi3.json new file mode 100644 index 00000000..5ed0a848 --- /dev/null +++ b/odata-openapi/tools/tests/authorization.openapi3.json @@ -0,0 +1,514 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Service for namespace auth.example", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Person{bg:orange}],[People{bg:dodgerblue}]++-*>[Person])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "People" + } + ], + "paths": { + "/People": { + "get": { + "summary": "Get entities from People", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/auth.example.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to People", + "tags": [ + "People" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/auth.example.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/auth.example.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/People('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from People by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/auth.example.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in People", + "tags": [ + "People" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/auth.example.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from People", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET People HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "auth.example.Person": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + } + }, + "title": "Person" + }, + "auth.example.Person-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + } + }, + "required": [ + "ID" + ], + "title": "Person (for create)" + }, + "auth.example.Person-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "title": "Person (for update)" + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + }, + "securitySchemes": { + "api_key": { + "type": "apiKey", + "name": "x-api-key", + "in": "header", + "description": "Authentication via API key" + }, + "http_bearer": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT", + "description": "HTTP authentication with bearer token" + }, + "oauth_authcode": { + "type": "oauth2", + "flows": { + "authorizationCode": { + "scopes": { + "do:something": "do something" + }, + "refreshUrl": "https://example.com/api/oauth/refresh", + "authorizationUrl": "https://example.com/api/oauth/dialog", + "tokenUrl": "https://example.com/api/oauth/token" + } + }, + "description": "Authentication via OAuth2 with authorization code flow" + }, + "oauth_clientcredentials": { + "type": "oauth2", + "flows": { + "clientCredentials": { + "scopes": { + "do:something": "do something" + }, + "refreshUrl": "https://example.com/api/oauth/refresh", + "tokenUrl": "https://example.com/api/oauth/token" + } + }, + "description": "Authentication via OAuth2 with client credentials flow" + }, + "oauth_implicit": { + "type": "oauth2", + "flows": { + "implicit": { + "scopes": { + "write:foo": "modify foo", + "read:foo": "read foo" + }, + "refreshUrl": "https://example.com/api/oauth/refresh", + "authorizationUrl": "https://example.com/api/oauth/dialog" + } + }, + "description": "Authentication via OAuth2 with implicit flow" + }, + "oauth_password": { + "type": "oauth2", + "flows": { + "password": { + "scopes": { + "do:something": "do something" + }, + "refreshUrl": "https://example.com/api/oauth/refresh", + "tokenUrl": "https://example.com/api/oauth/token" + } + }, + "description": "Authentication via OAuth2 with resource owner password flow" + }, + "open_id": { + "type": "openIdConnect", + "openIdConnectUrl": "https://example.com/openid/issuer/location", + "description": "Authentication via OpenID Connect" + } + } + }, + "security": [ + { + "api_key": [ + + ] + }, + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] +} diff --git a/odata-openapi/tools/tests/authorization.swagger.json b/odata-openapi/tools/tests/authorization.swagger.json new file mode 100644 index 00000000..e126ae9a --- /dev/null +++ b/odata-openapi/tools/tests/authorization.swagger.json @@ -0,0 +1,462 @@ +{ + "swagger": "2.0", + "info": { + "title": "Service for namespace auth.example", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Person{bg:orange}],[People{bg:dodgerblue}]++-*>[Person])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "schemes": [ + "https" + ], + "host": "localhost", + "basePath": "/service-root", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + { + "name": "People" + } + ], + "paths": { + "/People": { + "get": { + "summary": "Get entities from People", + "tags": [ + "People" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@odata.count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/auth.example.Person" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to People", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "Person", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/auth.example.Person-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/auth.example.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/People('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from People by key", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/auth.example.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in People", + "tags": [ + "People" + ], + "parameters": [ + { + "name": "Person", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/auth.example.Person-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from People", + "tags": [ + "People" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).", + "tags": [ + "Batch Requests" + ], + "consumes": [ + "multipart/mixed;boundary=request-separator" + ], + "produces": [ + "multipart/mixed" + ], + "parameters": [ + { + "name": "requestBody", + "in": "body", + "description": "Batch request", + "schema": { + "type": "string", + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET People HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + ], + "responses": { + "200": { + "description": "Batch response", + "schema": { + "type": "string", + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + } + }, + "definitions": { + "auth.example.Person": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Person" + }, + "auth.example.Person-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "required": [ + "ID" + ], + "title": "Person (for create)" + }, + "auth.example.Person-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Person (for update)" + }, + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "type": "integer", + "minimum": 0 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "type": "integer", + "minimum": 0 + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "type": "boolean" + }, + "search": { + "name": "$search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "type": "string" + } + }, + "responses": { + "error": { + "description": "Error", + "schema": { + "$ref": "#/definitions/error" + } + } + }, + "securityDefinitions": { + "api_key": { + "type": "apiKey", + "name": "x-api-key", + "in": "header", + "description": "Authentication via API key" + }, + "http_bearer": { + "type": "basic", + "description": "bearer scheme not supported by Swagger 2.0" + }, + "oauth_authcode": { + "type": "oauth2", + "flow": "accessCode", + "scopes": { + "do:something": "do something" + }, + "authorizationUrl": "https://example.com/api/oauth/dialog", + "tokenUrl": "https://example.com/api/oauth/token", + "description": "Authentication via OAuth2 with authorization code flow" + }, + "oauth_clientcredentials": { + "type": "oauth2", + "flow": "application", + "scopes": { + "do:something": "do something" + }, + "tokenUrl": "https://example.com/api/oauth/token", + "description": "Authentication via OAuth2 with client credentials flow" + }, + "oauth_implicit": { + "type": "oauth2", + "flow": "implicit", + "scopes": { + "write:foo": "modify foo", + "read:foo": "read foo" + }, + "authorizationUrl": "https://example.com/api/oauth/dialog", + "description": "Authentication via OAuth2 with implicit flow" + }, + "oauth_password": { + "type": "oauth2", + "flow": "password", + "scopes": { + "do:something": "do something" + }, + "tokenUrl": "https://example.com/api/oauth/token", + "description": "Authentication via OAuth2 with resource owner password flow" + }, + "open_id": { + "type": "basic", + "description": "openIdConnect not supported by Swagger 2.0" + } + }, + "security": [ + { + "api_key": [ + + ] + }, + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] +} diff --git a/odata-openapi/tools/tests/authorization.xml b/odata-openapi/tools/tests/authorization.xml new file mode 100644 index 00000000..67a5a1d6 --- /dev/null +++ b/odata-openapi/tools/tests/authorization.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + write:pets + read:pets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/tests/containment.openapi3.json b/odata-openapi/tools/tests/containment.openapi3.json new file mode 100644 index 00000000..7b64be60 --- /dev/null +++ b/odata-openapi/tools/tests/containment.openapi3.json @@ -0,0 +1,5291 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Service for namespace Containment", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Whole{bg:orange}],[Whole]++-0..1>[Part],[Whole]++-*>[Part],[Part{bg:orange}],[Part]++-0..1>[SubPart],[Part]++-*>[SubPart],[Part]++-*>[SubPart],[Part]++-*>[SubPart],[SubPart{bg:orange}],[Folder{bg:orange}],[Folder]++-*>[Folder],[Wholes{bg:dodgerblue}]++-*>[Whole],[TheWhole{bg:dodgerblue}]++->[Whole],[Folders{bg:dodgerblue}]++-*>[Folder])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Wholes", + "description": "List of containers" + }, + { + "name": "TheWhole", + "description": "Special container" + }, + { + "name": "Folders", + "description": "List of folders" + } + ], + "paths": { + "/Wholes": { + "get": { + "summary": "Get entities from Wholes", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Whole", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Whole" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Wholes", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes/self.Likes()": { + "get": { + "summary": "How many like these wholes", + "tags": [ + "Wholes" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes/self.Like": { + "post": { + "summary": "I like all of these wholes", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Wholes by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Wholes", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Wholes", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/self.Likes()": { + "get": { + "summary": "How many like this whole", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/self.Like": { + "post": { + "summary": "I like this whole", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/self.Likes()": { + "get": { + "summary": "How many like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/One": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/Many": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/Many(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index", + "index desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Part", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many/self.Likes()": { + "get": { + "summary": "How many like these parts", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many/self.Like": { + "post": { + "summary": "I like all of these parts", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/self.Likes()": { + "get": { + "summary": "How many like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/One": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/Many": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/Many(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "Wholes" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/ManyReadListOnly": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related ManyReadListOnly", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/ManyReadByKeyOnly": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ] + }, + "/Wholes('{ID}')/Many({index-1})/ManyReadByKeyOnly(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related ManyReadByKeyOnly by key", + "tags": [ + "Wholes" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole": { + "get": { + "summary": "Get TheWhole", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update TheWhole", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Whole-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/self.Likes()": { + "get": { + "summary": "How many like this whole", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/self.Like": { + "post": { + "summary": "I like this whole", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One": { + "get": { + "summary": "Get related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/self.Likes()": { + "get": { + "summary": "How many like this part", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/One": { + "get": { + "summary": "Get related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/Many": { + "get": { + "summary": "Get entities from related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Supports insert", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/One/Many(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Supports update", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Supports delete", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many": { + "get": { + "summary": "Get entities from related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index", + "index desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Part", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many/self.Likes()": { + "get": { + "summary": "How many like these parts", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many/self.Like": { + "post": { + "summary": "I like all of these parts", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Part-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/self.Likes()": { + "get": { + "summary": "How many like this part", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/One": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/Many": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/Many(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "TheWhole" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/ManyReadListOnly": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Supports only read-list", + "description": "Does not support any system query options", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/components/parameters/count" + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/ManyReadByKeyOnly": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + } + ] + }, + "/TheWhole/Many({index-1})/ManyReadByKeyOnly(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Supports only read-by-key", + "description": "Does not support `$select`", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders": { + "get": { + "summary": "Get entities from Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders('{Name-3}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-3", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders('{Name-3}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-3", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders('{Name-3}')/Folders('{Name-4}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-3", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-4", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders('{Name-3}')/Folders('{Name-4}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-3", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + }, + { + "name": "Name-4", + "in": "path", + "required": true, + "description": "key: Name", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "Containment.Whole": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "One": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Containment.Part" + } + ] + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Part" + } + } + }, + "title": "Whole" + }, + "Containment.Whole-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "One": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Containment.Part-create" + } + ] + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Part-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Whole (for create)" + }, + "Containment.Whole-update": { + "type": "object", + "properties": { + "Description": { + "type": "string", + "nullable": true + } + }, + "title": "Whole (for update)" + }, + "Containment.Part": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int32" + }, + "One": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Containment.SubPart" + } + ] + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + }, + "ManyReadListOnly": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + }, + "ManyReadByKeyOnly": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart" + } + } + }, + "title": "Part" + }, + "Containment.Part-create": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int32" + }, + "One": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + ] + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + }, + "ManyReadListOnly": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + }, + "ManyReadByKeyOnly": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.SubPart-create" + } + } + }, + "required": [ + "index" + ], + "title": "Part (for create)" + }, + "Containment.Part-update": { + "type": "object", + "title": "Part (for update)" + }, + "Containment.SubPart": { + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "title": "SubPart" + }, + "Containment.SubPart-create": { + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "One", + "Two" + ], + "title": "SubPart (for create)" + }, + "Containment.SubPart-update": { + "type": "object", + "title": "SubPart (for update)" + }, + "Containment.Folder": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "Folders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder" + } + } + }, + "title": "Folder" + }, + "Containment.Folder-create": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "Folders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Containment.Folder-create" + } + } + }, + "required": [ + "Name" + ], + "title": "Folder (for create)" + }, + "Containment.Folder-update": { + "type": "object", + "properties": { + "Description": { + "type": "string", + "nullable": true + } + }, + "title": "Folder (for update)" + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} diff --git a/odata-openapi/tools/tests/containment.swagger.json b/odata-openapi/tools/tests/containment.swagger.json new file mode 100644 index 00000000..4eb78827 --- /dev/null +++ b/odata-openapi/tools/tests/containment.swagger.json @@ -0,0 +1,4648 @@ +{ + "swagger": "2.0", + "info": { + "title": "Service for namespace Containment", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Whole{bg:orange}],[Whole]++-0..1>[Part],[Whole]++-*>[Part],[Part{bg:orange}],[Part]++-0..1>[SubPart],[Part]++-*>[SubPart],[Part]++-*>[SubPart],[Part]++-*>[SubPart],[SubPart{bg:orange}],[Folder{bg:orange}],[Folder]++-*>[Folder],[Wholes{bg:dodgerblue}]++-*>[Whole],[TheWhole{bg:dodgerblue}]++->[Whole],[Folders{bg:dodgerblue}]++-*>[Folder])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "schemes": [ + "https" + ], + "host": "localhost", + "basePath": "/service-root", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + { + "name": "Wholes", + "description": "List of containers" + }, + { + "name": "TheWhole", + "description": "Special container" + }, + { + "name": "Folders", + "description": "List of folders" + } + ], + "paths": { + "/Wholes": { + "get": { + "summary": "Get entities from Wholes", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Whole", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Whole" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Wholes", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "Whole", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.Whole-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.Whole" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes/self.Likes()": { + "get": { + "summary": "How many like these wholes", + "tags": [ + "Wholes" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes/self.Like": { + "post": { + "summary": "I like all of these wholes", + "tags": [ + "Wholes" + ], + "parameters": [ + + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Wholes by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Whole" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Wholes", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "Whole", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Whole-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Wholes", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/self.Likes()": { + "get": { + "summary": "How many like this whole", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/self.Like": { + "post": { + "summary": "I like this whole", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Part" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "Part", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Part-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/self.Likes()": { + "get": { + "summary": "How many like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/One": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.SubPart-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/Many": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/One/Many(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.SubPart-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index", + "index desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Part", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Part" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "Part", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.Part-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.Part" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many/self.Likes()": { + "get": { + "summary": "How many like these parts", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many/self.Like": { + "post": { + "summary": "I like all of these parts", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Part" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "Part", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Part-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/self.Likes()": { + "get": { + "summary": "How many like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/One": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.SubPart-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/Many": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/Many(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.SubPart-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "Wholes" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/ManyReadListOnly": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related ManyReadListOnly", + "tags": [ + "Wholes" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Wholes('{ID}')/Many({index-1})/ManyReadByKeyOnly": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ] + }, + "/Wholes('{ID}')/Many({index-1})/ManyReadByKeyOnly(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + }, + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related ManyReadByKeyOnly by key", + "tags": [ + "Wholes" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole": { + "get": { + "summary": "Get TheWhole", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Whole" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update TheWhole", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "Whole", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Whole-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/self.Likes()": { + "get": { + "summary": "How many like this whole", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/self.Like": { + "post": { + "summary": "I like this whole", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/One": { + "get": { + "summary": "Get related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Part" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "Part", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Part-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/One/self.Likes()": { + "get": { + "summary": "How many like this part", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/One/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/One/One": { + "get": { + "summary": "Get related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.SubPart-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/One/Many": { + "get": { + "summary": "Get entities from related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Supports insert", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/One/Many(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Supports update", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.SubPart-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Supports delete", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many": { + "get": { + "summary": "Get entities from related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index", + "index desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Part", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Part" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "Part", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.Part-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.Part" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many/self.Likes()": { + "get": { + "summary": "How many like these parts", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many/self.Like": { + "post": { + "summary": "I like all of these parts", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "index" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "One", + "Many", + "ManyReadListOnly", + "ManyReadByKeyOnly" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Part" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "Part", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Part-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/self.Likes()": { + "get": { + "summary": "How many like this part", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/self.Like": { + "post": { + "summary": "I like this part", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/One": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update related One", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.SubPart-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete related One", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/Many": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "One desc", + "Two", + "Two desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/Many(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from related Many by key", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Many", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "name": "SubPart", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.SubPart-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Many", + "tags": [ + "TheWhole" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/ManyReadListOnly": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Supports only read-list", + "description": "Does not support any system query options", + "tags": [ + "TheWhole" + ], + "parameters": [ + { + "$ref": "#/parameters/count" + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of SubPart", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/TheWhole/Many({index-1})/ManyReadByKeyOnly": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + } + ] + }, + "/TheWhole/Many({index-1})/ManyReadByKeyOnly(One={One-2},Two={Two-2})": { + "parameters": [ + { + "name": "index-1", + "in": "path", + "required": true, + "description": "key: index", + "type": "integer", + "format": "int32" + }, + { + "name": "One-2", + "in": "path", + "required": true, + "description": "key: One", + "type": "integer", + "format": "int32" + }, + { + "name": "Two-2", + "in": "path", + "required": true, + "description": "key: Two", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Supports only read-by-key", + "description": "Does not support `$select`", + "tags": [ + "TheWhole" + ], + "parameters": [ + + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders": { + "get": { + "summary": "Get entities from Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Folder" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.Folder-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Folder-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Folder" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.Folder-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Folder-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Folder" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.Folder-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Folder-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Folder" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.Folder-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders('{Name-3}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-3", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Folder-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders('{Name-3}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-3", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Folder" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.Folder-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders('{Name-3}')/Folders('{Name-4}')": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-3", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-4", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entity from related Folders by key", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/Containment.Folder-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from related Folders", + "tags": [ + "Folders" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Folders('{Name}')/Folders('{Name-1}')/Folders('{Name-2}')/Folders('{Name-3}')/Folders('{Name-4}')/Folders": { + "parameters": [ + { + "name": "Name", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-1", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-2", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-3", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + }, + { + "name": "Name-4", + "in": "path", + "required": true, + "description": "key: Name", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Name desc", + "Description", + "Description desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Name", + "Description" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Folders" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Folder", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Folder" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Folders", + "tags": [ + "Folders" + ], + "parameters": [ + { + "name": "Folder", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/Containment.Folder-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/Containment.Folder" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + } + }, + "definitions": { + "Containment.Whole": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "One": { + "$ref": "#/definitions/Containment.Part" + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Part" + } + } + }, + "title": "Whole" + }, + "Containment.Whole-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "One": { + "$ref": "#/definitions/Containment.Part-create" + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Part-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Whole (for create)" + }, + "Containment.Whole-update": { + "type": "object", + "properties": { + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Whole (for update)" + }, + "Containment.Part": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int32" + }, + "One": { + "$ref": "#/definitions/Containment.SubPart" + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "ManyReadListOnly": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart" + } + }, + "ManyReadByKeyOnly": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart" + } + } + }, + "title": "Part" + }, + "Containment.Part-create": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int32" + }, + "One": { + "$ref": "#/definitions/Containment.SubPart-create" + }, + "Many": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart-create" + } + }, + "ManyReadListOnly": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart-create" + } + }, + "ManyReadByKeyOnly": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.SubPart-create" + } + } + }, + "required": [ + "index" + ], + "title": "Part (for create)" + }, + "Containment.Part-update": { + "type": "object", + "title": "Part (for update)" + }, + "Containment.SubPart": { + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "title": "SubPart" + }, + "Containment.SubPart-create": { + "type": "object", + "properties": { + "One": { + "type": "integer", + "format": "int32" + }, + "Two": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "One", + "Two" + ], + "title": "SubPart (for create)" + }, + "Containment.SubPart-update": { + "type": "object", + "title": "SubPart (for update)" + }, + "Containment.Folder": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Folders": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Folder" + } + } + }, + "title": "Folder" + }, + "Containment.Folder-create": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Folders": { + "type": "array", + "items": { + "$ref": "#/definitions/Containment.Folder-create" + } + } + }, + "required": [ + "Name" + ], + "title": "Folder (for create)" + }, + "Containment.Folder-update": { + "type": "object", + "properties": { + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Folder (for update)" + }, + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "type": "integer", + "minimum": 0 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "type": "integer", + "minimum": 0 + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "type": "boolean" + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "type": "string" + } + }, + "responses": { + "error": { + "description": "Error", + "schema": { + "$ref": "#/definitions/error" + } + } + } +} diff --git a/odata-openapi/tools/tests/containment.xml b/odata-openapi/tools/tests/containment.xml new file mode 100644 index 00000000..77a0d93f --- /dev/null +++ b/odata-openapi/tools/tests/containment.xml @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + false + + + + + false + + + + + + + + + + + false + + + + + + + false + + + + + true + + + + + + + + + false + + + + + + + false + + + + + + + false + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/tests/csdl-16.1.openapi3.json b/odata-openapi/tools/tests/csdl-16.1.openapi3.json new file mode 100644 index 00000000..4999fd80 --- /dev/null +++ b/odata-openapi/tools/tests/csdl-16.1.openapi3.json @@ -0,0 +1,2393 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Service for namespace ODataDemo", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:orange}],[Product]->[Category],[Product]-0..1>[Supplier],[Category{bg:orange}],[Category]-*>[Product],[Supplier{bg:orange}],[Supplier]++-[Address],[Supplier]-*>[Product],[Country{bg:orange}],[Address],[Address]-0..1>[Country],[Products{bg:dodgerblue}]++-*>[Product],[Categories{bg:dodgerblue}]++-*>[Category],[Suppliers{bg:dodgerblue}]++-*>[Supplier],[MainSupplier{bg:dodgerblue}]++->[Supplier],[Countries{bg:dodgerblue}]++-*>[Country],[ProductsByRating{bg:dodgerblue}]-*>[Product])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "Categories", + "description": "Product Categories" + }, + { + "name": "Suppliers" + }, + { + "name": "MainSupplier", + "description": "Primary Supplier" + }, + { + "name": "Countries" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products('{ID}')/Category": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products('{ID}')/Supplier": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Category", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address", + "Address desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Supplier", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers('{ID}')/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/MainSupplier": { + "get": { + "summary": "Get MainSupplier", + "tags": [ + "MainSupplier" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update MainSupplier", + "tags": [ + "MainSupplier" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/MainSupplier/Products": { + "get": { + "summary": "Get entities from related Products", + "tags": [ + "MainSupplier", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "MainSupplier", + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Countries": { + "get": { + "summary": "Get entities from Countries", + "tags": [ + "Countries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Code desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Country", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Country" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Countries", + "tags": [ + "Countries" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Countries('{Code}')": { + "parameters": [ + { + "name": "Code", + "in": "path", + "required": true, + "description": "key: Code", + "schema": { + "type": "string", + "maxLength": 2 + } + } + ], + "get": { + "summary": "Get entity from Countries by key", + "tags": [ + "Countries" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Countries", + "tags": [ + "Countries" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Country-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Countries", + "tags": [ + "Countries" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductsByRating(Rating={Rating})": { + "get": { + "summary": "Invoke function ProductsByRating", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Rating", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "nullable": true, + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "ODataDemo.Product": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "nullable": true, + "format": "date", + "example": "2017-04-13" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "format": "date", + "example": "2017-04-13" + }, + "Rating": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1, + "example": 0 + }, + "Currency": { + "type": "string", + "nullable": true, + "maxLength": 3 + }, + "Category": { + "$ref": "#/components/schemas/ODataDemo.Category" + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + ] + } + }, + "title": "Product" + }, + "ODataDemo.Product-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "nullable": true, + "format": "date", + "example": "2017-04-13" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "format": "date", + "example": "2017-04-13" + }, + "Rating": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1, + "example": 0 + }, + "Currency": { + "type": "string", + "nullable": true, + "maxLength": 3 + }, + "Category": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + ] + } + }, + "required": [ + "ID" + ], + "title": "Product (for create)" + }, + "ODataDemo.Product-update": { + "type": "object", + "properties": { + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "nullable": true, + "format": "date", + "example": "2017-04-13" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "format": "date", + "example": "2017-04-13" + }, + "Rating": { + "type": "integer", + "nullable": true, + "format": "int32" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "nullable": true, + "format": "decimal", + "multipleOf": 1, + "example": 0 + }, + "Currency": { + "type": "string", + "nullable": true, + "maxLength": 3 + } + }, + "title": "Product (for update)" + }, + "ODataDemo.Category": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + }, + "title": "Category" + }, + "ODataDemo.Category-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Category (for create)" + }, + "ODataDemo.Category-update": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "title": "Category (for update)" + }, + "ODataDemo.Supplier": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "$ref": "#/components/schemas/ODataDemo.Address" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + }, + "title": "Supplier" + }, + "ODataDemo.Supplier-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "$ref": "#/components/schemas/ODataDemo.Address-create" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Supplier (for create)" + }, + "ODataDemo.Supplier-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "$ref": "#/components/schemas/ODataDemo.Address-update" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + }, + "title": "Supplier (for update)" + }, + "ODataDemo.Country": { + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 2 + }, + "Name": { + "type": "string", + "nullable": true + } + }, + "title": "Country" + }, + "ODataDemo.Country-create": { + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 2 + }, + "Name": { + "type": "string", + "nullable": true + } + }, + "required": [ + "Code" + ], + "title": "Country (for create)" + }, + "ODataDemo.Country-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "title": "Country (for update)" + }, + "ODataDemo.Address": { + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "CountryName": { + "type": "string", + "nullable": true + }, + "Country": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Country" + } + ] + } + }, + "title": "Address" + }, + "ODataDemo.Address-create": { + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "CountryName": { + "type": "string", + "nullable": true + }, + "Country": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Country-create" + } + ] + } + }, + "title": "Address (for create)" + }, + "ODataDemo.Address-update": { + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "CountryName": { + "type": "string", + "nullable": true + } + }, + "title": "Address (for update)" + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} diff --git a/odata-openapi/tools/tests/csdl-16.1.swagger.json b/odata-openapi/tools/tests/csdl-16.1.swagger.json new file mode 100644 index 00000000..b06190c9 --- /dev/null +++ b/odata-openapi/tools/tests/csdl-16.1.swagger.json @@ -0,0 +1,2212 @@ +{ + "swagger": "2.0", + "info": { + "title": "Service for namespace ODataDemo", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:orange}],[Product]->[Category],[Product]-0..1>[Supplier],[Category{bg:orange}],[Category]-*>[Product],[Supplier{bg:orange}],[Supplier]++-[Address],[Supplier]-*>[Product],[Country{bg:orange}],[Address],[Address]-0..1>[Country],[Products{bg:dodgerblue}]++-*>[Product],[Categories{bg:dodgerblue}]++-*>[Category],[Suppliers{bg:dodgerblue}]++-*>[Supplier],[MainSupplier{bg:dodgerblue}]++->[Supplier],[Countries{bg:dodgerblue}]++-*>[Country],[ProductsByRating{bg:dodgerblue}]-*>[Product])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "schemes": [ + "https" + ], + "host": "localhost", + "basePath": "/service-root", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "Categories", + "description": "Product Categories" + }, + { + "name": "Suppliers" + }, + { + "name": "MainSupplier", + "description": "Primary Supplier" + }, + { + "name": "Countries" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products('{ID}')/Category": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products('{ID}')/Supplier": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Category", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Category" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "Category", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "Category", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Category-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address", + "Address desc", + "Concurrency", + "Concurrency desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Supplier", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "Supplier", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers('{ID}')": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "Supplier", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers('{ID}')/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/MainSupplier": { + "get": { + "summary": "Get MainSupplier", + "tags": [ + "MainSupplier" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update MainSupplier", + "tags": [ + "MainSupplier" + ], + "parameters": [ + { + "name": "Supplier", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/MainSupplier/Products": { + "get": { + "summary": "Get entities from related Products", + "tags": [ + "MainSupplier", + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc", + "Currency", + "Currency desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Currency" + ] + } + }, + { + "name": "expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Category", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "MainSupplier", + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Countries": { + "get": { + "summary": "Get entities from Countries", + "tags": [ + "Countries" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Code desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Country", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Country" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Countries", + "tags": [ + "Countries" + ], + "parameters": [ + { + "name": "Country", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Country-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Country" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Countries('{Code}')": { + "parameters": [ + { + "name": "Code", + "in": "path", + "required": true, + "description": "key: Code", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Countries by key", + "tags": [ + "Countries" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Code", + "Name" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Country" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Countries", + "tags": [ + "Countries" + ], + "parameters": [ + { + "name": "Country", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Country-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Countries", + "tags": [ + "Countries" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ProductsByRating(Rating={Rating})": { + "get": { + "summary": "Invoke function ProductsByRating", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Rating", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).", + "tags": [ + "Batch Requests" + ], + "consumes": [ + "multipart/mixed;boundary=request-separator" + ], + "produces": [ + "multipart/mixed" + ], + "parameters": [ + { + "name": "requestBody", + "in": "body", + "description": "Batch request", + "schema": { + "type": "string", + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + ], + "responses": { + "200": { + "description": "Batch response", + "schema": { + "type": "string", + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + } + }, + "definitions": { + "ODataDemo.Product": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": [ + "string", + "null" + ], + "format": "date", + "example": "2017-04-13" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "format": "date", + "example": "2017-04-13" + }, + "Rating": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "Price": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1, + "example": 0 + }, + "Currency": { + "type": [ + "string", + "null" + ], + "maxLength": 3, + "example": "string" + }, + "Category": { + "$ref": "#/definitions/ODataDemo.Category" + }, + "Supplier": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + }, + "title": "Product" + }, + "ODataDemo.Product-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": [ + "string", + "null" + ], + "format": "date", + "example": "2017-04-13" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "format": "date", + "example": "2017-04-13" + }, + "Rating": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "Price": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1, + "example": 0 + }, + "Currency": { + "type": [ + "string", + "null" + ], + "maxLength": 3, + "example": "string" + }, + "Category": { + "$ref": "#/definitions/ODataDemo.Category-create" + }, + "Supplier": { + "$ref": "#/definitions/ODataDemo.Supplier-create" + } + }, + "required": [ + "ID" + ], + "title": "Product (for create)" + }, + "ODataDemo.Product-update": { + "type": "object", + "properties": { + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": [ + "string", + "null" + ], + "format": "date", + "example": "2017-04-13" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "format": "date", + "example": "2017-04-13" + }, + "Rating": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "Price": { + "type": [ + "number", + "string", + "null" + ], + "format": "decimal", + "multipleOf": 1, + "example": 0 + }, + "Currency": { + "type": [ + "string", + "null" + ], + "maxLength": 3, + "example": "string" + } + }, + "title": "Product (for update)" + }, + "ODataDemo.Category": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + }, + "title": "Category" + }, + "ODataDemo.Category-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Category (for create)" + }, + "ODataDemo.Category-update": { + "type": "object", + "properties": { + "Name": { + "type": "string" + } + }, + "title": "Category (for update)" + }, + "ODataDemo.Supplier": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + }, + "title": "Supplier" + }, + "ODataDemo.Supplier-create": { + "type": "object", + "properties": { + "ID": { + "type": "string" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address-create" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Supplier (for create)" + }, + "ODataDemo.Supplier-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address-update" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + }, + "title": "Supplier (for update)" + }, + "ODataDemo.Country": { + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 2 + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Country" + }, + "ODataDemo.Country-create": { + "type": "object", + "properties": { + "Code": { + "type": "string", + "maxLength": 2 + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "required": [ + "Code" + ], + "title": "Country (for create)" + }, + "ODataDemo.Country-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Country (for update)" + }, + "ODataDemo.Address": { + "type": "object", + "properties": { + "Street": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "State": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ZipCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "CountryName": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Country": { + "$ref": "#/definitions/ODataDemo.Country" + } + }, + "title": "Address" + }, + "ODataDemo.Address-create": { + "type": "object", + "properties": { + "Street": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "State": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ZipCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "CountryName": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Country": { + "$ref": "#/definitions/ODataDemo.Country-create" + } + }, + "title": "Address (for create)" + }, + "ODataDemo.Address-update": { + "type": "object", + "properties": { + "Street": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "State": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ZipCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "CountryName": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Address (for update)" + }, + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "type": "integer", + "minimum": 0 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "type": "integer", + "minimum": 0 + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "type": "boolean" + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "type": "string" + } + }, + "responses": { + "error": { + "description": "Error", + "schema": { + "$ref": "#/definitions/error" + } + } + } +} diff --git a/odata-openapi/tools/tests/csdl-16.1.xml b/odata-openapi/tools/tests/csdl-16.1.xml new file mode 100644 index 00000000..dd87d986 --- /dev/null +++ b/odata-openapi/tools/tests/csdl-16.1.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Concurrency + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/tests/descriptions.openapi3.json b/odata-openapi/tools/tests/descriptions.openapi3.json new file mode 100644 index 00000000..7d297a9f --- /dev/null +++ b/odata-openapi/tools/tests/descriptions.openapi3.json @@ -0,0 +1,1425 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Container - Description", + "version": "0.0.1", + "description": "Container - LongDescription\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[entities{bg:dodgerblue}]++-*>[entity],[entities_ext{bg:dodgerblue}]++-*>[entity],[single{bg:dodgerblue}]++->[entity],[single_ext{bg:dodgerblue}]++->[entity],[actionimport{bg:dodgerblue}],[actionimport_ext{bg:dodgerblue}],[actionimport_no_descriptions{bg:dodgerblue}],[functionimport{bg:dodgerblue}],[functionimport_ext{bg:dodgerblue}],[functionimport_no_descriptions{bg:dodgerblue}],[entity{bg:orange}])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "entities", + "description": "Entity Set - Description" + }, + { + "name": "entities_ext", + "description": "Entity Set Ext - Description" + }, + { + "name": "single", + "description": "Singleton - Description" + }, + { + "name": "single_ext", + "description": "Singleton Ext - Description" + } + ], + "paths": { + "/entities": { + "get": { + "summary": "Query Entity Set - Description", + "description": "Query Entity Set - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id", + "id desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of entity", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Create Entity - Description", + "description": "Create Entity - LongDescription", + "tags": [ + "entities" + ], + "requestBody": { + "required": true, + "description": "Entity Type - Description", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/entities('{id}')": { + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "schema": { + "type": "string", + "maxLength": 70 + } + } + ], + "get": { + "summary": "Read Entity by Key - Description", + "description": "Read Entity by Key - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update Entity - Description", + "description": "Update Entity - LongDescription", + "tags": [ + "entities" + ], + "requestBody": { + "required": true, + "description": "Entity Type - Description", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete Entity - Description", + "description": "Delete Entity - LongDescription", + "tags": [ + "entities" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/entities('{id}')/self.function(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "description": "Function Bound Overload - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "schema": { + "type": "string", + "maxLength": 70 + } + }, + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/entities('{id}')/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "description": "Action Bound Overload - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "schema": { + "type": "string", + "maxLength": 70 + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/entities_ext": { + "get": { + "summary": "Query Entity Set Ext - Description", + "description": "Query Entity Set Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "$ref": "#/components/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id", + "id desc" + ] + } + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of entity", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Create Entity Ext - Description", + "description": "Create Entity Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "requestBody": { + "required": true, + "description": "Entity Type - Description", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/entities_ext('{id}')": { + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "schema": { + "type": "string", + "maxLength": 70 + } + } + ], + "get": { + "summary": "Read Entity Set by Key Ext - Description", + "description": "Read Entity Set by Key Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update Entity Ext - Description", + "description": "Update Entity Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "requestBody": { + "required": true, + "description": "Entity Type - Description", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete Entity Ext - Description", + "description": "Delete Entity Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/entities_ext('{id}')/self.function(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "description": "Function Bound Overload - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "schema": { + "type": "string", + "maxLength": 70 + } + }, + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/entities_ext('{id}')/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "description": "Action Bound Overload - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "schema": { + "type": "string", + "maxLength": 70 + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/single": { + "get": { + "summary": "Read Singleton - Description", + "description": "Read Singleton - LongDescription", + "tags": [ + "single" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update Singleton - Description", + "description": "Update Singleton - LongDescription", + "tags": [ + "single" + ], + "requestBody": { + "required": true, + "description": "Entity Type - Description", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/single/self.function(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "description": "Function Bound Overload - LongDescription", + "tags": [ + "single" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/single/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "description": "Action Bound Overload - LongDescription", + "tags": [ + "single" + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/single_ext": { + "get": { + "summary": "Read Singleton Ext - Description", + "description": "Read Singleton Ext - LongDescription", + "tags": [ + "single_ext" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update Singleton Ext - Description", + "description": "Update Singleton Ext - LongDescription", + "tags": [ + "single_ext" + ], + "requestBody": { + "required": true, + "description": "Entity Type - Description", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/descriptions.entity-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/single_ext/self.function(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "description": "Function Bound Overload - LongDescription", + "tags": [ + "single_ext" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/single_ext/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "description": "Action Bound Overload - LongDescription", + "tags": [ + "single_ext" + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/actionimport": { + "post": { + "summary": "Action Import - Description", + "description": "Action Import - LongDescription", + "tags": [ + "Service Operations" + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Parameter - Description", + "description": "Action Unbound Overload Parameter Ext - LongDescription" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Return Type - Description", + "description": "Action Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/actionimport_ext": { + "post": { + "summary": "Action Import Ext - Description", + "description": "Action Import Ext - LongDescription", + "tags": [ + "Service Operations" + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Parameter - Description", + "description": "Action Unbound Overload Parameter Ext - LongDescription" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Return Type - Description", + "description": "Action Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/actionimport_no_descriptions": { + "post": { + "summary": "Action Unbound Overload - Description", + "description": "Action Unbound Overload Ext - LongDescription", + "tags": [ + "Service Operations" + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Parameter - Description", + "description": "Action Unbound Overload Parameter Ext - LongDescription" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Action Unbound Overload Return Type - Description", + "description": "Action Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/functionimport(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Import - Description", + "description": "Function Import - LongDescription", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Unbound Overload Parameter - Description \nFunction Unbound Overload Parameter Ext - LongDescription", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Unbound Overload Return Type - Description", + "description": "Function Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/functionimport_ext(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Import Ext - Description", + "description": "Function Import Ext - LongDescription", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Unbound Overload Parameter - Description \nFunction Unbound Overload Parameter Ext - LongDescription", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Unbound Overload Return Type - Description", + "description": "Function Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/functionimport_no_descriptions(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Unbound Overload - Description", + "description": "Function Unbound Overload Ext - LongDescription", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Unbound Overload Parameter - Description \nFunction Unbound Overload Parameter Ext - LongDescription", + "schema": { + "type": "string", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string", + "nullable": true, + "title": "Function Unbound Overload Return Type - Description", + "description": "Function Unbound Overload Return Type Ext - LongDescription" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET entities HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "200": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + }, + "descriptions.entity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "maxLength": 70, + "title": "Property - Description", + "description": "Property - LongDescription" + } + }, + "title": "Entity Type - Description", + "description": "Entity Type - LongDescription" + }, + "descriptions.entity-create": { + "type": "object", + "properties": { + "id": { + "type": "string", + "maxLength": 70, + "title": "Property - Description", + "description": "Property - LongDescription" + } + }, + "required": [ + "id" + ], + "title": "Entity Type - Description (for create)", + "description": "Entity Type - LongDescription" + }, + "descriptions.entity-update": { + "type": "object", + "title": "Entity Type - Description (for update)", + "description": "Entity Type - LongDescription" + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "schema": { + "type": "string" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} diff --git a/odata-openapi/tools/tests/descriptions.swagger.json b/odata-openapi/tools/tests/descriptions.swagger.json new file mode 100644 index 00000000..836c24e4 --- /dev/null +++ b/odata-openapi/tools/tests/descriptions.swagger.json @@ -0,0 +1,1308 @@ +{ + "swagger": "2.0", + "info": { + "title": "Container - Description", + "version": "0.0.1", + "description": "Container - LongDescription\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[entities{bg:dodgerblue}]++-*>[entity],[entities_ext{bg:dodgerblue}]++-*>[entity],[single{bg:dodgerblue}]++->[entity],[single_ext{bg:dodgerblue}]++->[entity],[actionimport{bg:dodgerblue}],[actionimport_ext{bg:dodgerblue}],[actionimport_no_descriptions{bg:dodgerblue}],[functionimport{bg:dodgerblue}],[functionimport_ext{bg:dodgerblue}],[functionimport_no_descriptions{bg:dodgerblue}],[entity{bg:orange}])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "schemes": [ + "https" + ], + "host": "localhost", + "basePath": "/service-root", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + { + "name": "entities", + "description": "Entity Set - Description" + }, + { + "name": "entities_ext", + "description": "Entity Set Ext - Description" + }, + { + "name": "single", + "description": "Singleton - Description" + }, + { + "name": "single_ext", + "description": "Singleton Ext - Description" + } + ], + "paths": { + "/entities": { + "get": { + "summary": "Query Entity Set - Description", + "description": "Query Entity Set - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id", + "id desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of entity", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/descriptions.entity" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Create Entity - Description", + "description": "Create Entity - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "name": "entity", + "in": "body", + "description": "Entity Type - Description", + "schema": { + "$ref": "#/definitions/descriptions.entity-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/descriptions.entity" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/entities('{id}')": { + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "type": "string" + } + ], + "get": { + "summary": "Read Entity by Key - Description", + "description": "Read Entity by Key - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/descriptions.entity" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update Entity - Description", + "description": "Update Entity - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "name": "entity", + "in": "body", + "description": "Entity Type - Description", + "schema": { + "$ref": "#/definitions/descriptions.entity-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete Entity - Description", + "description": "Delete Entity - LongDescription", + "tags": [ + "entities" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/entities('{id}')/self.function(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "description": "Function Bound Overload - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "type": "string" + }, + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/entities('{id}')/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "description": "Action Bound Overload - LongDescription", + "tags": [ + "entities" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/entities_ext": { + "get": { + "summary": "Query Entity Set Ext - Description", + "description": "Query Entity Set Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "$ref": "#/parameters/search" + }, + { + "name": "filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id", + "id desc" + ] + } + }, + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of entity", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/descriptions.entity" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Create Entity Ext - Description", + "description": "Create Entity Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "name": "entity", + "in": "body", + "description": "Entity Type - Description", + "schema": { + "$ref": "#/definitions/descriptions.entity-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/descriptions.entity" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/entities_ext('{id}')": { + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "type": "string" + } + ], + "get": { + "summary": "Read Entity Set by Key Ext - Description", + "description": "Read Entity Set by Key Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/descriptions.entity" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update Entity Ext - Description", + "description": "Update Entity Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "name": "entity", + "in": "body", + "description": "Entity Type - Description", + "schema": { + "$ref": "#/definitions/descriptions.entity-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete Entity Ext - Description", + "description": "Delete Entity Ext - LongDescription", + "tags": [ + "entities_ext" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/entities_ext('{id}')/self.function(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "description": "Function Bound Overload - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "type": "string" + }, + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/entities_ext('{id}')/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "description": "Action Bound Overload - LongDescription", + "tags": [ + "entities_ext" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "description": "Property - Description \nProperty - LongDescription", + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/single": { + "get": { + "summary": "Read Singleton - Description", + "description": "Read Singleton - LongDescription", + "tags": [ + "single" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/descriptions.entity" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update Singleton - Description", + "description": "Update Singleton - LongDescription", + "tags": [ + "single" + ], + "parameters": [ + { + "name": "entity", + "in": "body", + "description": "Entity Type - Description", + "schema": { + "$ref": "#/definitions/descriptions.entity-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/single/self.function(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "description": "Function Bound Overload - LongDescription", + "tags": [ + "single" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/single/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "description": "Action Bound Overload - LongDescription", + "tags": [ + "single" + ], + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/single_ext": { + "get": { + "summary": "Read Singleton Ext - Description", + "description": "Read Singleton Ext - LongDescription", + "tags": [ + "single_ext" + ], + "parameters": [ + { + "name": "select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "id" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/descriptions.entity" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update Singleton Ext - Description", + "description": "Update Singleton Ext - LongDescription", + "tags": [ + "single_ext" + ], + "parameters": [ + { + "name": "entity", + "in": "body", + "description": "Entity Type - Description", + "schema": { + "$ref": "#/definitions/descriptions.entity-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/single_ext/self.function(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Bound Overload Ext - Description", + "description": "Function Bound Overload - LongDescription", + "tags": [ + "single_ext" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Bound Overload Nonbinding Parameter Ext - Description \nFunction Bound Overload Nonbinding Parameter - LongDescription", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Function Bound Overload Return Type Ext - Description", + "description": "Function Bound Overload Return Type - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/single_ext/self.action": { + "post": { + "summary": "Action Bound Overload Ext - Description", + "description": "Action Bound Overload - LongDescription", + "tags": [ + "single_ext" + ], + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Bound Overload Nonbinding Parameter Ext - Description", + "description": "Action Bound Overload Non-Binding Parameter - LongDescription" + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Bound Overload Return Type Ext - Description", + "description": "Action Bound Overload Return Type - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/actionimport": { + "post": { + "summary": "Action Import - Description", + "description": "Action Import - LongDescription", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Unbound Overload Parameter - Description", + "description": "Action Unbound Overload Parameter Ext - LongDescription" + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Unbound Overload Return Type - Description", + "description": "Action Unbound Overload Return Type Ext - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/actionimport_ext": { + "post": { + "summary": "Action Import Ext - Description", + "description": "Action Import Ext - LongDescription", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Unbound Overload Parameter - Description", + "description": "Action Unbound Overload Parameter Ext - LongDescription" + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Unbound Overload Return Type - Description", + "description": "Action Unbound Overload Return Type Ext - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/actionimport_no_descriptions": { + "post": { + "summary": "Action Unbound Overload - Description", + "description": "Action Unbound Overload Ext - LongDescription", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "nonbinding": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Unbound Overload Parameter - Description", + "description": "Action Unbound Overload Parameter Ext - LongDescription" + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Action Unbound Overload Return Type - Description", + "description": "Action Unbound Overload Return Type Ext - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/functionimport(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Import - Description", + "description": "Function Import - LongDescription", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Unbound Overload Parameter - Description \nFunction Unbound Overload Parameter Ext - LongDescription", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Function Unbound Overload Return Type - Description", + "description": "Function Unbound Overload Return Type Ext - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/functionimport_ext(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Import Ext - Description", + "description": "Function Import Ext - LongDescription", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Unbound Overload Parameter - Description \nFunction Unbound Overload Parameter Ext - LongDescription", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Function Unbound Overload Return Type - Description", + "description": "Function Unbound Overload Return Type Ext - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/functionimport_no_descriptions(nonbinding='{nonbinding}')": { + "get": { + "summary": "Function Unbound Overload - Description", + "description": "Function Unbound Overload Ext - LongDescription", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "nonbinding", + "in": "path", + "required": true, + "description": "Function Unbound Overload Parameter - Description \nFunction Unbound Overload Parameter Ext - LongDescription", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "string", + "null" + ], + "example": "string", + "title": "Function Unbound Overload Return Type - Description", + "description": "Function Unbound Overload Return Type Ext - LongDescription" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).", + "tags": [ + "Batch Requests" + ], + "consumes": [ + "multipart/mixed;boundary=request-separator" + ], + "produces": [ + "multipart/mixed" + ], + "parameters": [ + { + "name": "requestBody", + "in": "body", + "description": "Batch request", + "schema": { + "type": "string", + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET entities HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + ], + "responses": { + "200": { + "description": "Batch response", + "schema": { + "type": "string", + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + } + }, + "definitions": { + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "target": { + "type": "string" + } + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + }, + "descriptions.entity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "maxLength": 70, + "title": "Property - Description", + "description": "Property - LongDescription" + } + }, + "title": "Entity Type - Description", + "description": "Entity Type - LongDescription" + }, + "descriptions.entity-create": { + "type": "object", + "properties": { + "id": { + "type": "string", + "maxLength": 70, + "title": "Property - Description", + "description": "Property - LongDescription" + } + }, + "required": [ + "id" + ], + "title": "Entity Type - Description (for create)", + "description": "Entity Type - LongDescription" + }, + "descriptions.entity-update": { + "type": "object", + "title": "Entity Type - Description (for update)", + "description": "Entity Type - LongDescription" + } + }, + "parameters": { + "top": { + "name": "top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "type": "integer", + "minimum": 0 + }, + "skip": { + "name": "skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "type": "integer", + "minimum": 0 + }, + "count": { + "name": "count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "type": "boolean" + }, + "search": { + "name": "search", + "in": "query", + "description": "Search items by search phrases, see [Searching](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionsearch)", + "type": "string" + } + }, + "responses": { + "error": { + "description": "Error", + "schema": { + "$ref": "#/definitions/error" + } + } + } +} diff --git a/odata-openapi/tools/tests/descriptions.xml b/odata-openapi/tools/tests/descriptions.xml new file mode 100644 index 00000000..60200d66 --- /dev/null +++ b/odata-openapi/tools/tests/descriptions.xml @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/tests/odata-rw-v2.openapi3.json b/odata-openapi/tools/tests/odata-rw-v2.openapi3.json new file mode 100644 index 00000000..9873b615 --- /dev/null +++ b/odata-openapi/tools/tests/odata-rw-v2.openapi3.json @@ -0,0 +1,1947 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Service for namespace ODataDemo", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:orange}],[Product]-0..1>[Category],[Product]-0..1>[Supplier],[Category{bg:orange}],[Category]-*>[Product],[Supplier{bg:orange}],[Supplier]++-[Address],[Supplier]-*>[Product],[Address],[Products{bg:dodgerblue}]++-*>[Product],[Categories{bg:dodgerblue}]++-*>[Category],[Suppliers{bg:dodgerblue}]++-*>[Supplier],[GetProductsByRating{bg:dodgerblue}]-*>[Product])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "Categories" + }, + { + "name": "Suppliers" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Category", + "Supplier" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Product", + "type": "object", + "properties": { + "__count": { + "$ref": "#/components/schemas/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "title": "Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Category", + "Supplier" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "title": "Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "title": "Modified Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Product-update" + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/Category": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Products" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "title": "Category", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/Supplier": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency", + "Products" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "title": "Supplier", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Products" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Category", + "type": "object", + "properties": { + "__count": { + "$ref": "#/components/schemas/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "title": "Category", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Products" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "title": "Category", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "title": "Modified Category", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Category-update" + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Category", + "Supplier" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Product", + "type": "object", + "properties": { + "__count": { + "$ref": "#/components/schemas/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "title": "Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address", + "Address desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency", + "Products" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Supplier", + "type": "object", + "properties": { + "__count": { + "$ref": "#/components/schemas/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "title": "Supplier", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency", + "Products" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "title": "Supplier", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "title": "Modified Supplier", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Supplier-update" + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Category", + "Supplier" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Category", + "Supplier" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Product", + "type": "object", + "properties": { + "__count": { + "$ref": "#/components/schemas/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "title": "Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/GetProductsByRating": { + "get": { + "summary": "Invoke function GetProductsByRating", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "rating", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Product", + "type": "object", + "properties": { + "__count": { + "$ref": "#/components/schemas/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=152).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "202": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "ODataDemo.Product": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "example": "/Date(1492098664000)/" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "example": "/Date(1492098664000)/" + }, + "Rating": { + "type": "integer", + "format": "int32" + }, + "Price": { + "type": "string", + "format": "decimal", + "multipleOf": 1, + "example": "0" + }, + "Category": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Category" + } + ] + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + ] + } + }, + "title": "Product" + }, + "ODataDemo.Product-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "example": "/Date(1492098664000)/" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "example": "/Date(1492098664000)/" + }, + "Rating": { + "type": "integer", + "format": "int32" + }, + "Price": { + "type": "string", + "format": "decimal", + "multipleOf": 1, + "example": "0" + }, + "Category": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + ] + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + ] + } + }, + "required": [ + "ID" + ], + "title": "Product (for create)" + }, + "ODataDemo.Product-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "example": "/Date(1492098664000)/" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "example": "/Date(1492098664000)/" + }, + "Rating": { + "type": "integer", + "format": "int32" + }, + "Price": { + "type": "string", + "format": "decimal", + "multipleOf": 1, + "example": "0" + } + }, + "title": "Product (for update)" + }, + "ODataDemo.Category": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + }, + "title": "Category" + }, + "ODataDemo.Category-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + } + }, + "required": [ + "ID" + ], + "title": "Category (for create)" + }, + "ODataDemo.Category-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "title": "Category (for update)" + }, + "ODataDemo.Supplier": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "$ref": "#/components/schemas/ODataDemo.Address" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + }, + "title": "Supplier" + }, + "ODataDemo.Supplier-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "$ref": "#/components/schemas/ODataDemo.Address-create" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + } + }, + "required": [ + "ID" + ], + "title": "Supplier (for create)" + }, + "ODataDemo.Supplier-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "$ref": "#/components/schemas/ODataDemo.Address-update" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + }, + "title": "Supplier (for update)" + }, + "ODataDemo.Address": { + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + }, + "title": "Address" + }, + "ODataDemo.Address-create": { + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + }, + "title": "Address (for create)" + }, + "ODataDemo.Address-update": { + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + }, + "title": "Address (for update)" + }, + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$inlinecount](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=67) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "object", + "required": [ + "lang", + "value" + ], + "properties": { + "lang": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=66)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$inlinecount", + "in": "query", + "description": "Include count of items, see [Inlinecount](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=67)", + "schema": { + "type": "string", + "enum": [ + "allpages", + "none" + ] + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} diff --git a/odata-openapi/tools/tests/odata-rw-v2.swagger.json b/odata-openapi/tools/tests/odata-rw-v2.swagger.json new file mode 100644 index 00000000..89cb479d --- /dev/null +++ b/odata-openapi/tools/tests/odata-rw-v2.swagger.json @@ -0,0 +1,1835 @@ +{ + "swagger": "2.0", + "info": { + "title": "Service for namespace ODataDemo", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:orange}],[Product]-0..1>[Category],[Product]-0..1>[Supplier],[Category{bg:orange}],[Category]-*>[Product],[Supplier{bg:orange}],[Supplier]++-[Address],[Supplier]-*>[Product],[Address],[Products{bg:dodgerblue}]++-*>[Product],[Categories{bg:dodgerblue}]++-*>[Category],[Suppliers{bg:dodgerblue}]++-*>[Supplier],[GetProductsByRating{bg:dodgerblue}]-*>[Product])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "schemes": [ + "https" + ], + "host": "localhost", + "basePath": "/service-root", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "Categories" + }, + { + "name": "Suppliers" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Category", + "Supplier" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Category", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Product", + "type": "object", + "properties": { + "__count": { + "$ref": "#/definitions/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "title": "Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Category", + "Supplier" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Category", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "title": "Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New property values", + "schema": { + "title": "Modified Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Product-update" + } + } + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products({ID})/Category": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Category", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Products" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "title": "Category", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Category" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products({ID})/Supplier": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency", + "Products" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "title": "Supplier", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Products" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Category", + "type": "object", + "properties": { + "__count": { + "$ref": "#/definitions/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Category" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "Category", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "title": "Category", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Category" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Products" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "title": "Category", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Category" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "Category", + "in": "body", + "description": "New property values", + "schema": { + "title": "Modified Category", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Category-update" + } + } + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Category", + "Supplier" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Category", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Product", + "type": "object", + "properties": { + "__count": { + "$ref": "#/definitions/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "title": "Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address", + "Address desc", + "Concurrency", + "Concurrency desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency", + "Products" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Supplier", + "type": "object", + "properties": { + "__count": { + "$ref": "#/definitions/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "Supplier", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "title": "Supplier", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Concurrency", + "Products" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "title": "Supplier", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "Supplier", + "in": "body", + "description": "New property values", + "schema": { + "title": "Modified Supplier", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Supplier-update" + } + } + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=64)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=68)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price", + "Category", + "Supplier" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=63)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Category", + "Supplier" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Product", + "type": "object", + "properties": { + "__count": { + "$ref": "#/definitions/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "title": "Product", + "type": "object", + "properties": { + "d": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/GetProductsByRating": { + "get": { + "summary": "Invoke function GetProductsByRating", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "rating", + "in": "query", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "title": "Wrapper", + "type": "object", + "properties": { + "d": { + "title": "Collection of Product", + "type": "object", + "properties": { + "__count": { + "$ref": "#/definitions/count" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=152).", + "tags": [ + "Batch Requests" + ], + "consumes": [ + "multipart/mixed;boundary=request-separator" + ], + "produces": [ + "multipart/mixed" + ], + "parameters": [ + { + "name": "requestBody", + "in": "body", + "description": "Batch request", + "schema": { + "type": "string", + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + ], + "responses": { + "202": { + "description": "Batch response", + "schema": { + "type": "string", + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + } + }, + "definitions": { + "ODataDemo.Product": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": "string", + "example": "/Date(1492098664000)/" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "example": "/Date(1492098664000)/" + }, + "Rating": { + "type": "integer", + "format": "int32" + }, + "Price": { + "type": "string", + "format": "decimal", + "multipleOf": 1, + "example": "0" + }, + "Category": { + "$ref": "#/definitions/ODataDemo.Category" + }, + "Supplier": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + }, + "title": "Product" + }, + "ODataDemo.Product-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": "string", + "example": "/Date(1492098664000)/" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "example": "/Date(1492098664000)/" + }, + "Rating": { + "type": "integer", + "format": "int32" + }, + "Price": { + "type": "string", + "format": "decimal", + "multipleOf": 1, + "example": "0" + }, + "Category": { + "$ref": "#/definitions/ODataDemo.Category-create" + }, + "Supplier": { + "$ref": "#/definitions/ODataDemo.Supplier-create" + } + }, + "required": [ + "ID" + ], + "title": "Product (for create)" + }, + "ODataDemo.Product-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": "string", + "example": "/Date(1492098664000)/" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "example": "/Date(1492098664000)/" + }, + "Rating": { + "type": "integer", + "format": "int32" + }, + "Price": { + "type": "string", + "format": "decimal", + "multipleOf": 1, + "example": "0" + } + }, + "title": "Product (for update)" + }, + "ODataDemo.Category": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Products": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "title": "Category" + }, + "ODataDemo.Category-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Products": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + } + } + }, + "required": [ + "ID" + ], + "title": "Category (for create)" + }, + "ODataDemo.Category-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Category (for update)" + }, + "ODataDemo.Supplier": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "title": "Supplier" + }, + "ODataDemo.Supplier-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address-create" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + } + } + }, + "required": [ + "ID" + ], + "title": "Supplier (for create)" + }, + "ODataDemo.Supplier-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address-update" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + }, + "title": "Supplier (for update)" + }, + "ODataDemo.Address": { + "type": "object", + "properties": { + "Street": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "State": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ZipCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Address" + }, + "ODataDemo.Address-create": { + "type": "object", + "properties": { + "Street": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "State": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ZipCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Address (for create)" + }, + "ODataDemo.Address-update": { + "type": "object", + "properties": { + "Street": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "State": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ZipCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Address (for update)" + }, + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$inlinecount](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=67) query option." + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "object", + "required": [ + "lang", + "value" + ], + "properties": { + "lang": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=66)", + "type": "integer", + "minimum": 0 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=65)", + "type": "integer", + "minimum": 0 + }, + "count": { + "name": "$inlinecount", + "in": "query", + "description": "Include count of items, see [Inlinecount](https://help.sap.com/doc/5890d27be418427993fafa6722cdc03b/Cloud/en-US/OdataV2.pdf#page=67)", + "type": "string", + "enum": [ + "allpages", + "none" + ] + } + }, + "responses": { + "error": { + "description": "Error", + "schema": { + "$ref": "#/definitions/error" + } + } + } +} diff --git a/odata-openapi/tools/tests/odata-rw-v2.xml b/odata-openapi/tools/tests/odata-rw-v2.xml new file mode 100644 index 00000000..fa17c96a --- /dev/null +++ b/odata-openapi/tools/tests/odata-rw-v2.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/tests/odata-rw-v3.openapi3.json b/odata-openapi/tools/tests/odata-rw-v3.openapi3.json new file mode 100644 index 00000000..8e8e7183 --- /dev/null +++ b/odata-openapi/tools/tests/odata-rw-v3.openapi3.json @@ -0,0 +1,4332 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Service for namespace ODataDemo", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:orange}],[Product]-*>[Category],[Product]-0..1>[Supplier],[Product]-0..1>[ProductDetail],[Product]^[FeaturedProduct{bg:orange}],[FeaturedProduct]-0..1>[Advertisement],[ProductDetail{bg:orange}],[ProductDetail]-0..1>[Product],[Category{bg:orange}],[Category]-*>[Product],[Supplier{bg:orange}],[Supplier]++-0..1[Address],[Supplier]-*>[Product],[Address],[Person{bg:orange}],[Person]-0..1>[PersonDetail],[Person]^[Customer{bg:orange}],[Person]^[Employee{bg:orange}],[PersonDetail{bg:orange}],[PersonDetail]++-0..1[Address],[PersonDetail]-0..1>[Person],[Advertisement{bg:orange}],[Advertisement]-0..1>[FeaturedProduct],[Products{bg:dodgerblue}]++-*>[Product],[ProductDetails{bg:dodgerblue}]++-*>[ProductDetail],[Categories{bg:dodgerblue}]++-*>[Category],[Suppliers{bg:dodgerblue}]++-*>[Supplier],[Persons{bg:dodgerblue}]++-*>[Person],[PersonDetails{bg:dodgerblue}]++-*>[PersonDetail],[Advertisements{bg:dodgerblue}]++-*>[Advertisement],[GetProductsByRating{bg:dodgerblue}]-*>[Product],[IncreaseSalaries{bg:dodgerblue}])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "servers": [ + { + "url": "https://localhost/service-root" + } + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "ProductDetails" + }, + { + "name": "Categories" + }, + { + "name": "Suppliers" + }, + { + "name": "Persons" + }, + { + "name": "PersonDetails" + }, + { + "name": "Advertisements" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/ODataDemo.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/Categories": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Categories", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Category", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Categories", + "tags": [ + "Products", + "Categories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/Supplier": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Products({ID})/ProductDetail": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related ProductDetail", + "tags": [ + "Products", + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails": { + "get": { + "summary": "Get entities from ProductDetails", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "Details", + "Details desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of ProductDetail", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to ProductDetails", + "tags": [ + "ProductDetails" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from ProductDetails by key", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in ProductDetails", + "tags": [ + "ProductDetails" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from ProductDetails", + "tags": [ + "ProductDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})/Product": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "ProductDetails", + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})/Product/ODataDemo.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Category", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Category-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address", + "Address desc", + "Location", + "Location desc", + "Concurrency", + "Concurrency desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Supplier", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Supplier-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Suppliers({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Persons": { + "get": { + "summary": "Get entities from Persons", + "tags": [ + "Persons" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Persons", + "tags": [ + "Persons" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Persons({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from Persons by key", + "tags": [ + "Persons" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Persons", + "tags": [ + "Persons" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Persons", + "tags": [ + "Persons" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Persons({ID})/PersonDetail": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related PersonDetail", + "tags": [ + "Persons", + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails": { + "get": { + "summary": "Get entities from PersonDetails", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "PersonID desc", + "Age", + "Age desc", + "Gender", + "Gender desc", + "Phone", + "Phone desc", + "Address", + "Address desc", + "Photo", + "Photo desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of PersonDetail", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to PersonDetails", + "tags": [ + "PersonDetails" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails({PersonID})": { + "parameters": [ + { + "name": "PersonID", + "in": "path", + "required": true, + "description": "key: PersonID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get entity from PersonDetails by key", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in PersonDetails", + "tags": [ + "PersonDetails" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from PersonDetails", + "tags": [ + "PersonDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/PersonDetails({PersonID})/Person": { + "parameters": [ + { + "name": "PersonID", + "in": "path", + "required": true, + "description": "key: PersonID", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Get related Person", + "tags": [ + "PersonDetails", + "Persons" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Person" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements": { + "get": { + "summary": "Get entities from Advertisements", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "$ref": "#/components/parameters/top" + }, + { + "$ref": "#/components/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "AirDate", + "AirDate desc" + ] + } + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "content": { + "application/json": { + "schema": { + "title": "Collection of Advertisement", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Advertisements", + "tags": [ + "Advertisements" + ], + "requestBody": { + "required": true, + "description": "New entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement-create" + } + } + } + }, + "responses": { + "201": { + "description": "Created entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Get entity from Advertisements by key", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Advertisements", + "tags": [ + "Advertisements" + ], + "requestBody": { + "required": true, + "description": "New property values", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.Advertisement-update" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Advertisements", + "tags": [ + "Advertisements" + ], + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/Advertisements({ID})/FeaturedProduct": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Get related FeaturedProduct", + "tags": [ + "Advertisements", + "Products" + ], + "parameters": [ + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "explode": false, + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Advertisement" + ] + } + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/GetProductsByRating(rating={rating})": { + "get": { + "summary": "Invoke function GetProductsByRating", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "rating", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int16" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/components/schemas/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + } + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/IncreaseSalaries": { + "post": { + "summary": "Invoke action IncreaseSalaries", + "tags": [ + "Service Operations" + ], + "requestBody": { + "description": "Action parameters", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "percentage": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).\n\n*Please note that \"Try it out\" is not supported for this request.*", + "tags": [ + "Batch Requests" + ], + "requestBody": { + "required": true, + "description": "Batch request", + "content": { + "multipart/mixed;boundary=request-separator": { + "schema": { + "type": "string" + }, + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + }, + "responses": { + "202": { + "description": "Batch response", + "content": { + "multipart/mixed": { + "schema": { + "type": "string" + }, + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + } + }, + "components": { + "schemas": { + "ODataDemo.Product": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + ] + }, + "ProductDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + ] + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct" + }, + { + + } + ], + "title": "Product" + }, + "ODataDemo.Product-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + ] + }, + "ProductDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-create" + } + ] + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct-create" + }, + { + + } + ], + "title": "Product (for create)" + }, + "ODataDemo.Product-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct-update" + }, + { + + } + ], + "title": "Product (for update)" + }, + "ODataDemo.FeaturedProduct": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category" + } + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier" + } + ] + }, + "ProductDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail" + } + ] + }, + "Advertisement": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Advertisement" + } + ] + } + }, + "title": "FeaturedProduct" + }, + "ODataDemo.FeaturedProduct-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Category-create" + } + }, + "Supplier": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Supplier-create" + } + ] + }, + "ProductDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.ProductDetail-create" + } + ] + }, + "Advertisement": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Advertisement-create" + } + ] + } + }, + "required": [ + "ID" + ], + "title": "FeaturedProduct (for create)" + }, + "ODataDemo.FeaturedProduct-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Description": { + "type": "string", + "nullable": true + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": "string", + "nullable": true, + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "double", + "example": 3.14 + } + }, + "title": "FeaturedProduct (for update)" + }, + "ODataDemo.ProductDetail": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": "string", + "nullable": true + }, + "Product": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Product" + } + ] + } + }, + "title": "ProductDetail" + }, + "ODataDemo.ProductDetail-create": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": "string", + "nullable": true + }, + "Product": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + ] + } + }, + "required": [ + "ProductID" + ], + "title": "ProductDetail (for create)" + }, + "ODataDemo.ProductDetail-update": { + "type": "object", + "properties": { + "Details": { + "type": "string", + "nullable": true + } + }, + "title": "ProductDetail (for update)" + }, + "ODataDemo.Category": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + }, + "title": "Category" + }, + "ODataDemo.Category-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Category (for create)" + }, + "ODataDemo.Category-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "title": "Category (for update)" + }, + "ODataDemo.Supplier": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address" + } + ] + }, + "Location": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ] + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product" + } + } + }, + "title": "Supplier" + }, + "ODataDemo.Supplier-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-create" + } + ] + }, + "Location": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ] + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Supplier (for create)" + }, + "ODataDemo.Supplier-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "Address": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-update" + } + ] + }, + "Location": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/geoPoint" + } + ] + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + }, + "title": "Supplier (for update)" + }, + "ODataDemo.Address": { + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + }, + "title": "Address" + }, + "ODataDemo.Address-create": { + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + }, + "title": "Address (for create)" + }, + "ODataDemo.Address-update": { + "type": "object", + "properties": { + "Street": { + "type": "string", + "nullable": true + }, + "City": { + "type": "string", + "nullable": true + }, + "State": { + "type": "string", + "nullable": true + }, + "ZipCode": { + "type": "string", + "nullable": true + }, + "Country": { + "type": "string", + "nullable": true + } + }, + "title": "Address (for update)" + }, + "ODataDemo.Person": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + ] + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Customer" + }, + { + "$ref": "#/components/schemas/ODataDemo.Employee" + }, + { + + } + ], + "title": "Person" + }, + "ODataDemo.Person-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + ] + } + }, + "required": [ + "ID" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Customer-create" + }, + { + "$ref": "#/components/schemas/ODataDemo.Employee-create" + }, + { + + } + ], + "title": "Person (for create)" + }, + "ODataDemo.Person-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + } + }, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Customer-update" + }, + { + "$ref": "#/components/schemas/ODataDemo.Employee-update" + }, + { + + } + ], + "title": "Person (for update)" + }, + "ODataDemo.Customer": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + ] + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1, + "example": 0 + } + }, + "title": "Customer" + }, + "ODataDemo.Customer-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + ] + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1, + "example": 0 + } + }, + "required": [ + "ID" + ], + "title": "Customer (for create)" + }, + "ODataDemo.Customer-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "TotalExpense": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "decimal", + "multipleOf": 1, + "example": 0 + } + }, + "title": "Customer (for update)" + }, + "ODataDemo.Employee": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail" + } + ] + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + "title": "Employee" + }, + "ODataDemo.Employee-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": "string", + "nullable": true + }, + "PersonDetail": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.PersonDetail-create" + } + ] + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + "required": [ + "ID" + ], + "title": "Employee (for create)" + }, + "ODataDemo.Employee-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "EmployeeID": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "format": "float", + "example": 3.14 + } + }, + "title": "Employee (for update)" + }, + "ODataDemo.PersonDetail": { + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address" + } + ] + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Person" + } + ] + } + }, + "title": "PersonDetail" + }, + "ODataDemo.PersonDetail-create": { + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-create" + } + ] + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Person-create" + } + ] + } + }, + "required": [ + "PersonID" + ], + "title": "PersonDetail (for create)" + }, + "ODataDemo.PersonDetail-update": { + "type": "object", + "properties": { + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": "string", + "nullable": true + }, + "Address": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.Address-update" + } + ] + }, + "Photo": { + "type": "string", + "format": "base64url" + } + }, + "title": "PersonDetail (for update)" + }, + "ODataDemo.Advertisement": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct" + } + ] + } + }, + "title": "Advertisement" + }, + "ODataDemo.Advertisement-create": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "nullable": true, + "anyOf": [ + { + "$ref": "#/components/schemas/ODataDemo.FeaturedProduct-create" + } + ] + } + }, + "required": [ + "ID" + ], + "title": "Advertisement (for create)" + }, + "ODataDemo.Advertisement-update": { + "type": "object", + "properties": { + "Name": { + "type": "string", + "nullable": true + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + }, + "title": "Advertisement (for update)" + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "geoPoint": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + }, + "coordinates": { + "$ref": "#/components/schemas/geoPosition" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2 + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "object", + "required": [ + "lang", + "value" + ], + "properties": { + "lang": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "schema": { + "type": "integer", + "minimum": 0 + }, + "example": 50 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "schema": { + "type": "boolean" + } + } + }, + "responses": { + "error": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error" + } + } + } + } + } + } +} diff --git a/odata-openapi/tools/tests/odata-rw-v3.swagger.json b/odata-openapi/tools/tests/odata-rw-v3.swagger.json new file mode 100644 index 00000000..8e5544be --- /dev/null +++ b/odata-openapi/tools/tests/odata-rw-v3.swagger.json @@ -0,0 +1,3812 @@ +{ + "swagger": "2.0", + "info": { + "title": "Service for namespace ODataDemo", + "version": "", + "description": "This service is located at [https://localhost/service-root/](https://localhost/service-root/)\n\n## Entity Data Model\n![ER Diagram](https://yuml.me/diagram/class/[Product{bg:orange}],[Product]-*>[Category],[Product]-0..1>[Supplier],[Product]-0..1>[ProductDetail],[Product]^[FeaturedProduct{bg:orange}],[FeaturedProduct]-0..1>[Advertisement],[ProductDetail{bg:orange}],[ProductDetail]-0..1>[Product],[Category{bg:orange}],[Category]-*>[Product],[Supplier{bg:orange}],[Supplier]++-0..1[Address],[Supplier]-*>[Product],[Address],[Person{bg:orange}],[Person]-0..1>[PersonDetail],[Person]^[Customer{bg:orange}],[Person]^[Employee{bg:orange}],[PersonDetail{bg:orange}],[PersonDetail]++-0..1[Address],[PersonDetail]-0..1>[Person],[Advertisement{bg:orange}],[Advertisement]-0..1>[FeaturedProduct],[Products{bg:dodgerblue}]++-*>[Product],[ProductDetails{bg:dodgerblue}]++-*>[ProductDetail],[Categories{bg:dodgerblue}]++-*>[Category],[Suppliers{bg:dodgerblue}]++-*>[Supplier],[Persons{bg:dodgerblue}]++-*>[Person],[PersonDetails{bg:dodgerblue}]++-*>[PersonDetail],[Advertisements{bg:dodgerblue}]++-*>[Advertisement],[GetProductsByRating{bg:dodgerblue}]-*>[Product],[IncreaseSalaries{bg:dodgerblue}])\n\n### Legend\n![Legend](https://yuml.me/diagram/plain;dir:TB;scale:60/class/[External.Type{bg:whitesmoke}],[ComplexType],[EntityType{bg:orange}],[EntitySet/Singleton/Operation{bg:dodgerblue}])" + }, + "schemes": [ + "https" + ], + "host": "localhost", + "basePath": "/service-root", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + { + "name": "Products" + }, + { + "name": "ProductDetails" + }, + { + "name": "Categories" + }, + { + "name": "Suppliers" + }, + { + "name": "Persons" + }, + { + "name": "PersonDetails" + }, + { + "name": "Advertisements" + } + ], + "paths": { + "/Products": { + "get": { + "summary": "Get entities from Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Products by key", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Products", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Products", + "tags": [ + "Products" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products({ID})/ODataDemo.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "number", + "string" + ], + "format": "double", + "example": 3.14 + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products({ID})/Categories": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Categories", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Category", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Category" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Categories", + "tags": [ + "Products", + "Categories" + ], + "parameters": [ + { + "name": "Category", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products({ID})/Supplier": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Supplier", + "tags": [ + "Products", + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Products({ID})/ProductDetail": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related ProductDetail", + "tags": [ + "Products", + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.ProductDetail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ProductDetails": { + "get": { + "summary": "Get entities from ProductDetails", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "ProductID desc", + "Details", + "Details desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of ProductDetail", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.ProductDetail" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to ProductDetails", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "name": "ProductDetail", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.ProductDetail-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.ProductDetail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from ProductDetails by key", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ProductID", + "Details" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Product" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.ProductDetail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in ProductDetails", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "name": "ProductDetail", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.ProductDetail-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from ProductDetails", + "tags": [ + "ProductDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})/Product": { + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Product", + "tags": [ + "ProductDetails", + "Products" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/ProductDetails({ProductID})/Product/ODataDemo.Discount": { + "post": { + "summary": "Invoke action Discount", + "tags": [ + "ProductDetails" + ], + "parameters": [ + { + "name": "ProductID", + "in": "path", + "required": true, + "description": "key: ProductID", + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "discountPercentage": { + "type": "integer", + "format": "int32" + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": [ + "number", + "string" + ], + "format": "double", + "example": 3.14 + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories": { + "get": { + "summary": "Get entities from Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Category", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Category" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "Category", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Categories by key", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Category" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "Category", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Category-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Categories", + "tags": [ + "Categories" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Categories({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Categories", + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers": { + "get": { + "summary": "Get entities from Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Address", + "Address desc", + "Location", + "Location desc", + "Concurrency", + "Concurrency desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Supplier", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "Supplier", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Suppliers by key", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Address", + "Location", + "Concurrency" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Products" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Suppliers", + "tags": [ + "Suppliers" + ], + "parameters": [ + { + "name": "Supplier", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Supplier-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Suppliers", + "tags": [ + "Suppliers" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Suppliers({ID})/Products": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entities from related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "Description", + "Description desc", + "ReleaseDate", + "ReleaseDate desc", + "DiscontinuedDate", + "DiscontinuedDate desc", + "Rating", + "Rating desc", + "Price", + "Price desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "Description", + "ReleaseDate", + "DiscontinuedDate", + "Rating", + "Price" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Categories", + "Supplier", + "ProductDetail" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to related Products", + "tags": [ + "Suppliers", + "Products" + ], + "parameters": [ + { + "name": "Product", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Persons": { + "get": { + "summary": "Get entities from Persons", + "tags": [ + "Persons" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Person", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Person" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Persons", + "tags": [ + "Persons" + ], + "parameters": [ + { + "name": "Person", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Person-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Persons({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from Persons by key", + "tags": [ + "Persons" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Persons", + "tags": [ + "Persons" + ], + "parameters": [ + { + "name": "Person", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Person-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Persons", + "tags": [ + "Persons" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Persons({ID})/PersonDetail": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related PersonDetail", + "tags": [ + "Persons", + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.PersonDetail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/PersonDetails": { + "get": { + "summary": "Get entities from PersonDetails", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "PersonID desc", + "Age", + "Age desc", + "Gender", + "Gender desc", + "Phone", + "Phone desc", + "Address", + "Address desc", + "Photo", + "Photo desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of PersonDetail", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.PersonDetail" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to PersonDetails", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "name": "PersonDetail", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.PersonDetail-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.PersonDetail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/PersonDetails({PersonID})": { + "parameters": [ + { + "name": "PersonID", + "in": "path", + "required": true, + "description": "key: PersonID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get entity from PersonDetails by key", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "PersonID", + "Age", + "Gender", + "Phone", + "Address", + "Photo" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Person" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.PersonDetail" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in PersonDetails", + "tags": [ + "PersonDetails" + ], + "parameters": [ + { + "name": "PersonDetail", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.PersonDetail-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from PersonDetails", + "tags": [ + "PersonDetails" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/PersonDetails({PersonID})/Person": { + "parameters": [ + { + "name": "PersonID", + "in": "path", + "required": true, + "description": "key: PersonID", + "type": "integer", + "format": "int32" + } + ], + "get": { + "summary": "Get related Person", + "tags": [ + "PersonDetails", + "Persons" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "PersonDetail" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Person" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Advertisements": { + "get": { + "summary": "Get entities from Advertisements", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "$ref": "#/parameters/top" + }, + { + "$ref": "#/parameters/skip" + }, + { + "name": "$filter", + "in": "query", + "description": "Filter items by property values, see [Filtering](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionfilter)", + "type": "string" + }, + { + "$ref": "#/parameters/count" + }, + { + "name": "$orderby", + "in": "query", + "description": "Order items by property values, see [Sorting](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionorderby)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "ID desc", + "Name", + "Name desc", + "AirDate", + "AirDate desc" + ] + } + }, + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entities", + "schema": { + "title": "Collection of Advertisement", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Advertisement" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "post": { + "summary": "Add new entity to Advertisements", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "name": "Advertisement", + "in": "body", + "description": "New entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Advertisement-create" + } + } + ], + "responses": { + "201": { + "description": "Created entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Advertisement" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Advertisements({ID})": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get entity from Advertisements by key", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "name": "$select", + "in": "query", + "description": "Select properties to be returned, see [Select](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionselect)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ID", + "Name", + "AirDate" + ] + } + }, + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "FeaturedProduct" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.Advertisement" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "patch": { + "summary": "Update entity in Advertisements", + "tags": [ + "Advertisements" + ], + "parameters": [ + { + "name": "Advertisement", + "in": "body", + "description": "New property values", + "schema": { + "$ref": "#/definitions/ODataDemo.Advertisement-update" + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + }, + "delete": { + "summary": "Delete entity from Advertisements", + "tags": [ + "Advertisements" + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/Advertisements({ID})/FeaturedProduct": { + "parameters": [ + { + "name": "ID", + "in": "path", + "required": true, + "description": "key: ID", + "type": "string" + } + ], + "get": { + "summary": "Get related FeaturedProduct", + "tags": [ + "Advertisements", + "Products" + ], + "parameters": [ + { + "name": "$expand", + "in": "query", + "description": "Expand related entities, see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionexpand)", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "*", + "Advertisement" + ] + } + } + ], + "responses": { + "200": { + "description": "Retrieved entity", + "schema": { + "$ref": "#/definitions/ODataDemo.FeaturedProduct" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/GetProductsByRating(rating={rating})": { + "get": { + "summary": "Invoke function GetProductsByRating", + "tags": [ + "Products" + ], + "parameters": [ + { + "name": "rating", + "in": "path", + "required": true, + "type": "integer", + "format": "int16" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "title": "Collection of Product", + "type": "object", + "properties": { + "@count": { + "$ref": "#/definitions/count" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + } + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/IncreaseSalaries": { + "post": { + "summary": "Invoke action IncreaseSalaries", + "tags": [ + "Service Operations" + ], + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Action parameters", + "schema": { + "type": "object", + "properties": { + "percentage": { + "type": "integer", + "format": "int32" + } + } + } + } + ], + "responses": { + "204": { + "description": "Success" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, + "/$batch": { + "post": { + "summary": "Send a group of requests", + "description": "Group multiple requests into a single request payload, see [Batch Requests](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BatchRequests).", + "tags": [ + "Batch Requests" + ], + "consumes": [ + "multipart/mixed;boundary=request-separator" + ], + "produces": [ + "multipart/mixed" + ], + "parameters": [ + { + "name": "requestBody", + "in": "body", + "description": "Batch request", + "schema": { + "type": "string", + "example": "--request-separator\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nGET Products HTTP/1.1\nAccept: application/json\n\n\n--request-separator--" + } + } + ], + "responses": { + "202": { + "description": "Batch response", + "schema": { + "type": "string", + "example": "--response-separator\nContent-Type: application/http\n\nHTTP/1.1 200 OK\nContent-Type: application/json\n\n{...}\n--response-separator--" + } + }, + "400": { + "$ref": "#/responses/error" + } + } + } + } + }, + "definitions": { + "ODataDemo.Product": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "type": [ + "number", + "string" + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Category" + } + }, + "Supplier": { + "$ref": "#/definitions/ODataDemo.Supplier" + }, + "ProductDetail": { + "$ref": "#/definitions/ODataDemo.ProductDetail" + } + }, + "title": "Product" + }, + "ODataDemo.Product-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "type": [ + "number", + "string" + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Category-create" + } + }, + "Supplier": { + "$ref": "#/definitions/ODataDemo.Supplier-create" + }, + "ProductDetail": { + "$ref": "#/definitions/ODataDemo.ProductDetail-create" + } + }, + "required": [ + "ID" + ], + "title": "Product (for create)" + }, + "ODataDemo.Product-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "type": [ + "number", + "string" + ], + "format": "double", + "example": 3.14 + } + }, + "title": "Product (for update)" + }, + "ODataDemo.FeaturedProduct": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "type": [ + "number", + "string" + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Category" + } + }, + "Supplier": { + "$ref": "#/definitions/ODataDemo.Supplier" + }, + "ProductDetail": { + "$ref": "#/definitions/ODataDemo.ProductDetail" + }, + "Advertisement": { + "$ref": "#/definitions/ODataDemo.Advertisement" + } + }, + "title": "FeaturedProduct" + }, + "ODataDemo.FeaturedProduct-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "type": [ + "number", + "string" + ], + "format": "double", + "example": 3.14 + }, + "Categories": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Category-create" + } + }, + "Supplier": { + "$ref": "#/definitions/ODataDemo.Supplier-create" + }, + "ProductDetail": { + "$ref": "#/definitions/ODataDemo.ProductDetail-create" + }, + "Advertisement": { + "$ref": "#/definitions/ODataDemo.Advertisement-create" + } + }, + "required": [ + "ID" + ], + "title": "FeaturedProduct (for create)" + }, + "ODataDemo.FeaturedProduct-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Description": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ReleaseDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "DiscontinuedDate": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Rating": { + "type": "integer", + "format": "int16" + }, + "Price": { + "type": [ + "number", + "string" + ], + "format": "double", + "example": 3.14 + } + }, + "title": "FeaturedProduct (for update)" + }, + "ODataDemo.ProductDetail": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Product": { + "$ref": "#/definitions/ODataDemo.Product" + } + }, + "title": "ProductDetail" + }, + "ODataDemo.ProductDetail-create": { + "type": "object", + "properties": { + "ProductID": { + "type": "integer", + "format": "int32" + }, + "Details": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Product": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + }, + "required": [ + "ProductID" + ], + "title": "ProductDetail (for create)" + }, + "ODataDemo.ProductDetail-update": { + "type": "object", + "properties": { + "Details": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "ProductDetail (for update)" + }, + "ODataDemo.Category": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + }, + "title": "Category" + }, + "ODataDemo.Category-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Category (for create)" + }, + "ODataDemo.Category-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Category (for update)" + }, + "ODataDemo.Supplier": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address" + }, + "Location": { + "$ref": "#/definitions/geoPoint" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product" + } + } + }, + "title": "Supplier" + }, + "ODataDemo.Supplier-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address-create" + }, + "Location": { + "$ref": "#/definitions/geoPoint" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + }, + "Products": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataDemo.Product-create" + } + } + }, + "required": [ + "ID" + ], + "title": "Supplier (for create)" + }, + "ODataDemo.Supplier-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address-update" + }, + "Location": { + "$ref": "#/definitions/geoPoint" + }, + "Concurrency": { + "type": "integer", + "format": "int32" + } + }, + "title": "Supplier (for update)" + }, + "ODataDemo.Address": { + "type": "object", + "properties": { + "Street": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "State": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ZipCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Address" + }, + "ODataDemo.Address-create": { + "type": "object", + "properties": { + "Street": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "State": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ZipCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Address (for create)" + }, + "ODataDemo.Address-update": { + "type": "object", + "properties": { + "Street": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "City": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "State": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "ZipCode": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Country": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Address (for update)" + }, + "ODataDemo.Person": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "PersonDetail": { + "$ref": "#/definitions/ODataDemo.PersonDetail" + } + }, + "title": "Person" + }, + "ODataDemo.Person-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "PersonDetail": { + "$ref": "#/definitions/ODataDemo.PersonDetail-create" + } + }, + "required": [ + "ID" + ], + "title": "Person (for create)" + }, + "ODataDemo.Person-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + } + }, + "title": "Person (for update)" + }, + "ODataDemo.Customer": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "PersonDetail": { + "$ref": "#/definitions/ODataDemo.PersonDetail" + }, + "TotalExpense": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1, + "example": 0 + } + }, + "title": "Customer" + }, + "ODataDemo.Customer-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "PersonDetail": { + "$ref": "#/definitions/ODataDemo.PersonDetail-create" + }, + "TotalExpense": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1, + "example": 0 + } + }, + "required": [ + "ID" + ], + "title": "Customer (for create)" + }, + "ODataDemo.Customer-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "TotalExpense": { + "type": [ + "number", + "string" + ], + "format": "decimal", + "multipleOf": 1, + "example": 0 + } + }, + "title": "Customer (for update)" + }, + "ODataDemo.Employee": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "PersonDetail": { + "$ref": "#/definitions/ODataDemo.PersonDetail" + }, + "EmployeeID": { + "type": [ + "integer", + "string" + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + } + }, + "title": "Employee" + }, + "ODataDemo.Employee-create": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "PersonDetail": { + "$ref": "#/definitions/ODataDemo.PersonDetail-create" + }, + "EmployeeID": { + "type": [ + "integer", + "string" + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + } + }, + "required": [ + "ID" + ], + "title": "Employee (for create)" + }, + "ODataDemo.Employee-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "EmployeeID": { + "type": [ + "integer", + "string" + ], + "format": "int64", + "example": "42" + }, + "HireDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "Salary": { + "type": [ + "number", + "string" + ], + "format": "float", + "example": 3.14 + } + }, + "title": "Employee (for update)" + }, + "ODataDemo.PersonDetail": { + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address" + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "$ref": "#/definitions/ODataDemo.Person" + } + }, + "title": "PersonDetail" + }, + "ODataDemo.PersonDetail-create": { + "type": "object", + "properties": { + "PersonID": { + "type": "integer", + "format": "int32" + }, + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address-create" + }, + "Photo": { + "type": "string", + "format": "base64url" + }, + "Person": { + "$ref": "#/definitions/ODataDemo.Person-create" + } + }, + "required": [ + "PersonID" + ], + "title": "PersonDetail (for create)" + }, + "ODataDemo.PersonDetail-update": { + "type": "object", + "properties": { + "Age": { + "type": "integer", + "format": "uint8" + }, + "Gender": { + "type": "boolean" + }, + "Phone": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "Address": { + "$ref": "#/definitions/ODataDemo.Address-update" + }, + "Photo": { + "type": "string", + "format": "base64url" + } + }, + "title": "PersonDetail (for update)" + }, + "ODataDemo.Advertisement": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "$ref": "#/definitions/ODataDemo.FeaturedProduct" + } + }, + "title": "Advertisement" + }, + "ODataDemo.Advertisement-create": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + }, + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + }, + "FeaturedProduct": { + "$ref": "#/definitions/ODataDemo.FeaturedProduct-create" + } + }, + "required": [ + "ID" + ], + "title": "Advertisement (for create)" + }, + "ODataDemo.Advertisement-update": { + "type": "object", + "properties": { + "Name": { + "type": [ + "string", + "null" + ], + "example": "string" + }, + "AirDate": { + "type": "string", + "format": "date-time", + "example": "2017-04-13T15:51:04Z" + } + }, + "title": "Advertisement (for update)" + }, + "count": { + "type": "string", + "description": "The number of entities in the collection. Available when using the [$count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount) query option." + }, + "geoPoint": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "Point" + ], + "default": "Point" + }, + "coordinates": { + "$ref": "#/definitions/geoPosition" + } + }, + "required": [ + "type", + "coordinates" + ] + }, + "geoPosition": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2 + }, + "error": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "object", + "required": [ + "lang", + "value" + ], + "properties": { + "lang": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "innererror": { + "type": "object", + "description": "The structure of this object is service-specific" + } + } + } + } + } + }, + "parameters": { + "top": { + "name": "$top", + "in": "query", + "description": "Show only the first n items, see [Paging - Top](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptiontop)", + "type": "integer", + "minimum": 0 + }, + "skip": { + "name": "$skip", + "in": "query", + "description": "Skip the first n items, see [Paging - Skip](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptionskip)", + "type": "integer", + "minimum": 0 + }, + "count": { + "name": "$count", + "in": "query", + "description": "Include count of items, see [Count](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_SystemQueryOptioncount)", + "type": "boolean" + } + }, + "responses": { + "error": { + "description": "Error", + "schema": { + "$ref": "#/definitions/error" + } + } + } +} diff --git a/odata-openapi/tools/tests/odata-rw-v3.xml b/odata-openapi/tools/tests/odata-rw-v3.xml new file mode 100644 index 00000000..550eb5fd --- /dev/null +++ b/odata-openapi/tools/tests/odata-rw-v3.xml @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/odata-openapi/tools/transform.cmd b/odata-openapi/tools/transform.cmd new file mode 100644 index 00000000..4a237422 --- /dev/null +++ b/odata-openapi/tools/transform.cmd @@ -0,0 +1,82 @@ +@echo off +setlocal +set here=%~dp0 + +@rem This script uses the Apache Xalan 2.7.2 XSLT processor +@rem For a description of Xalan command-line parameters see http://xalan.apache.org/xalan-j/commandline.html +@rem +@rem Prerequisites +@rem - Java SE is installed and in the PATH - download from http://www.oracle.com/technetwork/java/javase/downloads/index.html +@rem - git is installed and in the PATH - download from https://git-for-windows.github.io/ +@rem Xalan is installed and CLASSPATH contains xalan.jar and serializer.jar - download from http://xalan.apache.org/xalan-j/downloads.html +set CLASSPATH=%here%xalan/xalan.jar;%here%xalan/serializer.jar +@rem - YAJL's json_reformat from https://github.com/lloyd/yajl has been compiled and is in the PATH +@rem - Node.js is installed - download from https://nodejs.org/ +@rem - ajv-cli is installed - npm install -g ajv-cli +@rem - https://github.com/OAI/OpenAPI-Specification is cloned next to this project +set SCHEMA_THREE=%here..\..\OpenAPI-Specification\schemas\v3.0\schema.json +set SCHEMA_TWO=%here..\..\OpenAPI-Specification\schemas\v2.0\schema.json + +if exist "%1" ( + call :process %1 https localhost /service-root %2 +) else ( + echo Usage: transform source [/swagger] + echo. + echo source Specifies the file to be transformed. + echo /swagger Output Swagger 2.0 in addition to OpenAPI 3.0.0 +) + +endlocal +exit /b + + +:process + echo %~n1 + + for /f %%V in ('java.exe org.apache.xalan.xslt.Process -XSL %here%OData-Version.xsl -IN %1') do set ODATA_VERSION=%%V + + if [%ODATA_VERSION%]==[2.0] ( + java.exe org.apache.xalan.xslt.Process -L -XSL %here%V2-to-V4-CSDL.xsl -IN %1 -OUT %~dpn1.V4.xml + set INPUT=%~dpn1.V4.xml + ) else if [%ODATA_VERSION%]==[3.0] ( + java.exe org.apache.xalan.xslt.Process -L -XSL %here%V2-to-V4-CSDL.xsl -IN %1 -OUT %~dpn1.V4.xml + set INPUT=%~dpn1.V4.xml + ) else ( + set INPUT=%1 + ) + + if [%5]==[/swagger] ( + java.exe org.apache.xalan.xslt.Process -L -XSL %here%V4-CSDL-to-OpenAPI.xsl -PARAM scheme %2 -PARAM host %3 -PARAM basePath %4 -PARAM odata-version %ODATA_VERSION% -PARAM diagram YES -PARAM openapi-root "https://raw.githubusercontent.com/oasis-tcs/odata-openapi/master/examples/" -PARAM openapi-version 2.0 -IN %INPUT% -OUT %~dpn1.tmp2.json + + json_reformat.exe < %~dpn1.tmp2.json > %~dpn1.swagger.json + if not errorlevel 1 ( + del %~dpn1.tmp2.json + + pushd . + %~d1 + cd %~p1 + git.exe --no-pager diff %~n1.swagger.json 2>nul + popd + + if exist %SCHEMA_TWO% call ajv validate -s %SCHEMA_TWO% -d %~dpn1.swagger.json > nul + ) + ) + + java.exe org.apache.xalan.xslt.Process -L -XSL %here%V4-CSDL-to-OpenAPI.xsl -PARAM scheme %2 -PARAM host %3 -PARAM basePath %4 -PARAM odata-version %ODATA_VERSION% -PARAM diagram YES -PARAM openapi-root "https://raw.githubusercontent.com/oasis-tcs/odata-openapi/master/examples/" -PARAM openapi-version 3.0.0 -IN %INPUT% -OUT %~dpn1.tmp3.json + + json_reformat.exe < %~dpn1.tmp3.json > %~dpn1.openapi3.json + if not errorlevel 1 ( + del %~dpn1.tmp3.json + if [%ODATA_VERSION%]==[2.0] del %~dpn1.V4.xml + if [%ODATA_VERSION%]==[3.0] del %~dpn1.V4.xml + + pushd . + %~d1 + cd %~p1 + git.exe --no-pager diff %~n1.openapi3.json 2>nul + popd + + if exist %SCHEMA_THREE% call ajv validate -s %SCHEMA_THREE% -d %~dpn1.openapi3.json > nul + ) + +exit /b \ No newline at end of file diff --git a/odata-openapi/tools/transform.js b/odata-openapi/tools/transform.js new file mode 100644 index 00000000..42d1579a --- /dev/null +++ b/odata-openapi/tools/transform.js @@ -0,0 +1,225 @@ +#!/usr/bin/env node + +/* TODO: +- glob for source file patterns +- arguments for + - info-title/description/version? + - externalDocs-url/description? +*/ +//console.dir(argv); + +'use strict'; + +var xslt4node = require('xslt4node'); +var minimist = require('minimist'); +var path = require('path'); +var fs = require('fs'); + +var xsltpath = path.dirname(require.main.filename) + path.sep; +xslt4node.addLibrary(xsltpath + 'xalan/xalan.jar'); + +var unknown = false; + +var argv = minimist(process.argv.slice(2), { + string: ["o", "openapi-version", "t", "target", "scheme", "host", "basePath"], + boolean: ["d", "diagram", "h", "help", "p", "pretty", "r", "references", "u", "used-schemas-only", "verbose"], + alias: { + d: "diagram", + h: "help", + o: "openapi-version", + p: "pretty", + r: "references", + t: "target", + u: "used-schemas-only", + v: "odata-version" + }, + default: { + basePath: "/service-root", + diagram: false, + host: "localhost", + "odata-version": "4.0", + "openapi-version": "3.0.0", + pretty: false, + references: false, + scheme: "http", + verbose: false + }, + unknown: (arg) => { + if (arg.substring(0, 1) == '-') { + console.error('Unknown option: ' + arg); + unknown = true; + return false; + } + } +}); +if (argv.o == '2') argv.o = "2.0"; +if (argv.o == '3') argv.o = "3.0.0"; + +if (unknown || argv._.length == 0 || argv.h) { + console.log(`Usage: odata-openapi +Options: + --basePath base path (default: /service-root) + -d, --diagram include YUML diagram + -h, --help show this info + --host host (default: localhost) + -o, --openapi-version 3.0.0 or 2.0 (default: 3.0.0) + -p, --pretty pretty-print JSON result + -r, --references include references to other files + --scheme scheme (default: http) + -t, --target target file (only useful with a single source file) + -u, --used-schemas-only produce only schemas that are actually used in operation objects + --verbose output additional progress information`); +} else { + for (var i = 0; i < argv._.length; i++) { + transform(argv._[i]); + } +} + +function transform(source) { + if (!fs.existsSync(source)) { + console.error('Source file not found: ' + source); + return; + } + + if (argv.verbose) console.log('Checking OData version used in source file: ' + source); + + xslt4node.transform( + { + xsltPath: xsltpath + 'OData-Version.xsl', + sourcePath: source, + result: String + }, + (err, result) => { + if (err) { + console.error('Source file not XML: ' + source); + } else if (result == "") { + console.error('Source file not OData: ' + source); + } else if (result == "2.0" || result == "3.0") { + transformV2V3(source, result); + } else { + transformV4(source, "4.0", false); + } + } + ); +} + +function transformV2V3(source, version) { + var target = source.substring(0, source.lastIndexOf('.') + 1) + 'tmp'; + + if (argv.verbose) console.log('Transforming ' + source + ' to OData V4, target file: ' + target); + + xslt4node.transform( + { + xsltPath: xsltpath + 'V2-to-V4-CSDL.xsl', + sourcePath: source, + result: target + }, + (err, result) => { + if (err) { + console.error(err); + } else { + transformV4(target, version, true); + } + } + ); +} + +function transformV4(source, version, deleteSource) { + var target = argv.t || source.substring(0, source.lastIndexOf('.') + 1) + 'openapi.json'; + + if (argv.verbose) console.log('Transforming ' + source + ' to OpenAPI ' + argv.o + ', target file: ' + target); + + xslt4node.transform( + { + xsltPath: xsltpath + 'V4-CSDL-to-OpenAPI.xsl', + sourcePath: source, + result: (argv.pretty || argv.u ? Buffer : target), + params: { + basePath: argv.basePath, + diagram: argv.diagram, + host: argv.host, + "odata-version": version, + "openapi-version": argv.o, + references: argv.references, + scheme: argv.scheme + } + }, + (err, result) => { + if (err) { + console.error(err); + } else { + if (argv.pretty || argv.u) { + try { + let openapi = JSON.parse(result); + if (argv.u) + deleteUnusedSchemas(openapi); + fs.writeFileSync(target, JSON.stringify(openapi, null, (argv.pretty ? 4 : 0))); + } catch (e) { + console.log(e); + fs.writeFileSync(target, result); + } + } + if (deleteSource) { + if (argv.verbose) console.log('Removing intermediate file: ' + source); + fs.unlink(source, (err) => { if (err) console.error(err); }); + } + } + } + ); +} + +function deleteUnusedSchemas(openapi) { + var referenced; + var deleted; + + while (true) { + referenced = {}; + getReferencedSchemas(openapi, referenced); + + if (openapi.hasOwnProperty('components')) + deleted = deleteUnreferenced(openapi.components.schemas, referenced, '#/components/schemas/'); + else + deleted = deleteUnreferenced(openapi.definitions, referenced, '#/definitions/'); + + if (!deleted) break; + } + + if (openapi.hasOwnProperty('components')) { + deleteUnreferenced(openapi.components.parameters, referenced, '#/components/parameters/'); + if (Object.keys(openapi.components.parameters).length == 0) + delete openapi.components.parameters; + } else { + deleteUnreferenced(openapi.parameters, referenced, '#/parameters/'); + if (Object.keys(openapi.parameters).length == 0) + delete openapi.parameters; + } +} + +function getReferencedSchemas(document, referenced) { + Object.keys(document).forEach(key => { + let value = document[key]; + if (key == '$ref') { + if (value.startsWith('#')) + referenced[value] = true; + } else { + if (Array.isArray(value)) { + value.forEach(item => getReferencedSchemas(item, referenced)) + } else if (typeof value == 'object' && value != null) { + getReferencedSchemas(value, referenced); + } + } + }); +} + +function deleteUnreferenced(schemas, referenced, prefix) { + var deleted = false; + + Object.keys(schemas).forEach(key => { + if (!referenced[prefix + key]) { + delete schemas[key]; + deleted = true; + } + }); + + return deleted; +} \ No newline at end of file diff --git a/odata-openapi/tools/xalan/LICENSE.txt b/odata-openapi/tools/xalan/LICENSE.txt new file mode 100644 index 00000000..762701ce --- /dev/null +++ b/odata-openapi/tools/xalan/LICENSE.txt @@ -0,0 +1,684 @@ +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + +The license above applies to this Apache Xalan release of: + Xalan-Java 2 - XSLT Processor + Xalan-Java 2 - Serializer + +The license above also applies to the jar files +xalan.jar and xsltc.jar - Xalan-Java 2 - XSLT Processor from +Source: http://xalan.apache.org/ + +The license above also applies to the jar file +serializer.jar - Xalan-Java 2 - Serializer +Source: http://xalan.apache.org/ +Used by: Xalan-Java 2 and Xerces-Java 2 + +The license above also applies to the jar file +xercesImpl.jar - Xerces-Java 2 XML Parser. +Source: http://xerces.apache.org/ +Used by: Xalan-Java 2 + +The license above also applies to the jar file +xml-apis.jar - Xerces-Java 2 XML Parser. +Source: http://xerces.apache.org/ +Used by: Xalan-Java 2 and release copy of Xerces-Java 2 + + + + + + + + +The following license applies to the included files: + tools/ant.jar + tools/antRun + tools/antRun.bat +Source: http://ant.apache.org/ +Used By: Xalan's build process: java/build.xml and test/build.xml + +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by the Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Ant" and "Apache Software Foundation" must not be used to + * endorse or promote products derived from this software without prior + * written permission. For written permission, please contact + * apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", nor may + * "Apache" appear in their name, without prior written permission of the + * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of the Apache Software Foundation. For more information on the + * Apache Software Foundation, please see . + * + */ +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + + + + + + + +The following license, Apache Software License, Version 1.1, +applies to the included BCEL.jar from Apache Jakarta +(Byte Code Engineering Library). +Source: http://jakarta.apache.org/bcel +Used By: XSLTC component of xml-xalan/java + +The following license, Apache Software License, Version 1.1, +also applies to the included regexp.jar, +jakarta-regexp-1.2.jar from Apache Jakarta. +Source: http://jakarta.apache.org/regexp +Used By: BCEL.jar which is used by XSLTC component of xml-xalan/java + +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +/* + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache BCEL" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache BCEL", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + + + + + + + +The following license applies to the DOM documentation +for the org.w3c.dom.* packages: + +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +W3C® DOCUMENT LICENSE +http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231 +Public documents on the W3C site are provided by the copyright holders +under the following license. By using and/or copying this document, +or the W3C document from which this statement is linked, you (the licensee) +agree that you have read, understood, and will comply with the following +terms and conditions: + +Permission to copy, and distribute the contents of this document, or the +W3C document from which this statement is linked, in any medium for any +purpose and without fee or royalty is hereby granted, provided that you include +the following on ALL copies of the document, or portions thereof, that you use: + +1. A link or URL to the original W3C document. +2. The pre-existing copyright notice of the original author, or if it + doesn't exist, a notice (hypertext is preferred, but a textual representation + is permitted) of the form: "Copyright © [$date-of-document] World Wide Web + Consortium, (Massachusetts Institute of Technology, European Research + Consortium for Informatics and Mathematics, Keio University). All Rights + Reserved. http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231" +3. If it exists, the STATUS of the W3C document. + +When space permits, inclusion of the full text of this NOTICE should be provided. +We request that authorship attribution be provided in any software, documents, +or other items or products that you create pursuant to the implementation of the +contents of this document, or any portion thereof. + +No right to create modifications or derivatives of W3C documents is granted pursuant +to this license. However, if additional requirements (documented in the Copyright FAQ) +are satisfied, the right to create modifications or derivatives is sometimes granted +by the W3C to individuals complying with those requirements. + +THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS +OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; +THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE +IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, +COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE +OR IMPLEMENTATION OF THE CONTENTS THEREOF. + +The name and trademarks of copyright holders may NOT be used in advertising +or publicity pertaining to this document or its contents without specific, +written prior permission. Title to copyright in this document will at all +times remain with copyright holders. + + +---------------------------------------------------------------------------- + +This formulation of W3C's notice and license became active on December 31 2002. +This version removes the copyright ownership notice such that this license +can be used with materials other than those owned by the W3C, moves information +on style sheets, DTDs, and schemas to the Copyright FAQ, reflects that ERCIM +is now a host of the W3C, includes references to this specific dated version +of the license, and removes the ambiguous grant of "use". See the older +formulation for the policy prior to this date. Please see our Copyright FAQ for +common questions about using materials from our site, such as the translating +or annotating specifications. Other questions about this notice can be directed +to site-policy@w3.org. + + +Joseph Reagle >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + + + + + + + + +The following license applies to the DOM software, +for the org.w3c.dom.* packages in jar file xml-apis.jar: + +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +W3C® SOFTWARE NOTICE AND LICENSE +http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 +This work (and included software, documentation such as READMEs, +or other related items) is being provided by the copyright holders +under the following license. By obtaining, using and/or copying this +work, you (the licensee) agree that you have read, understood, and will +comply with the following terms and conditions. + +Permission to copy, modify, and distribute this software and its +documentation, with or without modification, for any purpose and +without fee or royalty is hereby granted, provided that you include +the following on ALL copies of the software and documentation or +portions thereof, including modifications: + +1. The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. +2. Any pre-existing intellectual property disclaimers, notices, + or terms and conditions. If none exist, the W3C Software Short Notice + should be included (hypertext is preferred, text is permitted) within + the body of any redistributed or derivative code. +3. Notice of any changes or modifications to the files, including the + date changes were made. (We recommend you provide URIs to the location + from which the code is derived.) + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS +MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT +NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR +PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE +ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. + +The name and trademarks of copyright holders may NOT be used in advertising +or publicity pertaining to the software without specific, written prior +permission. Title to copyright in this software and any associated documentation +will at all times remain with copyright holders. + + +____________________________________ + +This formulation of W3C's notice and license became active on December 31 2002. +This version removes the copyright ownership notice such that this license can +be used with materials other than those owned by the W3C, reflects that ERCIM +is now a host of the W3C, includes references to this specific dated version +of the license, and removes the ambiguous grant of "use". Otherwise, this +version is the same as the previous version and is written so as to preserve +the Free Software Foundation's assessment of GPL compatibility and OSI's +certification under the Open Source Definition. Please see our Copyright FAQ +for common questions about using materials from our site, including specific +terms and conditions for packages like libwww, Amaya, and Jigsaw. Other +questions about this notice can be directed to site-policy@w3.org. + + +Joseph Reagle >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + + + + + + + +The following license applies to the SAX software, +for the org.xml.sax.* packages in jar file xml-apis.jar: + +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +This module, both source code and documentation, is in the Public Domain, +and comes with NO WARRANTY. See http://www.saxproject.org for further information. +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + + + + + + + +The following license applies to the jar file +java_cup.jar - LALR Parser Generator for Java(TM). +Source: http://www.cs.princeton.edu/~appel/modern/java/CUP +Used By: XSLTC component of xml-xalan/java + +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +CUP Parser Generator Copyright Notice, License, and Disclaimer + +Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both +the copyright notice and this permission notice and warranty disclaimer +appear in supporting documentation, and that the names of the authors +or their employers not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior permission. + +The authors and their employers disclaim all warranties with regard to +this software, including all implied warranties of merchantability +and fitness. In no event shall the authors or their employers be liable +for any special, indirect or consequential damages or any damages +whatsoever resulting from loss of use, data or profits, whether in an action +of contract, negligence or other tortious action, arising out of or +in connection with the use or performance of this software. +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + + + + + + + +The following license applies to the jar file runtime.jar - Component +of JavaCup: LALR Parser Generator for Java(TM). +Source: http://www.cs.princeton.edu/~appel/modern/java/CUP +Used By: XSLTC component of xml-xalan/java + +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +CUP Parser Generator Copyright Notice, License, and Disclaimer +(runtime.jar component) + +Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both +the copyright notice and this permission notice and warranty disclaimer +appear in supporting documentation, and that the names of the authors +or their employers not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior permission. + +The authors and their employers disclaim all warranties with regard to +this software, including all implied warranties of merchantability +and fitness. In no event shall the authors or their employers be liable +for any special, indirect or consequential damages or any damages +whatsoever resulting from loss of use, data or profits, whether in an action +of contract, negligence or other tortious action, arising out of or +in connection with the use or performance of this software. +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + + + + + + + +The following license applies to the JLEX jar file +JLex.jar - A Lexical Analyzer Generator for Java(TM). +Source: http://www.cs.princeton.edu/~appel/modern/java/JLex +Used By: XSLTC component of xml-xalan/java + +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +JLEX COPYRIGHT NOTICE, LICENSE AND DISCLAIMER. + +Copyright 1996-2000 by Elliot Joel Berk and C. Scott Ananian + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and +that both the copyright notice and this permission notice and +warranty disclaimer appear in supporting documentation, and that the +name of the authors or their employers not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. + +The authors and their employers disclaim all warranties with regard +to this software, including all implied warranties of merchantability and +fitness. In no event shall the authors or their employers be liable for any +special, indirect or consequential damages or any damages whatsoever resulting +from loss of use, data or profits, whether in an action of contract, +negligence or other tortious action, arising out of or in connection +with the use or performance of this software. + +Java is a trademark of Sun Microsystems, Inc. References to the Java +programming language in relation to JLex are not meant to imply that +Sun endorses this product. +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + + + + + + + +The following license applies to the jar file +stylebook-1.0-b3_xalan-2.jar - Tool for generating Xalan documentation. +Integrated with Xalan-Java 2 and Xerces 2. +Source: http://svn.apache.org/viewvc/xml/stylebook/ +Used by: Xalan-Java 2, Xalan-C++ + +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +/* + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Xalan", "Xerces", and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation and was + * originally based on software copyright (c) 1999, International + * Business Machines, Inc., http://www.apache.org. For more + * information on the Apache Software Foundation, please see + * . + */ +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> diff --git a/odata-openapi/tools/xalan/NOTICE.txt b/odata-openapi/tools/xalan/NOTICE.txt new file mode 100644 index 00000000..132f8bcc --- /dev/null +++ b/odata-openapi/tools/xalan/NOTICE.txt @@ -0,0 +1,80 @@ + ========================================================================= + == NOTICE file corresponding to section 4(d) of the Apache License, == + == Version 2.0, in this case for the Apache Xalan Java distribution. == + ========================================================================= + + Apache Xalan (Xalan XSLT processor) + Copyright 1999-2014 The Apache Software Foundation + + Apache Xalan (Xalan serializer) + Copyright 1999-2012 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (http://www.apache.org/). + + ========================================================================= + Portions of this software was originally based on the following: + - software copyright (c) 1999-2002, Lotus Development Corporation., + http://www.lotus.com. + - software copyright (c) 2001-2002, Sun Microsystems., + http://www.sun.com. + - software copyright (c) 2003, IBM Corporation., + http://www.ibm.com. + + ========================================================================= + The binary distribution package (ie. jars, samples and documentation) of + this product includes software developed by the following: + + - The Apache Software Foundation + - Xerces Java - see LICENSE.txt + - JAXP 1.3 APIs - see LICENSE.txt + - Bytecode Engineering Library - see LICENSE.txt + - Regular Expression - see LICENSE.txt + + - Scott Hudson, Frank Flannery, C. Scott Ananian + - CUP Parser Generator runtime (javacup\runtime) - see LICENSE.txt + + ========================================================================= + The source distribution package (ie. all source and tools required to build + Xalan Java) of this product includes software developed by the following: + + - The Apache Software Foundation + - Xerces Java - see LICENSE.txt + - JAXP 1.3 APIs - see LICENSE.txt + - Bytecode Engineering Library - see LICENSE.txt + - Regular Expression - see LICENSE.txt + - Ant - see LICENSE.txt + - Stylebook doc tool - see LICENSE.txt + + - Elliot Joel Berk and C. Scott Ananian + - Lexical Analyzer Generator (JLex) - see LICENSE.txt + + ========================================================================= + Apache Xerces Java + Copyright 1999-2006 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (http://www.apache.org/). + + Portions of Apache Xerces Java in xercesImpl.jar and xml-apis.jar + were originally based on the following: + - software copyright (c) 1999, IBM Corporation., http://www.ibm.com. + - software copyright (c) 1999, Sun Microsystems., http://www.sun.com. + - voluntary contributions made by Paul Eng on behalf of the + Apache Software Foundation that were originally developed at iClick, Inc., + software copyright (c) 1999. + + ========================================================================= + Apache xml-commons xml-apis (redistribution of xml-apis.jar) + + Apache XML Commons + Copyright 2001-2003,2006 The Apache Software Foundation. + + This product includes software developed at + The Apache Software Foundation (http://www.apache.org/). + + Portions of this software were originally based on the following: + - software copyright (c) 1999, IBM Corporation., http://www.ibm.com. + - software copyright (c) 1999, Sun Microsystems., http://www.sun.com. + - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org + diff --git a/odata-openapi/tools/xalan/serializer.jar b/odata-openapi/tools/xalan/serializer.jar new file mode 100644 index 00000000..10c881c1 Binary files /dev/null and b/odata-openapi/tools/xalan/serializer.jar differ diff --git a/odata-openapi/tools/xalan/xalan.jar b/odata-openapi/tools/xalan/xalan.jar new file mode 100644 index 00000000..abdabe33 Binary files /dev/null and b/odata-openapi/tools/xalan/xalan.jar differ diff --git a/sample-data-dictionary.1.7.0.resoscript b/sample-data-dictionary.1.7.0.resoscript new file mode 100644 index 00000000..311321d1 --- /dev/null +++ b/sample-data-dictionary.1.7.0.resoscript @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + ]> + + + + + + + 3.0.0 + + + + + + + + + + + + + authorization_code + + + + client_credentials + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sample-web-api-server.core.1.0.2.resoscript b/sample-web-api-server.core.1.0.2.resoscript new file mode 100644 index 00000000..2af79b6c --- /dev/null +++ b/sample-web-api-server.core.1.0.2.resoscript @@ -0,0 +1,386 @@ + + + + + + + + + + + + + + + + + + + + + ]> + + + + + + + 3.0.0 + + + + + + + + + + + + + authorization_code + + + + client_credentials + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/reso/auth/OAuth2HttpClientFactory.java b/src/main/java/org/reso/auth/OAuth2HttpClientFactory.java index c05ca7fd..777cc7d1 100644 --- a/src/main/java/org/reso/auth/OAuth2HttpClientFactory.java +++ b/src/main/java/org/reso/auth/OAuth2HttpClientFactory.java @@ -33,10 +33,10 @@ public class OAuth2HttpClientFactory extends AbstractHttpClientFactory { final static String ACCESS_TOKEN = "access_token"; private static final Logger LOG = LogManager.getLogger(OAuth2HttpClientFactory.class); HttpClientConnectionManager connectionManager = null; - private String clientId; - private String clientSecret; - private String tokenUri; - private String scope; + private final String clientId; + private final String clientSecret; + private final String tokenUri; + private final String scope; private String accessToken; private Integer expiresIn; diff --git a/src/main/java/org/reso/certification/codegen/BDDProcessor.java b/src/main/java/org/reso/certification/codegen/BDDProcessor.java new file mode 100644 index 00000000..04473dee --- /dev/null +++ b/src/main/java/org/reso/certification/codegen/BDDProcessor.java @@ -0,0 +1,306 @@ +package org.reso.certification.codegen; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.poi.ss.usermodel.Sheet; +import org.reso.commander.common.Utils; +import org.reso.models.ReferenceStandardLookup; +import org.reso.models.ReferenceStandardField; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.stream.Collectors; + +import static org.reso.certification.containers.WebAPITestContainer.EMPTY_STRING; +import static org.reso.certification.containers.WebAPITestContainer.SINGLE_SPACE; + +public class BDDProcessor extends WorksheetProcessor { + private static final Logger LOG = LogManager.getLogger(BDDProcessor.class); + private static final String + FEATURE_EXTENSION = ".feature", + LOCKED_WITH_ENUMERATIONS_KEY = "Locked with Enumerations"; + private static final int EXAMPLES_PADDING_AMOUNT = 6; + + @Override + public void processResourceSheet(Sheet sheet) { + this.sheet = sheet; + markup.append(BDDTemplates.buildHeaderInfo(sheet.getSheetName(), startTimestamp)); + } + + @Override + void processNumber(ReferenceStandardField row) { + markup.append(BDDTemplates.buildNumberTest(row)); + } + + @Override + void processStringListSingle(ReferenceStandardField row) { + markup.append(BDDTemplates.buildStringListSingleTest(row)); + } + + @Override + void processString(ReferenceStandardField row) { + markup.append(BDDTemplates.buildStringTest(row)); + } + + @Override + void processBoolean(ReferenceStandardField row) { + markup.append(BDDTemplates.buildBooleanTest(row)); + } + + @Override + void processStringListMulti(ReferenceStandardField row) { + markup.append(BDDTemplates.buildStringListMultiTest(row)); + } + + @Override + void processDate(ReferenceStandardField row) { + markup.append(BDDTemplates.buildDateTest(row)); + } + + @Override + void processTimestamp(ReferenceStandardField row) { + markup.append(BDDTemplates.buildTimestampTest(row)); + } + + @Override + void processCollection(ReferenceStandardField row) { + LOG.debug("Collection Type is not supported!"); + } + + @Override + void generateOutput() { + LOG.info("Generating BDD .feature files for the following resources: " + resourceTemplates.keySet().toString()); + resourceTemplates.forEach((resourceName, content) -> { + //put in local directory rather than relative to where the input file is + Utils.createFile(getDirectoryName(), resourceName.toLowerCase() + FEATURE_EXTENSION, content); + }); + } + + public static final class BDDTemplates { + /** + * Contains various templates used for test generation + * TODO: add a formatter rather than using inline spaces + */ + public static String buildHeaderInfo(String resourceName, String generatedTimestamp) { + if (resourceName == null) return null; + if (generatedTimestamp == null) generatedTimestamp = Utils.getTimestamp(new Date()); + return + "# This file was autogenerated on: " + generatedTimestamp + "\n" + + "Feature: " + resourceName + "\n\n" + + " Background:\n" + + " Given a RESOScript or Metadata file are provided\n" + + " When a RESOScript file is provided\n" + + " Then Client Settings and Parameters can be read from the RESOScript\n" + + " And a test container was successfully created from the given RESOScript file\n" + + " And the test container uses an Authorization Code or Client Credentials for authentication\n" + + " And valid metadata were retrieved from the server\n" + + " When a metadata file is provided\n" + + " Then a test container was successfully created from the given metadata file\n" + + " And valid metadata are loaded into the test container\n"; + } + + /** + * Builds a list of tags for the given field + * + * @param field the field whose tags to extract + * @return an array list containing tags on specific fields when they are present + */ + private static ArrayList buildTags(ReferenceStandardField field) { + ArrayList tags = new ArrayList<>(); + + //use this to add each field name tag + //tags.add(field.getStandardName()); + + if (field.getParentResourceName() != null && field.getParentResourceName().length() > 0) { + tags.add(field.getParentResourceName()); + } + + tags.addAll(field.getPropertyTypes()); + tags.addAll(field.getPayloads()); + + return tags; + } + + private static String padLeft(String s, int n) { + String[] padding = new String[n]; + Arrays.fill(padding, " "); + return String.join("", padding) + s; + } + + private static String generateSynonymsMarkup(ReferenceStandardField field) { + String template = EMPTY_STRING; + + if (field.getSynonyms().size() > 0) { + template += " And the following synonyms for \"" + field.getStandardName() + "\" MUST NOT exist in the metadata\n" + + field.getSynonyms().stream().map(synonym -> padLeft("| " + synonym + " |\n", EXAMPLES_PADDING_AMOUNT)).collect(Collectors.joining()); + } + return template; + } + + public static String buildBooleanTest(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + + return "\n " + buildTags(field).stream().map(tag -> "@" + tag).collect(Collectors.joining(SINGLE_SPACE)) + "\n" + + " Scenario: " + field.getStandardName() + "\n" + + " When \"" + field.getStandardName() + "\" exists in the \"" + field.getParentResourceName() + "\" metadata\n" + + " Then \"" + field.getStandardName() + "\" MUST be \"Boolean\" data type\n" + + generateSynonymsMarkup(field); + } + + public static String buildDateTest(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + + return "\n " + buildTags(field).stream().map(tag -> "@" + tag).collect(Collectors.joining(SINGLE_SPACE)) + "\n" + + " Scenario: " + field.getStandardName() + "\n" + + " When \"" + field.getStandardName() + "\" exists in the \"" + field.getParentResourceName() + "\" metadata\n" + + " Then \"" + field.getStandardName() + "\" MUST be \"Date\" data type\n" + + generateSynonymsMarkup(field); + } + + /** + * Provides special routing for Data Dictionary numeric types, which may be Integer or Decimal + * + * @param field the numeric field to build type markup for + * @return a string containing specific markup for the given field + */ + public static String buildNumberTest(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + + if (field.getSuggestedMaxPrecision() != null) return buildDecimalTest(field); + else return buildIntegerTest(field); + } + + public static String buildDecimalTest(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + String template = + "\n " + buildTags(field).stream().map(tag -> "@" + tag).collect(Collectors.joining(SINGLE_SPACE)) + "\n" + + " Scenario: " + field.getStandardName() + "\n" + + " When \"" + field.getStandardName() + "\" exists in the \"" + field.getParentResourceName() + "\" metadata\n" + + " Then \"" + field.getStandardName() + "\" MUST be \"Decimal\" data type\n" + + generateSynonymsMarkup(field); + + //TODO Length is actually scale for Decimal fields by the DD! :/ + if (field.getSuggestedMaxLength() != null) + template += + " And \"" + field.getStandardName() + "\" precision SHOULD be equal to the RESO Suggested Max Precision of " + + field.getSuggestedMaxLength() + "\n"; + + //TODO Precision is actually Scale for Decimal fields by the DD! :/ + if (field.getSuggestedMaxPrecision() != null) + template += + " And \"" + field.getStandardName() + "\" scale SHOULD be equal to the RESO Suggested Max Scale of " + + field.getSuggestedMaxPrecision() + "\n"; + + return template; + } + + public static String buildIntegerTest(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + + return "\n " + buildTags(field).stream().map(tag -> "@" + tag).collect(Collectors.joining(SINGLE_SPACE)) + "\n" + + " Scenario: " + field.getStandardName() + "\n" + + " When \"" + field.getStandardName() + "\" exists in the \"" + field.getParentResourceName() + "\" metadata\n" + + " Then \"" + field.getStandardName() + "\" MUST be \"Integer\" data type\n" + + generateSynonymsMarkup(field); + } + + private static String buildStandardEnumerationMarkup(String lookupName) { + if (standardEnumerationsMap.containsKey(lookupName)) { + StringBuilder markup = new StringBuilder(); + + for (ReferenceStandardLookup lookup : standardEnumerationsMap.get(lookupName)) { + markup + .append(padLeft("| ", EXAMPLES_PADDING_AMOUNT)) + .append(lookup.getLookupValue()).append(" | ") + .append(lookup.getLookupDisplayName()).append(" |\n"); + } + if (markup.length() > 0) markup.insert(0, padLeft("| lookupValue | lookupDisplayName |\n", EXAMPLES_PADDING_AMOUNT)); + return markup.toString(); + } + + LOG.info("No enumerations found for lookupName: " + lookupName); + return EMPTY_STRING; + } + + public static String buildStringListMultiTest(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + + final String enumMarkup = buildStandardEnumerationMarkup(field.getLookupStandardName()); + + String template = + "\n " + buildTags(field).stream().map(tag -> "@" + tag).collect(Collectors.joining(SINGLE_SPACE)) + "\n" + + " Scenario: " + field.getStandardName() + "\n" + + " When \"" + field.getStandardName() + "\" exists in the \"" + field.getParentResourceName() + "\" metadata\n" + + " Then \"" + field.getStandardName() + "\" MUST be \"Multiple Enumeration\" data type\n" + + generateSynonymsMarkup(field); + + if (enumMarkup.length() > 0) { + if (field.getLookupStatus().contentEquals(LOCKED_WITH_ENUMERATIONS_KEY)) { + template += + " And \"" + field.getStandardName() + "\" MUST contain at least one of the following standard lookups\n" + enumMarkup + + " And \"" + field.getStandardName() + "\" MUST contain only standard enumerations\n"; + } else { + template += + " And \"" + field.getStandardName() + "\" MAY contain any of the following standard lookups\n" + enumMarkup + + " But \"" + field.getStandardName() + "\" MUST NOT contain any similar lookups\n"; + } + } + + return template; + } + + public static String buildStringListSingleTest(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + + final String enumMarkup = buildStandardEnumerationMarkup(field.getLookupStandardName()); + + String template = + "\n " + buildTags(field).stream().map(tag -> "@" + tag).collect(Collectors.joining(SINGLE_SPACE)) + "\n" + + " Scenario: " + field.getStandardName() + "\n" + + " When \"" + field.getStandardName() + "\" exists in the \"" + field.getParentResourceName() + "\" metadata\n" + + " Then \"" + field.getStandardName() + "\" MUST be \"Single Enumeration\" data type\n" + + generateSynonymsMarkup(field); + + if (enumMarkup.length() > 0) { + if (field.getLookupStatus().contentEquals(LOCKED_WITH_ENUMERATIONS_KEY)) { + template += + " And \"" + field.getStandardName() + "\" MUST contain at least one of the following standard lookups\n" + enumMarkup + + " And \"" + field.getStandardName() + "\" MUST contain only standard enumerations\n"; + } else { + template += + " And \"" + field.getStandardName() + "\" MAY contain any of the following standard lookups\n" + enumMarkup + + " But \"" + field.getStandardName() + "\" MUST NOT contain any similar lookups\n"; + } + } + + return template; + } + + public static String buildStringTest(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + String template = + "\n " + buildTags(field).stream().map(tag -> "@" + tag).collect(Collectors.joining(SINGLE_SPACE)) + "\n" + + " Scenario: " + field.getStandardName() + "\n" + + " When \"" + field.getStandardName() + "\" exists in the \"" + field.getParentResourceName() + "\" metadata\n" + + " Then \"" + field.getStandardName() + "\" MUST be \"String\" data type\n" + + generateSynonymsMarkup(field); + + if (field.getSuggestedMaxLength() != null) + template += + " And \"" + field.getStandardName() + "\" length SHOULD be equal to the RESO Suggested Max Length of " + field.getSuggestedMaxLength() + "\n"; + + return template; + } + + public static String buildTimestampTest(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + + return "\n " + buildTags(field).stream().map(tag -> "@" + tag).collect(Collectors.joining(SINGLE_SPACE)) + "\n" + + " Scenario: " + field.getStandardName() + "\n" + + " When \"" + field.getStandardName() + "\" exists in the \"" + field.getParentResourceName() + "\" metadata\n" + + " Then \"" + field.getStandardName() + "\" MUST be \"Timestamp\" data type\n" + + generateSynonymsMarkup(field); + } + } +} diff --git a/src/main/java/org/reso/certification/codegen/DataDictionaryCodeGenerator.java b/src/main/java/org/reso/certification/codegen/DataDictionaryCodeGenerator.java new file mode 100644 index 00000000..89cda59a --- /dev/null +++ b/src/main/java/org/reso/certification/codegen/DataDictionaryCodeGenerator.java @@ -0,0 +1,70 @@ +package org.reso.certification.codegen; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.reso.commander.common.DataDictionaryMetadata; + +import static org.reso.certification.codegen.WorksheetProcessor.buildWellKnownStandardFieldHeaderMap; +import static org.reso.certification.stepdefs.DataDictionary.REFERENCE_WORKSHEET; + +public class DataDictionaryCodeGenerator { + private static final Logger LOG = LogManager.getLogger(DataDictionaryCodeGenerator.class); + WorksheetProcessor processor = null; + Workbook workbook = null; + + /** + * Instantiates a new DataDictionary generator with the given worksheet processor + * @param processor the worksheet processor to use to generate the data dictionary + * @throws Exception an exception if the Data Dictionary processor is null + */ + public DataDictionaryCodeGenerator(WorksheetProcessor processor) throws Exception { + if (processor == null) throw new Exception("Data Dictionary processor cannot be null!"); + this.processor = processor; + processor.setReferenceResource(REFERENCE_WORKSHEET); + workbook = processor.getReferenceWorkbook(); + processor.buildEnumerationMap(); + } + + /** + * Generates Data Dictionary references for local workbook instance using the configured WorksheetProcessor + */ + public void processWorksheets() { + Sheet currentWorksheet, standardResourcesWorksheet; + int sheetIndex, rowIndex; + final int ROW_HEADER_INDEX = 0, FIRST_ROW_INDEX = 1; + final String STANDARD_RELATIONSHIPS_WORKSHEET = "Standard Relationships"; + + try { + standardResourcesWorksheet = workbook.getSheet(STANDARD_RELATIONSHIPS_WORKSHEET); + assert standardResourcesWorksheet != null; + + processor.buildStandardRelationships(standardResourcesWorksheet); + + + //workbook consists of many sheets, process only the ones that have the name of a well-known resource + for (sheetIndex = ROW_HEADER_INDEX; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) { + currentWorksheet = workbook.getSheetAt(sheetIndex); + + if (DataDictionaryMetadata.v1_7.WELL_KNOWN_RESOURCES.contains(currentWorksheet.getSheetName()) && currentWorksheet.getPhysicalNumberOfRows() > 1) { + processor.beforeResourceSheetProcessed(currentWorksheet); + + processor.wellKnownStandardFieldHeaderMap = buildWellKnownStandardFieldHeaderMap(currentWorksheet); + processor.processResourceSheet(currentWorksheet); + + //starts at row 1 to skip header row + for (rowIndex = FIRST_ROW_INDEX; rowIndex < currentWorksheet.getPhysicalNumberOfRows(); rowIndex++) { + if (currentWorksheet.getRow(rowIndex) != null) { + processor.processResourceRow(currentWorksheet.getRow(rowIndex)); + } + } + processor.afterResourceSheetProcessed(currentWorksheet); + } + } + processor.generateOutput(); + } catch (Exception ex) { + LOG.info(ex); + } + } +} diff --git a/src/main/java/org/reso/certification/codegen/EDMXProcessor.java b/src/main/java/org/reso/certification/codegen/EDMXProcessor.java new file mode 100644 index 00000000..7c67d65b --- /dev/null +++ b/src/main/java/org/reso/certification/codegen/EDMXProcessor.java @@ -0,0 +1,424 @@ +package org.reso.certification.codegen; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.poi.ss.usermodel.Sheet; +import org.reso.commander.common.Utils; +import org.reso.models.ReferenceStandardLookup; +import org.reso.models.ReferenceStandardField; +import org.reso.models.ReferenceStandardRelationship; +import org.xml.sax.InputSource; +import org.xml.sax.helpers.DefaultHandler; + +import javax.xml.parsers.SAXParserFactory; +import java.io.StringReader; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.reso.certification.stepdefs.DataDictionary.REFERENCE_WORKSHEET; +import static org.reso.commander.common.DataDictionaryMetadata.v1_7.WELL_KNOWN_KEYS.*; +import static org.reso.commander.common.Utils.wrapColumns; + +public class EDMXProcessor extends WorksheetProcessor { + private static final Logger LOG = LogManager.getLogger(EDMXProcessor.class); + final static String EMPTY_STRING = ""; + final static String RESO_NAMESPACE = "org.reso.metadata"; + + String openEntityTypeTag = null, closeEntityTypeTag = null, keyMarkup = null; + + final static String openingDataServicesTag = + "\n" + + "\n" + + "\n" + + " \n"; + + final static String closingDataServicesTag = + " \n" + + "\n"; + + @Override + public void processResourceSheet(Sheet sheet) { + this.sheet = sheet; + openEntityTypeTag = "\n \n"; + closeEntityTypeTag = " \n"; + } + + //TODO: add KeyNumeric handler + private String getKeyMarkup(String resourceName) { + if (resourceName == null) return null; + + String targetKeyName = null; + switch(resourceName) { + case PROPERTY: targetKeyName = "ListingKey"; break; + case MEMBER: targetKeyName = "MemberKey"; break; + case OFFICE: targetKeyName = "OfficeKey"; break; + case CONTACTS: + case CONTACT_LISTING_NOTES: targetKeyName = "ContactKey"; break; + case CONTACT_LISTINGS: targetKeyName = "ContactListingsKey"; break; + case HISTORY_TRANSACTIONAL: targetKeyName = "HistoryTransactionalKey"; break; + case INTERNET_TRACKING: targetKeyName = "EventKey"; break; + case MEDIA: targetKeyName = "MediaKey"; break; + case OPEN_HOUSE: targetKeyName = "OpenHouseKey"; break; + case OUID: targetKeyName = "OrganizationUniqueIdKey"; break; + case PROSPECTING: targetKeyName = "ProspectingKey"; break; + case QUEUE: targetKeyName = "QueueTransactionKey"; break; + case RULES: targetKeyName = "RuleKey"; break; + case SAVED_SEARCH: targetKeyName = "SavedSearchKey"; break; + case SHOWING: targetKeyName = "ShowingKey"; break; + case TEAMS: targetKeyName = "TeamKey"; break; + case TEAM_MEMBERS: targetKeyName = "TeamMemberKey"; break; + case OTHER_PHONE: targetKeyName = "OtherPhoneKey"; break; + case PROPERTY_GREEN_VERIFICATION: targetKeyName = "GreenBuildingVerificationKey"; break; + case PROPERTY_POWER_PRODUCTION: targetKeyName = "PowerProductionKey"; break; + case PROPERTY_ROOMS: targetKeyName = "RoomKey"; break; + case PROPERTY_UNIT_TYPES: targetKeyName = "UnitTypeKey"; break; + case SOCIAL_MEDIA: targetKeyName = "SocialMediaKey"; break; + } + + return targetKeyName != null ? + " \n" + + " \n" + + " \n" : null; + } + + @Override + public void afterResourceSheetProcessed(Sheet sheet) { + assert sheet != null && sheet.getSheetName() != null; + String resourceName = sheet.getSheetName(); + + String templateContent = + openEntityTypeTag + + getKeyMarkup(resourceName) + + markup.toString() + + buildNavigationPropertyMarkup(resourceName) + + closeEntityTypeTag; + + resourceTemplates.put(resourceName, templateContent); + resetMarkupBuffer(); + } + + @Override + void processNumber(ReferenceStandardField field) { + String content = EDMXTemplates.buildNumberMember(field); + if (content == null || content.length() <= 0) return; + markup.append(EDMXTemplates.buildComments(field)); + markup.append(content); + } + + @Override + void processStringListSingle(ReferenceStandardField field) { + String content = EDMXTemplates.buildEnumTypeSingleMember(field); + if (content == null || content.length() <= 0) return; + markup.append(EDMXTemplates.buildComments(field)); + markup.append(content); + } + + @Override + void processString(ReferenceStandardField field) { + String content = EDMXTemplates.buildStringMember(field); + if (content == null || content.length() <= 0) return; + markup.append(EDMXTemplates.buildComments(field)); + markup.append(content); + } + + @Override + void processBoolean(ReferenceStandardField field) { + String content = EDMXTemplates.buildBooleanMember(field); + if (content == null || content.length() <= 0) return; + markup.append(EDMXTemplates.buildComments(field)); + markup.append(content); + } + + @Override + void processStringListMulti(ReferenceStandardField field) { + String content = EDMXTemplates.buildEnumTypeMultiMember(field); + if (content == null || content.length() <= 0) return; + markup.append(EDMXTemplates.buildComments(field)); + markup.append(content); + } + + @Override + void processDate(ReferenceStandardField field) { + String content = EDMXTemplates.buildDateMember(field); + if (content == null || content.length() <= 0) return; + markup.append(EDMXTemplates.buildComments(field)); + markup.append(content); + } + + @Override + void processTimestamp(ReferenceStandardField field) { + String content = EDMXTemplates.buildDateTimeWithOffsetMember(field); + if (content == null || content.length() <= 0) return; + markup.append(EDMXTemplates.buildComments(field)); + markup.append(content); + } + + @Override + void processCollection(ReferenceStandardField field) { + LOG.debug("Collection Type is not supported at this time!"); + } + + @Override + void generateOutput() { + + final String output = + openingDataServicesTag + + buildEntityTypeMarkup() + + buildEnumTypeMarkup() + + closingDataServicesTag; + + try { + //LOG.info("\nOutput is:\n" + output); + + //check the document that was created - will throw exceptions if that document doesn't contain valid XML + SAXParserFactory.newInstance().newSAXParser().parse(new InputSource(new StringReader(output)), new DefaultHandler()); + + //write content of the string to the same directory as the source file + Utils.createFile(getDirectoryName(), getReferenceResource().replace(".xlsx", ".edmx"), output); + } catch (Exception ex) { + LOG.error(ex); + } + } + private String buildEntityContainerMarkup() { + StringBuilder content = new StringBuilder(); + content.append(" \n"); + resourceTemplates.forEach((resourceName, templateContent) -> + content + .append(" \n")); + content.append(" \n"); + return content.toString(); + } + + private String buildEntityTypeMarkup() { + StringBuilder content = new StringBuilder(); + content.append(" \n"); + + //iterate through each of the found resources and generate their edm:EntityType content content + resourceTemplates.forEach((resourceName, templateContent) -> { + content.append(templateContent); + }); + + //nest entity container in main namespace + content.append(buildEntityContainerMarkup()); + + content.append(" \n"); + return content.toString(); + } + + private String buildEnumTypeMarkup() { + //enumeration markup keyed by enumeration standard name + Map markupMap = new LinkedHashMap<>(); + + //add opening tag for enums namespace + StringBuilder content = + new StringBuilder("\n "); + + standardFieldsMap.forEach((resourceName, standardFieldMap) -> { + standardFieldMap.forEach((standardName, referenceStandardField) -> { + if (referenceStandardField.isSingleEnumeration()) { + markupMap.putIfAbsent(referenceStandardField.getLookupStandardName(), buildSingleEnumTypeMarkup(referenceStandardField.getLookupStandardName())); + } + + if (referenceStandardField.isMultipleEnumeration()) { + markupMap.putIfAbsent(referenceStandardField.getLookupStandardName(), buildMultipleEnumTypeMarkup(referenceStandardField.getLookupStandardName())); + } + }); + }); + + markupMap.forEach((lookupStandardName, markup) -> content.append(markup)); + + //closing tag for enums schema definition + content.append("\n \n"); + return content.toString(); + } + + private String buildNavigationPropertyMarkup(String resourceName) { + StringBuilder content = new StringBuilder(); + List referenceStandardRelationships = + this.getStandardRelationships().stream().filter(referenceStandardRelationship + -> referenceStandardRelationship.getTargetResource().contentEquals(resourceName)).collect(Collectors.toList()); + for (ReferenceStandardRelationship referenceStandardRelationship : referenceStandardRelationships) { + //LOG.info(referenceStandardRelationship); + + if (referenceStandardRelationship.getTargetResourceKey() != null) { + content.append("\n "); + } else { + content.append("\n "); + } + } + + if (content.length() > 0) content.append("\n"); + + return content.toString(); + } + + /* + + + + + + */ + private String buildSingleEnumTypeMarkup(String lookupStandardName) { + StringBuilder content = new StringBuilder(); + if (getEnumerations().get(lookupStandardName) != null) { + content.append("\n"); + content.append(" "); + + //iterate through each of the lookup values and generate their edm:EnumType content + getEnumerations().get(lookupStandardName).forEach(referenceStandardLookup -> { + content + .append(" ").append(EDMXTemplates.buildComments(referenceStandardLookup)) + .append(" \n"); + }); + + content.append(" \n"); + } else { + content + .append("\n") + .append(" \n") + .append(" \n") + .append(" \n") + .append(" \n"); + } + return content.toString(); + } + + /* + + + + + + */ + private String buildMultipleEnumTypeMarkup(String lookupStandardName) { + StringBuilder content = new StringBuilder(); + + if (getEnumerations().get(lookupStandardName) != null) { + content.append("\n"); + content.append(" "); + + //iterate through each of the lookup values and generate their edm:EnumType content + getEnumerations().get(lookupStandardName).forEach(referenceStandardLookup -> { + content + .append(" ").append(EDMXTemplates.buildComments(referenceStandardLookup)) + .append(" \n"); + }); + + content.append(" \n"); + } else { + content + .append("\n") + .append(" \n") + .append(" \n") + .append(" \n") + .append(" \n"); + } + return content.toString(); + } + + + public static final class EDMXTemplates { + + public static String buildBooleanMember(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + return " \n"; + } + + public static String buildDateMember(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + return " \n"; + } + + public static String buildNumberMember(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + + if (field.getSuggestedMaxPrecision() != null) return buildDecimalMember(field); + else return buildIntegerMember(field); + } + + public static String buildDecimalMember(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + String template = " \n"; + } + + public static String buildEnumTypeSingleMember(ReferenceStandardField field) { + if (field == null || field.getLookup() == null) return EMPTY_STRING; + if (!field.getLookup().toLowerCase().contains("lookups")) return EMPTY_STRING; + + String lookupName = field.getLookup().replace("Lookups", "").trim(); + return " \n"; + } + + public static String buildEnumTypeMultiMember(ReferenceStandardField field) { + if (field == null || field.getLookup() == null) return EMPTY_STRING; + if (!field.getLookup().toLowerCase().contains("lookups")) return EMPTY_STRING; + return " \n"; + } + + public static String buildStringMember(ReferenceStandardField field) { + if (field == null) return EMPTY_STRING; + String template = " 0 ? + "\n \n"; + } + + public static String buildComments(ReferenceStandardLookup referenceStandardLookup) { + if (referenceStandardLookup == null || referenceStandardLookup.getDefinition() == null || referenceStandardLookup.getDefinition().length() == 0) return EMPTY_STRING; + + //break every COLUMN_WIDTH characters only at word boundaries + return (referenceStandardLookup.getWikiPageUrl() != null && referenceStandardLookup.getWikiPageUrl().length() > 0 ? "\n \n"; + } + } +} \ No newline at end of file diff --git a/src/main/java/org/reso/certification/codegen/WorksheetProcessor.java b/src/main/java/org/reso/certification/codegen/WorksheetProcessor.java new file mode 100644 index 00000000..d8b39339 --- /dev/null +++ b/src/main/java/org/reso/certification/codegen/WorksheetProcessor.java @@ -0,0 +1,443 @@ +package org.reso.certification.codegen; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.poi.openxml4j.opc.OPCPackage; +import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.reso.commander.common.Utils; +import org.reso.models.ReferenceStandardLookup; +import org.reso.models.ReferenceStandardField; +import org.reso.models.ReferenceStandardRelationship; + +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +import static org.junit.Assert.assertTrue; +import static org.reso.certification.codegen.WorksheetProcessor.WELL_KNOWN_DATA_TYPES.*; +import static org.reso.certification.codegen.WorksheetProcessor.WELL_KNOWN_FIELD_HEADERS.COLLECTION; +import static org.reso.certification.codegen.WorksheetProcessor.WELL_KNOWN_FIELD_HEADERS.STANDARD_NAME; +import static org.reso.certification.stepdefs.DataDictionary.REFERENCE_WORKSHEET; +import static org.reso.commander.common.ErrorMsg.getDefaultErrorMessage; + +public abstract class WorksheetProcessor { + + static final Map resourceTemplates = new LinkedHashMap<>(); + static final Map> standardEnumerationsMap = new LinkedHashMap<>(); + static final Map> standardFieldsMap = new LinkedHashMap<>(new LinkedHashMap<>()); + private static final Logger LOG = LogManager.getLogger(WorksheetProcessor.class); + String referenceResource = null; + StringBuffer markup; + Sheet sheet; + String startTimestamp; + + Map wellKnownStandardFieldHeaderMap = new LinkedHashMap<>(); + Map wellKnownStandardEnumerationHeaderMap = new LinkedHashMap<>(); + + private final List referenceStandardRelationships = new ArrayList<>(); + + static final int + TARGET_RESOURCE = 0, + TARGET_RESOURCE_KEY = 1, + TARGET_STANDARD_NAME = 2, + CARDINALITY = 3, + SOURCE_RESOURCE = 4, + SOURCE_RESOURCE_KEY = 5; + + public WorksheetProcessor() { + startTimestamp = Utils.getTimestamp(); + markup = new StringBuffer(); + } + + public static Map buildWellKnownStandardFieldHeaderMap(Sheet sheet) { + Map headerMap = new LinkedHashMap<>(); + sheet.getRow(0).cellIterator().forEachRemaining(cell -> + headerMap.put(cell.getStringCellValue(), cell.getColumnIndex())); + return headerMap; + } + + public Integer getWellKnownStandardFieldIndex(String wellKnownStandardFieldKey) { + return wellKnownStandardFieldHeaderMap.get(wellKnownStandardFieldKey); + } + + public Integer getWellKnownStandardEnumerationIndex(String wellKnownStandardEnumerationKey) { + return wellKnownStandardEnumerationHeaderMap.get(wellKnownStandardEnumerationKey); + } + + public void buildWellKnownStandardEnumerationHeaderMap(Sheet sheet) { + wellKnownStandardEnumerationHeaderMap = new LinkedHashMap<>(); + sheet.getRow(0).cellIterator().forEachRemaining(cell -> + wellKnownStandardEnumerationHeaderMap.put(cell.getStringCellValue(), cell.getColumnIndex())); + } + + public static Integer getIntegerValue(Integer index, Row row, Integer defaultValue) { + if (index == null || !(index >= 0)) return defaultValue; + Integer value; + DataFormatter formatter = new DataFormatter(); + try { + value = Integer.parseInt(formatter.formatCellValue(row.getCell(index))); + } catch (Exception ex) { + value = defaultValue; + } + return value; + } + + public List getStandardRelationships() { + return this.referenceStandardRelationships; + } + + public static Integer getIntegerValue(Integer index, Row row) { + return getIntegerValue(index, row, null); + } + + public static String getStringValue(Integer index, Row row, String defaultValue) { + if (index == null || !(index >= 0)) return defaultValue; + String value; + DataFormatter formatter = new DataFormatter(); + try { + value = formatter.formatCellValue(row.getCell(index)); + } catch (Exception ex) { + value = defaultValue; + } + return value; + } + + public static String getStringValue(Integer index, Row row) { + return getStringValue(index, row, null); + } + + public static Boolean getBooleanValue(Integer index, Row row, Boolean defaultValue) { + if (index == null || !(index >= 0)) return defaultValue; + final String BOOLEAN_VALUE = "yes"; + + Boolean value = false; + String cellValue; + DataFormatter formatter = new DataFormatter(); + try { + cellValue = formatter.formatCellValue(row.getCell(index)); + if (cellValue.toLowerCase().contains(BOOLEAN_VALUE)) { + value = true; + } + } catch (Exception ex) { + value = defaultValue; + } + return value; + } + + public static Boolean getBooleanValue(Integer index, Row row) { + return getBooleanValue(index, row, false); + } + + public static List getArrayValue(Integer index, Row row, List defaultValue) { + if (index == null || !(index >= 0)) return defaultValue; + DataFormatter formatter = new DataFormatter(); + String cellValue; + List value = new ArrayList<>(); + try { + cellValue = formatter.formatCellValue(row.getCell(index)); + if (cellValue != null && cellValue.length() > 0) { + //LOG.info("Cell index is: " + index + ", cell value is: " + cellValue); + value = Arrays.stream(cellValue + .replace(" ", "").split(",")) + .map(String::trim) + .filter(item -> item.length() > 0) + .collect(Collectors.toList()); + } + } catch (Exception ex) { + value = defaultValue; + } + return value; + } + + public static List getArrayValue(Integer index, Row row) { + return getArrayValue(index, row, new ArrayList<>()); + } + + public ReferenceStandardRelationship deserializeStandardRelationshipRow(Row row) { + ReferenceStandardRelationship referenceStandardRelationship = null; + + try { + referenceStandardRelationship = ReferenceStandardRelationship.Builder.build( + row.getCell(TARGET_RESOURCE).getStringCellValue(), + row.getCell(TARGET_RESOURCE_KEY, Row.CREATE_NULL_AS_BLANK).getStringCellValue(), + row.getCell(TARGET_STANDARD_NAME).getStringCellValue(), + ReferenceStandardRelationship.Cardinality.stream().filter(cardinality -> + cardinality.getRelationshipType().contentEquals( + row.getCell(CARDINALITY).getStringCellValue())).findFirst().orElseThrow(Exception::new), + row.getCell(SOURCE_RESOURCE).getStringCellValue(), + row.getCell(SOURCE_RESOURCE_KEY).getStringCellValue() + ); + } catch (Exception ex) { + LOG.error(ex); + } + return referenceStandardRelationship; + } + + public ReferenceStandardField deserializeStandardFieldRow(Row row) { + return new ReferenceStandardField.Builder() + .setStandardName(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.STANDARD_NAME), row)) + .setDisplayName(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.DISPLAY_NAME), row)) + .setDefinition(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.DEFINITION), row)) + .setGroups(getArrayValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.GROUPS), row)) + .setSimpleDataType(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.SIMPLE_DATA_TYPE), row)) + .setSuggestedMaxLength(getIntegerValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.SUGGESTED_MAX_LENGTH), row)) + .setSynonyms(getArrayValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.SYNONYM), row)) + .setElementStatus(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.ELEMENT_STATUS), row)) + .setBedes(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.BEDES), row)) + .setCertificationLevel(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.CERTIFICATION_LEVEL), row)) + .setRecordId(getIntegerValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.RECORD_ID), row)) + .setLookupStatus(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.LOOKUP_STATUS), row)) + .setLookup(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.LOOKUP), row)) + .setCollection(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.COLLECTION), row)) + .setSuggestedMaxPrecision(getIntegerValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.SUGGESTED_MAX_PRECISION), row)) + .setRepeatingElement(getBooleanValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.REPEATING_ELEMENT), row)) + .setPropertyTypes(getArrayValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.PROPERTY_TYPES), row)) + .setPayloads(getArrayValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.PAYLOADS), row)) + .setSpanishStandardName(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.SPANISH_STANDARD_NAME), row)) + .setStatusChangeDate(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.STATUS_CHANGE_DATE), row)) + .setRevisedDate(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.REVISED_DATE), row)) + .setAddedInVersion(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.ADDED_IN_VERSION), row)) + .setWikiPageTitle(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.WIKI_PAGE_TITLE), row)) + .setWikiPageURL(getStringValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.WIKI_PAGE_URL), row)) + .setWikiPageID(getIntegerValue(getWellKnownStandardFieldIndex(WELL_KNOWN_FIELD_HEADERS.WIKI_PAGE_ID), row)) + .build(); + } + + public ReferenceStandardLookup deserializeStandardEnumerationRow(Row row) { + return new ReferenceStandardLookup.Builder() + .setLookupField(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.LOOKUP_FIELD), row)) + .setLookupValue(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.LOOKUP_VALUE), row)) + .setLookupDisplayName(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.LOOKUP_DISPLAY_NAME), row)) + .setDefinition(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.DEFINITION), row)) + .setLookupDisplayNameSynonyms(getArrayValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.LOOKUP_DISPLAY_NAME_SYNONYMS), row)) + .setBedes(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.BEDES), row)) + .setReferences(getArrayValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.REFERENCES), row)) + .setElementStatus(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.ELEMENT_STATUS), row)) + .setLookupId(getIntegerValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.LOOKUP_ID), row)) + .setLookupFieldId(getIntegerValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.LOOKUP_FIELD_ID), row)) + .setSpanishLookupField(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.SPANISH_LOOKUP_FIELD), row)) + .setSpanishLookupValue(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.SPANISH_LOOKUP_VALUE), row)) + .setStatusChangeDate(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.STATUS_CHANGE_DATE), row)) + .setRevisedDate(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.REVISED_DATE), row)) + .setAddedInVersion(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.ADDED_IN_VERSION), row)) + .setWikiPageTitle(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.WIKI_PAGE_TITLE), row)) + .setWikiPageUrl(getStringValue(getWellKnownStandardEnumerationIndex(WELL_KNOWN_ENUMERATION_HEADERS.WIKI_PAGE_URL), row)) + .build(); + + } + + abstract void processResourceSheet(Sheet sheet); + + abstract void processNumber(ReferenceStandardField field); + + abstract void processStringListSingle(ReferenceStandardField field); + + abstract void processString(ReferenceStandardField field); + + abstract void processBoolean(ReferenceStandardField field); + + abstract void processStringListMulti(ReferenceStandardField field); + + abstract void processDate(ReferenceStandardField field); + + abstract void processTimestamp(ReferenceStandardField field); + + abstract void processCollection(ReferenceStandardField field); + + abstract void generateOutput(); + + public void processResourceRow(Row row) { + assertTrue(getDefaultErrorMessage("sheet name was null but was expected to contain a resource name!"), + sheet != null && sheet.getSheetName() != null); + + //if there's no field in the standard name column, don't process the row + if (row.getCell(getWellKnownStandardFieldIndex(STANDARD_NAME)) == null) return; + + ReferenceStandardField referenceStandardField = deserializeStandardFieldRow(row); + referenceStandardField.setParentResourceName(sheet.getSheetName()); + + //add empty top-level resource name map + standardFieldsMap.putIfAbsent(sheet.getSheetName(), new LinkedHashMap<>()); + + //add a resource, standard field + standardFieldsMap.get(sheet.getSheetName()).put(referenceStandardField.getStandardName(), referenceStandardField); + + //now that row has been processed, extract field type and assemble the template + switch (referenceStandardField.getSimpleDataType()) { + case NUMBER: + processNumber(referenceStandardField); + break; + case STRING_LIST_SINGLE: + processStringListSingle(referenceStandardField); + break; + case STRING: + processString(referenceStandardField); + break; + case BOOLEAN: + processBoolean(referenceStandardField); + break; + case STRING_LIST_MULTI: + processStringListMulti(referenceStandardField); + break; + case DATE: + processDate(referenceStandardField); + break; + case TIMESTAMP: + processTimestamp(referenceStandardField); + break; + case COLLECTION: + processCollection(referenceStandardField); + break; + default: + if (referenceStandardField.getSimpleDataType() != null) + LOG.debug("Data type: " + referenceStandardField.getSimpleDataType() + " is not supported!"); + } + } + + String getDirectoryName() { + return startTimestamp + "-" + REFERENCE_WORKSHEET.toLowerCase().substring(0, REFERENCE_WORKSHEET.lastIndexOf(".")); + } + + public String getReferenceResource() { + return referenceResource; + } + + public void setReferenceResource(String referenceResource) { + this.referenceResource = referenceResource; + } + + public Workbook getReferenceWorkbook() { + try { + return new XSSFWorkbook(OPCPackage.open(Objects.requireNonNull( + this.getClass().getClassLoader().getResource(getReferenceResource())).getFile())); + } catch (Exception ex) { + LOG.error(getDefaultErrorMessage(ex)); + } + return null; + } + + public void beforeResourceSheetProcessed(Sheet sheet) { + //Add any before events here + } + + public void afterResourceSheetProcessed(Sheet sheet) { + resourceTemplates.put(sheet.getSheetName(), markup.toString()); + resetMarkupBuffer(); + } + + public void buildEnumerationMap() { + final String ENUMERATION_TAB_NAME = "Lookup Fields and Values"; + final int LOOKUP_NAME_INDEX = 0, STANDARD_NAME_INDEX = 1; + + DataFormatter formatter = new DataFormatter(); + Sheet sheet = getReferenceWorkbook().getSheet(ENUMERATION_TAB_NAME); + buildWellKnownStandardEnumerationHeaderMap(sheet); + + AtomicReference standardEnumeration = new AtomicReference<>(); + + sheet.rowIterator().forEachRemaining(row -> { + if (row.getRowNum() > 0) { + standardEnumeration.set(deserializeStandardEnumerationRow(row)); + + if (!standardEnumerationsMap.containsKey(standardEnumeration.get().getLookupField())) { + standardEnumerationsMap.put(standardEnumeration.get().getLookupField(), new LinkedHashSet<>()); + } + standardEnumerationsMap.get(standardEnumeration.get().getLookupField()).add(standardEnumeration.get()); + } + }); + //enumerations.forEach((key, items) -> LOG.info("key: " + key + " , items: " + items.toString())); + } + + public void buildStandardRelationships(Sheet worksheet) { + int FIRST_ROW_INDEX = 1; + Row currentRow; + for(int rowIndex = FIRST_ROW_INDEX; rowIndex < worksheet.getPhysicalNumberOfRows(); rowIndex++) { + currentRow = worksheet.getRow(rowIndex); + if (currentRow.getCell(TARGET_RESOURCE, Row.CREATE_NULL_AS_BLANK).getStringCellValue().length() > 0 + && !currentRow.getCell(TARGET_RESOURCE_KEY, Row.CREATE_NULL_AS_BLANK).getStringCellValue().toLowerCase().contains("keynumeric") + && !currentRow.getCell(SOURCE_RESOURCE_KEY, Row.CREATE_NULL_AS_BLANK).getStringCellValue().toLowerCase().contains("keynumeric")) { + referenceStandardRelationships.add(deserializeStandardRelationshipRow(currentRow)); + } + } + } + + public Map> getEnumerations() { + return standardEnumerationsMap; + } + + public void resetMarkupBuffer() { + markup = new StringBuffer(); + } + + public static final class WELL_KNOWN_DATA_TYPES { + public static final String + NUMBER = "Number", + STRING_LIST_SINGLE = "String List, Single", + STRING_LIST_MULTI = "String List, Multi", + STRING = "String", + BOOLEAN = "Boolean", + DATE = "Date", + TIMESTAMP = "Timestamp", + COLLECTION = "Collection"; + } + + /** + * Must match what's in the DD spreadsheet EXACTLY + */ + public static final class WELL_KNOWN_FIELD_HEADERS { + public static final String + STANDARD_NAME = "StandardName", + DISPLAY_NAME = "DisplayName", + DEFINITION = "Definition", + GROUPS = "Groups", + SIMPLE_DATA_TYPE = "SimpleDataType", + SUGGESTED_MAX_LENGTH = "SugMaxLength", + SYNONYM = "Synonym", + ELEMENT_STATUS = "ElementStatus", + BEDES = "BEDES", + CERTIFICATION_LEVEL = "CertificationLevel", + RECORD_ID = "RecordID", + LOOKUP_STATUS = "LookupStatus", + LOOKUP = "Lookup", + COLLECTION = "Collection", + SUGGESTED_MAX_PRECISION = "SugMaxPrecision", + REPEATING_ELEMENT = "RepeatingElement", + PROPERTY_TYPES = "PropertyTypes", + PAYLOADS = "Payloads", + SPANISH_STANDARD_NAME = "SpanishStandardName", + STATUS_CHANGE_DATE = "StatusChangeDate", + REVISED_DATE = "RevisedDate", + ADDED_IN_VERSION = "AddedInVersion", + WIKI_PAGE_TITLE = "Wiki Page Title", + WIKI_PAGE_URL = "Wiki Page URL", + WIKI_PAGE_ID = "Wiki Page ID"; + } + + /** + * Must match what's in the DD spreadsheet EXACTLY + */ + public static final class WELL_KNOWN_ENUMERATION_HEADERS { + public static final String + LOOKUP_FIELD = "LookupField", + LOOKUP_VALUE = "LookupValue", + LOOKUP_DISPLAY_NAME = "LookupDisplayName", + DEFINITION = "Definition", + LOOKUP_DISPLAY_NAME_SYNONYMS = "LookupDisplayNameSynonyms", + BEDES = "BEDES", + REFERENCES = "References", + ELEMENT_STATUS = "ElementStatus", + LOOKUP_ID = "LookupID", + LOOKUP_FIELD_ID = "LookupFieldID", + SPANISH_LOOKUP_FIELD = "SpanishLookupField", + SPANISH_LOOKUP_VALUE = "SpanishLookupValue", + STATUS_CHANGE_DATE = "StatusChangeDate", + REVISED_DATE = "RevisedDate", + ADDED_IN_VERSION = "AddedInVersion", + WIKI_PAGE_TITLE = "Wiki Page Title", + WIKI_PAGE_URL = "Wiki Page URL"; + } +} diff --git a/src/main/java/org/reso/commander/certfication/containers/TestContainer.java b/src/main/java/org/reso/certification/containers/TestContainer.java similarity index 60% rename from src/main/java/org/reso/commander/certfication/containers/TestContainer.java rename to src/main/java/org/reso/certification/containers/TestContainer.java index ce262446..b53e02e1 100644 --- a/src/main/java/org/reso/commander/certfication/containers/TestContainer.java +++ b/src/main/java/org/reso/certification/containers/TestContainer.java @@ -1,4 +1,4 @@ -package org.reso.commander.certfication.containers; +package org.reso.certification.containers; public interface TestContainer { @@ -9,7 +9,7 @@ public interface TestContainer { /** - * Used to reset the state of the given TestContainer. + * Used to resetMarkupBuffer the state of the given TestContainer. */ void resetState(); } diff --git a/src/main/java/org/reso/commander/certfication/containers/WebAPITestContainer.java b/src/main/java/org/reso/certification/containers/WebAPITestContainer.java similarity index 74% rename from src/main/java/org/reso/commander/certfication/containers/WebAPITestContainer.java rename to src/main/java/org/reso/certification/containers/WebAPITestContainer.java index b3a61613..bd4b6a51 100644 --- a/src/main/java/org/reso/commander/certfication/containers/WebAPITestContainer.java +++ b/src/main/java/org/reso/certification/containers/WebAPITestContainer.java @@ -1,7 +1,8 @@ -package org.reso.commander.certfication.containers; +package org.reso.certification.containers; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.inject.Singleton; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; import com.networknt.schema.ValidationMessage; @@ -18,9 +19,11 @@ import org.apache.olingo.client.api.edm.xml.XMLMetadata; import org.apache.olingo.client.api.uri.QueryOption; import org.apache.olingo.commons.api.edm.Edm; +import org.apache.olingo.commons.api.edm.provider.CsdlEnumType; import org.apache.olingo.commons.api.edm.provider.CsdlProperty; import org.apache.olingo.commons.api.format.ContentType; import org.reso.commander.Commander; +import org.reso.commander.common.DataDictionaryMetadata; import org.reso.commander.common.TestUtils; import org.reso.models.ClientSettings; import org.reso.models.Parameters; @@ -43,11 +46,13 @@ /** * Encapsulates Commander Requests and Responses during runtime */ +@Singleton public final class WebAPITestContainer implements TestContainer { public static final String FIELD_SEPARATOR = ","; public static final String EMPTY_STRING = ""; public static final String SINGLE_SPACE = " "; public static final String DOLLAR_SIGN = "$"; + public static final String DATA_SYSTEM_JSON_4_SCHEMA = "datasystem.schema.4.json"; public static final String PRETTY_FIELD_SEPARATOR = FIELD_SEPARATOR + SINGLE_SPACE; private static final Logger LOG = LogManager.getLogger(WebAPITestContainer.class); @@ -64,20 +69,22 @@ public final class WebAPITestContainer implements TestContainer { private final AtomicReference redirectUri = new AtomicReference<>(); private final AtomicReference scope = new AtomicReference<>(); private final AtomicReference pathToRESOScript = new AtomicReference<>(); - private final AtomicReference> fieldMap = new AtomicReference<>(); + private final AtomicReference pathToMetadata = new AtomicReference<>(); private final AtomicReference xmlResponseData = new AtomicReference<>(); private final AtomicBoolean showResponses = new AtomicBoolean(false); + private final AtomicBoolean shouldValidateMetadata = new AtomicBoolean(true); + private final AtomicBoolean isInitialized = new AtomicBoolean(false); // Metadata and DataSystem state variables private final AtomicBoolean isValidXMLMetadata = new AtomicBoolean(false); private final AtomicBoolean isValidEdm = new AtomicBoolean(false); private final AtomicBoolean isValidXMLMetadataXML = new AtomicBoolean(false); private final AtomicBoolean haveMetadataBeenRequested = new AtomicBoolean(false); - private final AtomicBoolean haveEdmMetadataBeenRetrieved = new AtomicBoolean(false); private final AtomicBoolean isDataSystemValid = new AtomicBoolean(false); private final AtomicReference> schemaValidationErrors = new AtomicReference<>(); + private final AtomicBoolean isUsingMetadataFile = new AtomicBoolean(false); - // request instance variables - these get reset with every request + // request instance variables - these get resetMarkupBuffer with every request private final AtomicReference selectList = new AtomicReference<>(); private final AtomicReference oDataRawResponse = new AtomicReference<>(); private final AtomicReference request = new AtomicReference<>(); @@ -94,27 +101,56 @@ public final class WebAPITestContainer implements TestContainer { private final AtomicReference> clientEntitySetResponse = new AtomicReference<>(); private final AtomicReference clientEntitySet = new AtomicReference<>(); - public Map getFieldMap() throws Exception { - if (fieldMap.get() == null) { - fieldMap.set(new HashMap<>()); + //singleton variables + private static final AtomicReference>> fieldMap = new AtomicReference<>(); + private static final AtomicReference>> enumMap = new AtomicReference<>(); - LOG.info("Building Field Map...this may take a moment depending on size of metadata and connection speed."); - //build a map of all of the discovered fields on the server for the given resource by field name - //this can also be used to look up type information - TestUtils.findEntityTypesForEntityTypeName(getEdm(), getXMLMetadata(), getSettings().getParameters().getValue(Parameters.WELL_KNOWN.RESOURCE_NAME)) - .forEach(csdlProperty -> fieldMap.get().put(csdlProperty.getName(), csdlProperty)); - assertTrue("ERROR: No field were found in the server's metadata!", fieldMap.get().size() > 0); - LOG.info("Metadata Field Map created!"); + /** + * Initializes the container with a singleton instance of the RESO Commander + */ + public void initialize() { + if (getIsInitialized()) return; + Commander.Builder builder = new Commander.Builder().useEdmEnabledClient(true); + + if (!isUsingMetadataFile.get()) { + setServiceRoot(getSettings().getClientSettings().get(ClientSettings.SERVICE_ROOT)); + + //TODO: add base64 un-encode when applicable + setBearerToken(getSettings().getClientSettings().get(ClientSettings.BEARER_TOKEN)); + if (getAuthToken() != null && getAuthToken().length() > 0) { + LOG.info("Bearer token loaded... first 4 characters: " + getAuthToken().substring(0, 4)); + } + + setClientId(getSettings().getClientSettings().get(ClientSettings.CLIENT_IDENTIFICATION)); + setClientSecret(getSettings().getClientSettings().get(ClientSettings.CLIENT_SECRET)); + setAuthorizationUri(getSettings().getClientSettings().get(ClientSettings.AUTHORIZATION_URI)); + setTokenUri(getSettings().getClientSettings().get(ClientSettings.TOKEN_URI)); + setRedirectUri(getSettings().getClientSettings().get(ClientSettings.REDIRECT_URI)); + setScope(getSettings().getClientSettings().get(ClientSettings.CLIENT_SCOPE)); + + LOG.info("Service root is: " + getServiceRoot()); + + builder + .clientId(getClientId()) + .clientSecret(getClientSecret()) + .tokenUri(getTokenUri()) + .scope(getScope()) + .serviceRoot(getServiceRoot()) + .bearerToken(getAuthToken()); } - return fieldMap.get(); - } - public String getXMLResponseData() { - return xmlResponseData.get(); + //singleton Commander instance + setCommander(builder.build()); + LOG.debug("Commander created!"); + isInitialized.set(true); } - public void setXMLResponseData(String xmlResponseData) { - this.xmlResponseData.set(xmlResponseData); + public void initialize(String pathToMetadataFile) { + if (getIsInitialized()) return; + assertNotNull(getDefaultErrorMessage("pathToMetadataFile MUST not be null!", pathToMetadataFile)); + this.setPathToMetadata(pathToMetadataFile); + this.isUsingMetadataFile.set(pathToMetadataFile != null); + this.initialize(); } /** @@ -138,53 +174,80 @@ public void resetState() { testAppliesToServerODataHeaderVersion.set(false); } - public void initialize() { - setServiceRoot(getSettings().getClientSettings().get(ClientSettings.SERVICE_ROOT)); + /** + * Gets the field map from the well-known resource name passed in the given RESOScript + * + * @return a map of all Csdl properties keyed by field name. + */ + public Map> getFieldMap() { + if (fieldMap.get() == null) buildFieldMap(); + return fieldMap.get(); + } - //TODO: add base64 un-encode when applicable - setBearerToken(getSettings().getClientSettings().get(ClientSettings.BEARER_TOKEN)); - if (getAuthToken() != null && getAuthToken().length() > 0) { - LOG.info("Bearer token loaded... first 4 characters: " + getAuthToken().substring(0, 4)); - } + /** + * Returns a field map for the given Entity Type (Resource) name + * + * @param entityTypeName the name of the entity type to search for + * @return a field map, possibly empty, containing any fields that were found for the given resource + */ + public Map getFieldMap(String entityTypeName) { + return getFieldMap().get(entityTypeName); + } - setClientId(getSettings().getClientSettings().get(ClientSettings.CLIENT_IDENTIFICATION)); - setClientSecret(getSettings().getClientSettings().get(ClientSettings.CLIENT_SECRET)); - setAuthorizationUri(getSettings().getClientSettings().get(ClientSettings.AUTHORIZATION_URI)); - setTokenUri(getSettings().getClientSettings().get(ClientSettings.TOKEN_URI)); - setRedirectUri(getSettings().getClientSettings().get(ClientSettings.REDIRECT_URI)); - setScope(getSettings().getClientSettings().get(ClientSettings.CLIENT_SCOPE)); + /** + * Creates a metadata field map for the given resource name and each set of fields found for that resource, if present + */ + private void buildFieldMap() { + try { + if (fieldMap.get() == null) fieldMap.set(new LinkedHashMap<>()); - LOG.info("Service root is: " + getServiceRoot()); + LOG.debug("Building Field Map..."); - if (getCommander() == null) { - //create Commander instance - setCommander(new Commander.Builder() - .clientId(getClientId()) - .clientSecret(getClientSecret()) - .tokenUri(getTokenUri()) - .scope(getScope()) - .serviceRoot(getServiceRoot()) - .bearerToken(getAuthToken()) - .useEdmEnabledClient(shouldUseEdmClient()) - .build()); + assertNotNull(getDefaultErrorMessage("no XML Metadata found in the container!"), fetchXMLMetadata()); + assertNotNull(getDefaultErrorMessage("no Entity Data Model (edm) found in the container!"), getEdm()); + + //build a map of all of the discovered fields on the server for the given resource by field name + //TODO: add multiple Data Dictionary version support + DataDictionaryMetadata.v1_7.WELL_KNOWN_RESOURCES.forEach(resourceName -> { + List csdlProperties = null; + try { + csdlProperties = TestUtils.findEntityTypesForEntityTypeName(getEdm(), fetchXMLMetadata(), resourceName); + } catch (Exception e) { + LOG.error(e); + } + + if (csdlProperties != null) { + LOG.debug("Found '" + resourceName + "' resource"); + csdlProperties.forEach(csdlProperty -> { + if (!fieldMap.get().containsKey(resourceName)) fieldMap.get().put(resourceName, new LinkedHashMap<>()); + fieldMap.get().get(resourceName).put(csdlProperty.getName(), csdlProperty); + }); + } + }); + assertTrue("ERROR: No field were found in the server's metadata!", fieldMap.get().size() > 0); + LOG.debug("Metadata Field Map created!"); + + } catch (Exception ex) { + LOG.error(getDefaultErrorMessage(ex)); } } /** - * If the server is using a DataSystem endpoint that's not rooted at the Service Root, the EDM client - * will fail the request. Cannot use the Edm client for those that do. + * Gets XML Response data from the container * - * @return true if the Olingo Edm client should be used, false otherwise. + * @return the XML response data in the container */ - private boolean shouldUseEdmClient() { - /* Cannot use EdmEnabled client with a server that has a DataSystem endpoint that's not rooted at the Service Root */ - String dataSystemEndpoint = getSettings().getParameters().getValue(Parameters.WELL_KNOWN.DATASYSTEM_ENDPOINT), - serviceRoot = getSettings().getClientSettings().get(ClientSettings.SERVICE_ROOT); - - assertNotNull("ERROR: " + Parameters.WELL_KNOWN.DATASYSTEM_ENDPOINT + " cannot be null!", dataSystemEndpoint); - assertNotNull("ERROR: " + ClientSettings.SERVICE_ROOT + " cannot be null!", serviceRoot); + public String getXMLResponseData() { + return xmlResponseData.get(); + } - return dataSystemEndpoint.startsWith(serviceRoot); + /** + * Sets XML Response data in the container + * + * @param xmlResponseData the response data to set + */ + public void setXMLResponseData(String xmlResponseData) { + this.xmlResponseData.set(xmlResponseData); } /** @@ -211,17 +274,9 @@ public void executePreparedRawGetRequest() throws Exception { * @param fieldName the name of the field to retrieve metadata about * @return the metadata for the given field */ - public CsdlProperty getCsdlForFieldName(String fieldName) throws Exception { - return getFieldMap().get(fieldName); - } - - /** - * Csdl property getter - * - * @return gets the local collection of Csdl Properties - */ - public Collection getCsdlProperties() throws Exception { - return getFieldMap().values(); + public CsdlProperty getCsdlProperty(String resourceName, String fieldName) { + return getFieldMap() != null && getFieldMap().containsKey(resourceName) + ? getFieldMap().get(resourceName).get(fieldName) : null; } /** @@ -268,10 +323,10 @@ public String getExpandField() { /** * Gets server metadata in Edm format. * - * @return + * @return the Entity Data Model contained in the container * @implNote the data in this item are cached in the test container once fetched */ - public Edm getEdm() throws Exception { + public Edm getEdm() { if (edm.get() == null) { assertNotNull(getDefaultErrorMessage("no XML response data found, cannot return Edm!"), xmlResponseData.get()); edm.set(Commander.deserializeEdm(xmlResponseData.get(), getCommander().getClient())); @@ -294,14 +349,14 @@ public void setEdm(Edm edm) { * @return XMLMetadata representation of the server metadata. * @implNote the data in this item are cached in the test container once fetched */ - public XMLMetadata getXMLMetadata() throws Exception { + public XMLMetadata fetchXMLMetadata() throws Exception { if (xmlMetadata.get() == null) { try { String requestUri = Settings.resolveParameters(getSettings().getRequest(Request.WELL_KNOWN.METADATA_ENDPOINT), getSettings()).getUrl(); assertNotNull(getDefaultErrorMessage("Metadata request URI was null! Please check your RESOScript."), requestUri); ODataRawRequest request = getCommander().getClient().getRetrieveRequestFactory().getRawRequest(URI.create(requestUri)); - request.setFormat(ContentType.JSON.toContentTypeString()); + request.setFormat(ContentType.APPLICATION_XML.toContentTypeString()); LOG.info("Requesting XML Metadata from service root at: " + getServiceRoot()); ODataRawResponse response = request.execute(); @@ -319,66 +374,150 @@ public XMLMetadata getXMLMetadata() throws Exception { return xmlMetadata.get(); } + public XMLMetadata getXMLMetadata() { + return xmlMetadata.get(); + } + + /** + * XML Metadata setter + * + * @param xmlMetadata the XML metadata to set + */ public void setXMLMetadata(XMLMetadata xmlMetadata) { this.xmlMetadata.set(xmlMetadata); } + /** + * Commander getter + * + * @return the local Commander instance + */ public Commander getCommander() { return commander.get(); } + /** + * Commander setter + * + * @param commander the Commander to set + */ public void setCommander(Commander commander) { this.commander.set(commander); } + /** + * OData response getter + * + * @return the local OData response + */ public ODataRawResponse getODataRawResponse() { return oDataRawResponse.get(); } + /** + * OData response setter + * + * @param oDataRawResponse the OData response to set + */ public void setODataRawResponse(ODataRawResponse oDataRawResponse) { this.oDataRawResponse.set(oDataRawResponse); } + /** + * Request getter + * + * @return the local Request instance + */ public Request getRequest() { return request.get(); } + /** + * Request setter + * + * @param request the Request to set + */ public void setRequest(Request request) { this.request.set(request); } + /** + * Request setter + * + * @param requestId the Request Id of the Request + */ public void setRequest(String requestId) { setRequest(getSettings().getRequest(requestId)); } + /** + * Request URI getter + * + * @return the URI of the current request + */ public URI getRequestUri() { return requestUri.get(); } + /** + * Request URI setter + * + * @param requestUri the URI of the current request + */ public void setRequestUri(URI requestUri) { this.requestUri.set(requestUri); } + /** + * Response code getter + * + * @return the Response code of the last request + */ public Integer getResponseCode() { return responseCode.get(); } + /** + * Response code setter + * + * @param responseCode the response code to set + */ public void setResponseCode(Integer responseCode) { this.responseCode.set(responseCode); } + /** + * Response Data getter + * + * @return the local response data + */ public String getResponseData() { return responseData.get(); } + /** + * Response code setter + * + * @param responseData the response data to set + */ public void setResponseData(String responseData) { this.responseData.set(responseData); } + /** + * Initial response data getter + * + * @return the local response data + */ public String getInitialResponseData() { return initialResponseData.get(); } + /** + * Initial response data setter + * + * @param initialResponseData the response data to set + */ public void setInitialResponseData(String initialResponseData) { this.initialResponseData.set(initialResponseData); } @@ -415,14 +554,6 @@ public void setServerODataHeaderVersion(String serverODataHeaderVersion) { this.serverODataHeaderVersion.set(serverODataHeaderVersion); } - public Boolean getTestAppliesToServerODataHeaderVersion() { - return testAppliesToServerODataHeaderVersion.get(); - } - - public void setTestAppliesToServerODataHeaderVersion(Boolean testAppliesToServerODataHeaderVersion) { - this.testAppliesToServerODataHeaderVersion.set(testAppliesToServerODataHeaderVersion); - } - public ODataEntitySetRequest getClientEntitySetRequest() { return clientEntitySetRequest.get(); } @@ -479,10 +610,6 @@ public void setClientSecret(String clientSecret) { this.clientSecret.set(clientSecret); } - public String getAuthorizationUri() { - return authorizationUri.get(); - } - public void setAuthorizationUri(String authorizationUri) { this.authorizationUri.set(authorizationUri); } @@ -495,10 +622,6 @@ public void setTokenUri(String tokenUri) { this.tokenUri.set(tokenUri); } - public String getRedirectUri() { - return redirectUri.get(); - } - public void setRedirectUri(String redirectUri) { this.redirectUri.set(redirectUri); } @@ -511,6 +634,14 @@ public void setScope(String scope) { this.scope.set(scope); } + public String getPathToMetadata() { + return pathToMetadata.get(); + } + + public void setPathToMetadata(String path) { + this.pathToMetadata.set(path); + } + public String getPathToRESOScript() { return pathToRESOScript.get(); } @@ -551,7 +682,6 @@ private void processODataRequestException(ODataServerErrorException exception) { } - public boolean getIsValidXMLMetadata() { return isValidXMLMetadata.get(); } @@ -616,7 +746,7 @@ public WebAPITestContainer validateDataSystem() { try { JsonSchemaFactory factory = JsonSchemaFactory.getInstance(); InputStream is = Thread.currentThread().getContextClassLoader() - .getResourceAsStream("datasystem.schema.4.json"); + .getResourceAsStream(DATA_SYSTEM_JSON_4_SCHEMA); JsonSchema schema = factory.getSchema(is); ObjectMapper mapper = new ObjectMapper(); @@ -640,7 +770,7 @@ public WebAPITestContainer validateDataSystem() { return this; } - public WebAPITestContainer validateEdm() { + public void validateEdm() { try { assertNotNull("ERROR: No Entity Data Model (Edm) Exists!", getEdm()); boolean isValid = getCommander().validateMetadata(getEdm()); @@ -649,20 +779,18 @@ public WebAPITestContainer validateEdm() { } catch (Exception ex) { fail("ERROR: could not validate Edm Metadata!\n" + ex.toString()); } - return this; } - public WebAPITestContainer validateXMLMetadata() { + public void validateXMLMetadata() { try { //note that this will lazy-load XML metadata when it's not present - assertNotNull(getDefaultErrorMessage("XML metadata was not found!"), getXMLMetadata()); - boolean isValid = getCommander().validateMetadata(getXMLMetadata()); + assertNotNull(getDefaultErrorMessage("XML metadata was not found!"), fetchXMLMetadata()); + boolean isValid = getCommander().validateMetadata(fetchXMLMetadata()); setIsValidXMLMetadata(isValid); LOG.info("XML Metadata is " + (isValid ? "valid" : "invalid") + "!"); } catch (Exception ex) { fail("ERROR: could not validate XML Metadata!\n" + ex.toString()); } - return this; } public WebAPITestContainer validateXMLMetadataXML() { @@ -701,8 +829,24 @@ public Set getSchemaValidationErrors() { return schemaValidationErrors.get(); } + public Boolean getShouldValidateMetadata() { + return shouldValidateMetadata.get(); + } + + public void setShouldValidateMetadata(boolean value) { + shouldValidateMetadata.set(value); + } + + public boolean getIsInitialized() { + return isInitialized.get(); + } + + public void setIsInitialized(boolean value) { + isInitialized.set(value); + } + public static final class ODATA_QUERY_PARAMS { - private static String format = DOLLAR_SIGN + "%s"; + private static final String format = DOLLAR_SIGN + "%s"; //TODO: add additional items as needed, and see if there's a lib for this in Olingo public static final String diff --git a/src/main/java/org/reso/certification/features/data-dictionary/boolean.feature b/src/main/java/org/reso/certification/features/data-dictionary/boolean.feature deleted file mode 100644 index 989fc877..00000000 --- a/src/main/java/org/reso/certification/features/data-dictionary/boolean.feature +++ /dev/null @@ -1,235 +0,0 @@ -Feature: Boolean Testing - - Background: - Given an XML Metadata file was provided - And the given file exists - And the file contains valid XML - And the file could be read by the Commander - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @AdditionalParcelsYN @DD1.5_AdditionalParcelsYN @DD1.6_AdditionalParcelsYN - Scenario: AdditionalParcelsYN - Given "AdditionalParcelsYN" exists in the metadata - And "AdditionalParcelsYN" values are not null - Then "AdditionalParcelsYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @AssociationYN @IDX_Payload @DD1.5_AssociationYN @DD1.6_AssociationYN - Scenario: AssociationYN - Given "AssociationYN" exists in the metadata - And "AssociationYN" values are not null - Then "AssociationYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @AttachedGarageYN @IDX_Payload @DD1.5_AttachedGarageYN @DD1.6_AttachedGarageYN - Scenario: AttachedGarageYN - Given "AttachedGarageYN" exists in the metadata - And "AttachedGarageYN" values are not null - Then "AttachedGarageYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @CarportYN @DD1.5_CarportYN @DD1.6_CarportYN - Scenario: CarportYN - Given "CarportYN" exists in the metadata - And "CarportYN" values are not null - Then "CarportYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @Cooling @IDX_Payload @DD1.5_CoolingYN @DD1.6_CoolingYN - Scenario: CoolingYN - Given "CoolingYN" exists in the metadata - And "CoolingYN" values are not null - Then "CoolingYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @CropsIncludedYN @DD1.5_CropsIncludedYN @DD1.6_CropsIncludedYN - Scenario: CropsIncludedYN - Given "CropsIncludedYN" exists in the metadata - And "CropsIncludedYN" values are not null - Then "CropsIncludedYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @DualVariableCompensationYN @DD1.5_DualVariableCompensationYN @DD1.6_DualVariableCompensationYN - Scenario: DualVariableCompensationYN - Given "DualVariableCompensationYN" exists in the metadata - And "DualVariableCompensationYN" values are not null - Then "DualVariableCompensationYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @ElectricOnPropertyYN @DD1.5_ElectricOnPropertyYN @DD1.6_ElectricOnPropertyYN - Scenario: ElectricOnPropertyYN - Given "ElectricOnPropertyYN" exists in the metadata - And "ElectricOnPropertyYN" values are not null - Then "ElectricOnPropertyYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @FarmCreditServiceInclYN @DD1.5_FarmCreditServiceInclYN @DD1.6_FarmCreditServiceInclYN - Scenario: FarmCreditServiceInclYN - Given "FarmCreditServiceInclYN" exists in the metadata - And "FarmCreditServiceInclYN" values are not null - Then "FarmCreditServiceInclYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @FireplaceYN @IDX_Payload @DD1.5_FireplaceYN @DD1.6_FireplaceYN - Scenario: FireplaceYN - Given "FireplaceYN" exists in the metadata - And "FireplaceYN" values are not null - Then "FireplaceYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @GarageYN @DD1.5_GarageYN @DD1.6_GarageYN - Scenario: GarageYN - Given "GarageYN" exists in the metadata - And "GarageYN" values are not null - Then "GarageYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @GrazingPermitsBlmYN @DD1.5_GrazingPermitsBlmYN @DD1.6_GrazingPermitsBlmYN - Scenario: GrazingPermitsBlmYN - Given "GrazingPermitsBlmYN" exists in the metadata - And "GrazingPermitsBlmYN" values are not null - Then "GrazingPermitsBlmYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @GrazingPermitsForestServiceYN @DD1.5_GrazingPermitsForestServiceYN @DD1.6_GrazingPermitsForestServiceYN - Scenario: GrazingPermitsForestServiceYN - Given "GrazingPermitsForestServiceYN" exists in the metadata - And "GrazingPermitsForestServiceYN" values are not null - Then "GrazingPermitsForestServiceYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @GrazingPermitsPrivateYN @DD1.5_GrazingPermitsPrivateYN @DD1.6_GrazingPermitsPrivateYN - Scenario: GrazingPermitsPrivateYN - Given "GrazingPermitsPrivateYN" exists in the metadata - And "GrazingPermitsPrivateYN" values are not null - Then "GrazingPermitsPrivateYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @HabitableResidenceYN @DD1.5_HabitableResidenceYN @DD1.6_HabitableResidenceYN - Scenario: HabitableResidenceYN - Given "HabitableResidenceYN" exists in the metadata - And "HabitableResidenceYN" values are not null - Then "HabitableResidenceYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @Heating @IDX_Payload @DD1.5_HeatingYN @DD1.6_HeatingYN - Scenario: HeatingYN - Given "HeatingYN" exists in the metadata - And "HeatingYN" values are not null - Then "HeatingYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @HomeWarrantyYN @DD1.5_HomeWarrantyYN @DD1.6_HomeWarrantyYN - Scenario: HomeWarrantyYN - Given "HomeWarrantyYN" exists in the metadata - And "HomeWarrantyYN" values are not null - Then "HomeWarrantyYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @HorseYN @DD1.5_HorseYN @DD1.6_HorseYN - Scenario: HorseYN - Given "HorseYN" exists in the metadata - And "HorseYN" values are not null - Then "HorseYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @InternetAddressDisplayYN @IDX_Payload @DD1.5_InternetAddressDisplayYN @DD1.6_InternetAddressDisplayYN @testing - Scenario: InternetAddressDisplayYN - Given "InternetAddressDisplayYN" exists in the metadata - And "InternetAddressDisplayYN" values are not null - Then "InternetAddressDisplayYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @InternetAutomatedValuationDisplayYN @IDX_Payload @DD1.5_InternetAutomatedValuationDisplayYN @DD1.6_InternetAutomatedValuationDisplayYN - Scenario: InternetAutomatedValuationDisplayYN - Given "InternetAutomatedValuationDisplayYN" exists in the metadata - And "InternetAutomatedValuationDisplayYN" values are not null - Then "InternetAutomatedValuationDisplayYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @InternetConsumerCommentYN @IDX_Payload @DD1.5_InternetConsumerCommentYN @DD1.6_InternetConsumerCommentYN - Scenario: InternetConsumerCommentYN - Given "InternetConsumerCommentYN" exists in the metadata - And "InternetConsumerCommentYN" values are not null - Then "InternetConsumerCommentYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @InternetEntireListingDisplayYN @IDX_Payload @DD1.5_InternetEntireListingDisplayYN @DD1.6_InternetEntireListingDisplayYN - Scenario: InternetEntireListingDisplayYN - Given "InternetEntireListingDisplayYN" exists in the metadata - And "InternetEntireListingDisplayYN" values are not null - Then "InternetEntireListingDisplayYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @IrrigationWaterRightsYN @DD1.5_IrrigationWaterRightsYN @DD1.6_IrrigationWaterRightsYN - Scenario: IrrigationWaterRightsYN - Given "IrrigationWaterRightsYN" exists in the metadata - And "IrrigationWaterRightsYN" values are not null - Then "IrrigationWaterRightsYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @LandLeaseYN @DD1.5_LandLeaseYN @DD1.6_LandLeaseYN - Scenario: LandLeaseYN - Given "LandLeaseYN" exists in the metadata - And "LandLeaseYN" values are not null - Then "LandLeaseYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @LeaseAssignableYN @DD1.5_LeaseAssignableYN @DD1.6_LeaseAssignableYN - Scenario: LeaseAssignableYN - Given "LeaseAssignableYN" exists in the metadata - And "LeaseAssignableYN" values are not null - Then "LeaseAssignableYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @LeaseConsideredYN @DD1.5_LeaseConsideredYN @DD1.6_LeaseConsideredYN - Scenario: LeaseConsideredYN - Given "LeaseConsideredYN" exists in the metadata - And "LeaseConsideredYN" values are not null - Then "LeaseConsideredYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @LeaseRenewalOptionYN @DD1.5_LeaseRenewalOptionYN @DD1.6_LeaseRenewalOptionYN - Scenario: LeaseRenewalOptionYN - Given "LeaseRenewalOptionYN" exists in the metadata - And "LeaseRenewalOptionYN" values are not null - Then "LeaseRenewalOptionYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @MobileHomeRemainsYN @DD1.5_MobileHomeRemainsYN @DD1.6_MobileHomeRemainsYN - Scenario: MobileHomeRemainsYN - Given "MobileHomeRemainsYN" exists in the metadata - And "MobileHomeRemainsYN" values are not null - Then "MobileHomeRemainsYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @NewConstructionYN @IDX_Payload @DD1.5_NewConstructionYN @DD1.6_NewConstructionYN - Scenario: NewConstructionYN - Given "NewConstructionYN" exists in the metadata - And "NewConstructionYN" values are not null - Then "NewConstructionYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @OpenParkingYN @DD1.5_OpenParkingYN @DD1.6_OpenParkingYN - Scenario: OpenParkingYN - Given "OpenParkingYN" exists in the metadata - And "OpenParkingYN" values are not null - Then "OpenParkingYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @PoolPrivateYN @IDX_Payload @DD1.5_PoolPrivateYN @DD1.6_PoolPrivateYN - Scenario: PoolPrivateYN - Given "PoolPrivateYN" exists in the metadata - And "PoolPrivateYN" values are not null - Then "PoolPrivateYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @PropertyAttachedYN @IDX_Payload @DD1.5_PropertyAttachedYN @DD1.6_PropertyAttachedYN - Scenario: PropertyAttachedYN - Given "PropertyAttachedYN" exists in the metadata - And "PropertyAttachedYN" values are not null - Then "PropertyAttachedYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @RentControlYN @DD1.5_RentControlYN @DD1.6_RentControlYN - Scenario: RentControlYN - Given "RentControlYN" exists in the metadata - And "RentControlYN" values are not null - Then "RentControlYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @SeniorCommunityYN @IDX_Payload @DD1.5_SeniorCommunityYN @DD1.6_SeniorCommunityYN - Scenario: SeniorCommunityYN - Given "SeniorCommunityYN" exists in the metadata - And "SeniorCommunityYN" values are not null - Then "SeniorCommunityYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @SignOnPropertyYN @DD1.5_SignOnPropertyYN @DD1.6_SignOnPropertyYN - Scenario: SignOnPropertyYN - Given "SignOnPropertyYN" exists in the metadata - And "SignOnPropertyYN" values are not null - Then "SignOnPropertyYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @SpaYN @DD1.5_SpaYN @DD1.6_SpaYN - Scenario: SpaYN - Given "SpaYN" exists in the metadata - And "SpaYN" values are not null - Then "SpaYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @ViewYN @DD1.5_ViewYN @DD1.6_ViewYN - Scenario: ViewYN - Given "ViewYN" exists in the metadata - And "ViewYN" values are not null - Then "ViewYN" should be "Boolean" data type - - @DD1.5_Boolean @DD1.6_Boolean @DD1.5 @DD1.6 @WaterfrontYN @IDX_Payload @DD1.5_WaterfrontYN @DD1.6_WaterfrontYN - Scenario: WaterfrontYN - Given "WaterfrontYN" exists in the metadata - And "WaterfrontYN" values are not null - Then "WaterfrontYN" should be "Boolean" data type diff --git a/src/main/java/org/reso/certification/features/data-dictionary/date.feature b/src/main/java/org/reso/certification/features/data-dictionary/date.feature deleted file mode 100644 index d5f32cb4..00000000 --- a/src/main/java/org/reso/certification/features/data-dictionary/date.feature +++ /dev/null @@ -1,121 +0,0 @@ -Feature: Date Testing - - Background: - Given an XML Metadata file was provided - And the given file exists - And the file contains valid XML - And the file could be read by the Commander - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @AvailabilityDate @DD1.5_AvailabilityDate @DD1.6_AvailabilityDate - Scenario: AvailabilityDate - Given "AvailabilityDate" exists in the metadata - And "AvailabilityDate" values are not null - Then "AvailabilityDate" should be "Date" data type - And "AvailabilityDate" length should be between the bounds in the metadata - And "AvailabilityDate" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @CancellationDate @DD1.5_CancellationDate @DD1.6_CancellationDate - Scenario: CancellationDate - Given "CancellationDate" exists in the metadata - And "CancellationDate" values are not null - Then "CancellationDate" should be "Date" data type - And "CancellationDate" length should be between the bounds in the metadata - And "CancellationDate" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @CloseDate @IDX_Payload @DD1.5_CloseDate @DD1.6_CloseDate @testing - Scenario: CloseDate - Given "CloseDate" exists in the metadata - And "CloseDate" values are not null - Then "CloseDate" should be "Date" data type - And "CloseDate" length should be between the bounds in the metadata - And "CloseDate" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @ContingentDate @DD1.5_ContingentDate @DD1.6_ContingentDate - Scenario: ContingentDate - Given "ContingentDate" exists in the metadata - And "ContingentDate" values are not null - Then "ContingentDate" should be "Date" data type - And "ContingentDate" length should be between the bounds in the metadata - And "ContingentDate" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @ContractStatusChangeDate @DD1.5_ContractStatusChangeDate @DD1.6_ContractStatusChangeDate - Scenario: ContractStatusChangeDate - Given "ContractStatusChangeDate" exists in the metadata - And "ContractStatusChangeDate" values are not null - Then "ContractStatusChangeDate" should be "Date" data type - And "ContractStatusChangeDate" length should be between the bounds in the metadata - And "ContractStatusChangeDate" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @ExpirationDate @DD1.5_ExpirationDate @DD1.6_ExpirationDate - Scenario: ExpirationDate - Given "ExpirationDate" exists in the metadata - And "ExpirationDate" values are not null - Then "ExpirationDate" should be "Date" data type - And "ExpirationDate" length should be between the bounds in the metadata - And "ExpirationDate" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @LandLeaseExpirationDate @DD1.5_LandLeaseExpirationDate @DD1.6_LandLeaseExpirationDate - Scenario: LandLeaseExpirationDate - Given "LandLeaseExpirationDate" exists in the metadata - And "LandLeaseExpirationDate" values are not null - Then "LandLeaseExpirationDate" should be "Date" data type - And "LandLeaseExpirationDate" length should be between the bounds in the metadata - And "LandLeaseExpirationDate" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @LeaseExpiration @DD1.5_LeaseExpiration @DD1.6_LeaseExpiration - Scenario: LeaseExpiration - Given "LeaseExpiration" exists in the metadata - And "LeaseExpiration" values are not null - Then "LeaseExpiration" should be "Date" data type - And "LeaseExpiration" length should be between the bounds in the metadata - And "LeaseExpiration" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @ListingContractDate @IDX_Payload @DD1.5_ListingContractDate @DD1.6_ListingContractDate - Scenario: ListingContractDate - Given "ListingContractDate" exists in the metadata - And "ListingContractDate" values are not null - Then "ListingContractDate" should be "Date" data type - And "ListingContractDate" length should be between the bounds in the metadata - And "ListingContractDate" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @OffMarketDate @DD1.5_OffMarketDate @DD1.6_OffMarketDate - Scenario: OffMarketDate - Given "OffMarketDate" exists in the metadata - And "OffMarketDate" values are not null - Then "OffMarketDate" should be "Date" data type - And "OffMarketDate" length should be between the bounds in the metadata - And "OffMarketDate" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @OnMarketDate @IDX_Payload @DD1.5_OnMarketDate @DD1.6_OnMarketDate - Scenario: OnMarketDate - Given "OnMarketDate" exists in the metadata - And "OnMarketDate" values are not null - Then "OnMarketDate" should be "Date" data type - And "OnMarketDate" length should be between the bounds in the metadata - And "OnMarketDate" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @PurchaseContractDate @DD1.5_PurchaseContractDate @DD1.6_PurchaseContractDate - Scenario: PurchaseContractDate - Given "PurchaseContractDate" exists in the metadata - And "PurchaseContractDate" values are not null - Then "PurchaseContractDate" should be "Date" data type - And "PurchaseContractDate" length should be between the bounds in the metadata - And "PurchaseContractDate" length should be less than or equal to the RESO maxlength of 10 - - - @DD1.5_Date @DD1.6_Date @DD1.5 @DD1.6 @WithdrawnDate @DD1.5_WithdrawnDate @DD1.6_WithdrawnDate - Scenario: WithdrawnDate - Given "WithdrawnDate" exists in the metadata - And "WithdrawnDate" values are not null - Then "WithdrawnDate" should be "Date" data type - And "WithdrawnDate" length should be between the bounds in the metadata - And "WithdrawnDate" length should be less than or equal to the RESO maxlength of 10 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/decimal.feature b/src/main/java/org/reso/certification/features/data-dictionary/decimal.feature deleted file mode 100644 index d3225d92..00000000 --- a/src/main/java/org/reso/certification/features/data-dictionary/decimal.feature +++ /dev/null @@ -1,605 +0,0 @@ -Feature: Decimal Testing - - Background: - Given an XML Metadata file was provided - And the given file exists - And the file contains valid XML - And the file could be read by the Commander - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @AboveGradeFinishedArea @DD1.5_AboveGradeFinishedArea @DD1.6_AboveGradeFinishedArea - Scenario: AboveGradeFinishedArea - Given "AboveGradeFinishedArea" exists in the metadata - And "AboveGradeFinishedArea" values are not null - Then "AboveGradeFinishedArea" should be "Decimal" data type - And "AboveGradeFinishedArea" precision should be between the bounds in the metadata - And "AboveGradeFinishedArea" scale should be between the bounds in the metadata - And "AboveGradeFinishedArea" precision should be less than or equal to the RESO maxlength of 14 - And "AboveGradeFinishedArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @AssociationFee @IDX_Payload @DD1.5_AssociationFee @DD1.6_AssociationFee - Scenario: AssociationFee - Given "AssociationFee" exists in the metadata - And "AssociationFee" values are not null - Then "AssociationFee" should be "Decimal" data type - And "AssociationFee" precision should be between the bounds in the metadata - And "AssociationFee" scale should be between the bounds in the metadata - And "AssociationFee" precision should be less than or equal to the RESO maxlength of 14 - And "AssociationFee" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @AssociationFee2 @DD1.5_AssociationFee2 @DD1.6_AssociationFee2 - Scenario: AssociationFee2 - Given "AssociationFee2" exists in the metadata - And "AssociationFee2" values are not null - Then "AssociationFee2" should be "Decimal" data type - And "AssociationFee2" precision should be between the bounds in the metadata - And "AssociationFee2" scale should be between the bounds in the metadata - And "AssociationFee2" precision should be less than or equal to the RESO maxlength of 14 - And "AssociationFee2" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @BelowGradeFinishedArea @DD1.5_BelowGradeFinishedArea @DD1.6_BelowGradeFinishedArea - Scenario: BelowGradeFinishedArea - Given "BelowGradeFinishedArea" exists in the metadata - And "BelowGradeFinishedArea" values are not null - Then "BelowGradeFinishedArea" should be "Decimal" data type - And "BelowGradeFinishedArea" precision should be between the bounds in the metadata - And "BelowGradeFinishedArea" scale should be between the bounds in the metadata - And "BelowGradeFinishedArea" precision should be less than or equal to the RESO maxlength of 14 - And "BelowGradeFinishedArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @BuildingAreaTotal @DD1.5_BuildingAreaTotal @DD1.6_BuildingAreaTotal - Scenario: BuildingAreaTotal - Given "BuildingAreaTotal" exists in the metadata - And "BuildingAreaTotal" values are not null - Then "BuildingAreaTotal" should be "Decimal" data type - And "BuildingAreaTotal" precision should be between the bounds in the metadata - And "BuildingAreaTotal" scale should be between the bounds in the metadata - And "BuildingAreaTotal" precision should be less than or equal to the RESO maxlength of 14 - And "BuildingAreaTotal" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @CableTvExpense @DD1.5_CableTvExpense @DD1.6_CableTvExpense - Scenario: CableTvExpense - Given "CableTvExpense" exists in the metadata - And "CableTvExpense" values are not null - Then "CableTvExpense" should be "Decimal" data type - And "CableTvExpense" precision should be between the bounds in the metadata - And "CableTvExpense" scale should be between the bounds in the metadata - And "CableTvExpense" precision should be less than or equal to the RESO maxlength of 14 - And "CableTvExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @CapRate @DD1.5_CapRate @DD1.6_CapRate - Scenario: CapRate - Given "CapRate" exists in the metadata - And "CapRate" values are not null - Then "CapRate" should be "Decimal" data type - And "CapRate" precision should be between the bounds in the metadata - And "CapRate" scale should be between the bounds in the metadata - And "CapRate" precision should be less than or equal to the RESO maxlength of 5 - And "CapRate" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @CarportSpaces @IDX_Payload @DD1.5_CarportSpaces @DD1.6_CarportSpaces - Scenario: CarportSpaces - Given "CarportSpaces" exists in the metadata - And "CarportSpaces" values are not null - Then "CarportSpaces" should be "Decimal" data type - And "CarportSpaces" precision should be between the bounds in the metadata - And "CarportSpaces" scale should be between the bounds in the metadata - And "CarportSpaces" precision should be less than or equal to the RESO maxlength of 14 - And "CarportSpaces" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @ClosePrice @IDX_Payload @DD1.5_ClosePrice @DD1.6_ClosePrice - Scenario: ClosePrice - Given "ClosePrice" exists in the metadata - And "ClosePrice" values are not null - Then "ClosePrice" should be "Decimal" data type - And "ClosePrice" precision should be between the bounds in the metadata - And "ClosePrice" scale should be between the bounds in the metadata - And "ClosePrice" precision should be less than or equal to the RESO maxlength of 14 - And "ClosePrice" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @CoveredSpaces @DD1.5_CoveredSpaces @DD1.6_CoveredSpaces - Scenario: CoveredSpaces - Given "CoveredSpaces" exists in the metadata - And "CoveredSpaces" values are not null - Then "CoveredSpaces" should be "Decimal" data type - And "CoveredSpaces" precision should be between the bounds in the metadata - And "CoveredSpaces" scale should be between the bounds in the metadata - And "CoveredSpaces" precision should be less than or equal to the RESO maxlength of 14 - And "CoveredSpaces" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @CultivatedArea @DD1.5_CultivatedArea @DD1.6_CultivatedArea - Scenario: CultivatedArea - Given "CultivatedArea" exists in the metadata - And "CultivatedArea" values are not null - Then "CultivatedArea" should be "Decimal" data type - And "CultivatedArea" precision should be between the bounds in the metadata - And "CultivatedArea" scale should be between the bounds in the metadata - And "CultivatedArea" precision should be less than or equal to the RESO maxlength of 14 - And "CultivatedArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @ElectricExpense @DD1.5_ElectricExpense @DD1.6_ElectricExpense - Scenario: ElectricExpense - Given "ElectricExpense" exists in the metadata - And "ElectricExpense" values are not null - Then "ElectricExpense" should be "Decimal" data type - And "ElectricExpense" precision should be between the bounds in the metadata - And "ElectricExpense" scale should be between the bounds in the metadata - And "ElectricExpense" precision should be less than or equal to the RESO maxlength of 14 - And "ElectricExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @FoundationArea @DD1.5_FoundationArea @DD1.6_FoundationArea - Scenario: FoundationArea - Given "FoundationArea" exists in the metadata - And "FoundationArea" values are not null - Then "FoundationArea" should be "Decimal" data type - And "FoundationArea" precision should be between the bounds in the metadata - And "FoundationArea" scale should be between the bounds in the metadata - And "FoundationArea" precision should be less than or equal to the RESO maxlength of 14 - And "FoundationArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @FuelExpense @DD1.5_FuelExpense @DD1.6_FuelExpense - Scenario: FuelExpense - Given "FuelExpense" exists in the metadata - And "FuelExpense" values are not null - Then "FuelExpense" should be "Decimal" data type - And "FuelExpense" precision should be between the bounds in the metadata - And "FuelExpense" scale should be between the bounds in the metadata - And "FuelExpense" precision should be less than or equal to the RESO maxlength of 14 - And "FuelExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @FurnitureReplacementExpense @DD1.5_FurnitureReplacementExpense @DD1.6_FurnitureReplacementExpense - Scenario: FurnitureReplacementExpense - Given "FurnitureReplacementExpense" exists in the metadata - And "FurnitureReplacementExpense" values are not null - Then "FurnitureReplacementExpense" should be "Decimal" data type - And "FurnitureReplacementExpense" precision should be between the bounds in the metadata - And "FurnitureReplacementExpense" scale should be between the bounds in the metadata - And "FurnitureReplacementExpense" precision should be less than or equal to the RESO maxlength of 14 - And "FurnitureReplacementExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @GarageSpaces @IDX_Payload @DD1.5_GarageSpaces @DD1.6_GarageSpaces - Scenario: GarageSpaces - Given "GarageSpaces" exists in the metadata - And "GarageSpaces" values are not null - Then "GarageSpaces" should be "Decimal" data type - And "GarageSpaces" precision should be between the bounds in the metadata - And "GarageSpaces" scale should be between the bounds in the metadata - And "GarageSpaces" precision should be less than or equal to the RESO maxlength of 14 - And "GarageSpaces" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.5 @GardnerExpense @DD1.5_GardnerExpense - Scenario: GardnerExpense - Given "GardnerExpense" exists in the metadata - And "GardnerExpense" values are not null - Then "GardnerExpense" should be "Decimal" data type - And "GardnerExpense" precision should be between the bounds in the metadata - And "GardnerExpense" scale should be between the bounds in the metadata - And "GardnerExpense" precision should be less than or equal to the RESO maxlength of 14 - And "GardnerExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.6_Decimal @DD1.6 @GardenerExpense @DD1.6_GardenerExpense - Scenario: GardenerExpense - Given "GardenerExpense" exists in the metadata - And "GardenerExpense" values are not null - Then "GardenerExpense" should be "Decimal" data type - And "GardenerExpense" precision should be between the bounds in the metadata - And "GardenerExpense" scale should be between the bounds in the metadata - And "GardenerExpense" precision should be less than or equal to the RESO maxlength of 14 - And "GardenerExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @GrossIncome @DD1.5_GrossIncome @DD1.6_GrossIncome - Scenario: GrossIncome - Given "GrossIncome" exists in the metadata - And "GrossIncome" values are not null - Then "GrossIncome" should be "Decimal" data type - And "GrossIncome" precision should be between the bounds in the metadata - And "GrossIncome" scale should be between the bounds in the metadata - And "GrossIncome" precision should be less than or equal to the RESO maxlength of 14 - And "GrossIncome" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @GrossScheduledIncome @DD1.5_GrossScheduledIncome @DD1.6_GrossScheduledIncome - Scenario: GrossScheduledIncome - Given "GrossScheduledIncome" exists in the metadata - And "GrossScheduledIncome" values are not null - Then "GrossScheduledIncome" should be "Decimal" data type - And "GrossScheduledIncome" precision should be between the bounds in the metadata - And "GrossScheduledIncome" scale should be between the bounds in the metadata - And "GrossScheduledIncome" precision should be less than or equal to the RESO maxlength of 14 - And "GrossScheduledIncome" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @InsuranceExpense @DD1.5_InsuranceExpense @DD1.6_InsuranceExpense - Scenario: InsuranceExpense - Given "InsuranceExpense" exists in the metadata - And "InsuranceExpense" values are not null - Then "InsuranceExpense" should be "Decimal" data type - And "InsuranceExpense" precision should be between the bounds in the metadata - And "InsuranceExpense" scale should be between the bounds in the metadata - And "InsuranceExpense" precision should be less than or equal to the RESO maxlength of 14 - And "InsuranceExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @LandLeaseAmount @DD1.5_LandLeaseAmount @DD1.6_LandLeaseAmount - Scenario: LandLeaseAmount - Given "LandLeaseAmount" exists in the metadata - And "LandLeaseAmount" values are not null - Then "LandLeaseAmount" should be "Decimal" data type - And "LandLeaseAmount" precision should be between the bounds in the metadata - And "LandLeaseAmount" scale should be between the bounds in the metadata - And "LandLeaseAmount" precision should be less than or equal to the RESO maxlength of 14 - And "LandLeaseAmount" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @LeasableArea @DD1.5_LeasableArea @DD1.6_LeasableArea - Scenario: LeasableArea - Given "LeasableArea" exists in the metadata - And "LeasableArea" values are not null - Then "LeasableArea" should be "Decimal" data type - And "LeasableArea" precision should be between the bounds in the metadata - And "LeasableArea" scale should be between the bounds in the metadata - And "LeasableArea" precision should be less than or equal to the RESO maxlength of 14 - And "LeasableArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @LeaseAmount @DD1.5_LeaseAmount @DD1.6_LeaseAmount - Scenario: LeaseAmount - Given "LeaseAmount" exists in the metadata - And "LeaseAmount" values are not null - Then "LeaseAmount" should be "Decimal" data type - And "LeaseAmount" precision should be between the bounds in the metadata - And "LeaseAmount" scale should be between the bounds in the metadata - And "LeaseAmount" precision should be less than or equal to the RESO maxlength of 14 - And "LeaseAmount" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @LicensesExpense @DD1.5_LicensesExpense @DD1.6_LicensesExpense - Scenario: LicensesExpense - Given "LicensesExpense" exists in the metadata - And "LicensesExpense" values are not null - Then "LicensesExpense" should be "Decimal" data type - And "LicensesExpense" precision should be between the bounds in the metadata - And "LicensesExpense" scale should be between the bounds in the metadata - And "LicensesExpense" precision should be less than or equal to the RESO maxlength of 14 - And "LicensesExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @ListPrice @IDX_Payload @DD1.5_ListPrice @DD1.6_ListPrice - Scenario: ListPrice - Given "ListPrice" exists in the metadata - And "ListPrice" values are not null - Then "ListPrice" should be "Decimal" data type - And "ListPrice" precision should be between the bounds in the metadata - And "ListPrice" scale should be between the bounds in the metadata - And "ListPrice" precision should be less than or equal to the RESO maxlength of 14 - And "ListPrice" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @ListPrice @IDX_Payload @DD1.5_ListPriceLow @DD1.6_ListPriceLow - Scenario: ListPriceLow - Given "ListPriceLow" exists in the metadata - And "ListPriceLow" values are not null - Then "ListPriceLow" should be "Decimal" data type - And "ListPriceLow" precision should be between the bounds in the metadata - And "ListPriceLow" scale should be between the bounds in the metadata - And "ListPriceLow" precision should be less than or equal to the RESO maxlength of 14 - And "ListPriceLow" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @LivingArea @IDX_Payload @DD1.5_LivingArea @DD1.6_LivingArea - Scenario: LivingArea - Given "LivingArea" exists in the metadata - And "LivingArea" values are not null - Then "LivingArea" should be "Decimal" data type - And "LivingArea" precision should be between the bounds in the metadata - And "LivingArea" scale should be between the bounds in the metadata - And "LivingArea" precision should be less than or equal to the RESO maxlength of 14 - And "LivingArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @LotSizeSquareFeet @IDX_Payload @DD1.5_LotSizeSquareFeet @DD1.6_LotSizeSquareFeet - Scenario: LotSizeSquareFeet - Given "LotSizeSquareFeet" exists in the metadata - And "LotSizeSquareFeet" values are not null - Then "LotSizeSquareFeet" should be "Decimal" data type - And "LotSizeSquareFeet" precision should be between the bounds in the metadata - And "LotSizeSquareFeet" scale should be between the bounds in the metadata - And "LotSizeSquareFeet" precision should be less than or equal to the RESO maxlength of 14 - And "LotSizeSquareFeet" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @MaintenanceExpense @DD1.5_MaintenanceExpense @DD1.6_MaintenanceExpense - Scenario: MaintenanceExpense - Given "MaintenanceExpense" exists in the metadata - And "MaintenanceExpense" values are not null - Then "MaintenanceExpense" should be "Decimal" data type - And "MaintenanceExpense" precision should be between the bounds in the metadata - And "MaintenanceExpense" scale should be between the bounds in the metadata - And "MaintenanceExpense" precision should be less than or equal to the RESO maxlength of 14 - And "MaintenanceExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @ManagerExpense @DD1.5_ManagerExpense @DD1.6_ManagerExpense - Scenario: ManagerExpense - Given "ManagerExpense" exists in the metadata - And "ManagerExpense" values are not null - Then "ManagerExpense" should be "Decimal" data type - And "ManagerExpense" precision should be between the bounds in the metadata - And "ManagerExpense" scale should be between the bounds in the metadata - And "ManagerExpense" precision should be less than or equal to the RESO maxlength of 14 - And "ManagerExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @NetOperatingIncome @DD1.5_NetOperatingIncome @DD1.6_NetOperatingIncome - Scenario: NetOperatingIncome - Given "NetOperatingIncome" exists in the metadata - And "NetOperatingIncome" values are not null - Then "NetOperatingIncome" should be "Decimal" data type - And "NetOperatingIncome" precision should be between the bounds in the metadata - And "NetOperatingIncome" scale should be between the bounds in the metadata - And "NetOperatingIncome" precision should be less than or equal to the RESO maxlength of 14 - And "NetOperatingIncome" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @NewTaxesExpense @DD1.5_NewTaxesExpense @DD1.6_NewTaxesExpense - Scenario: NewTaxesExpense - Given "NewTaxesExpense" exists in the metadata - And "NewTaxesExpense" values are not null - Then "NewTaxesExpense" should be "Decimal" data type - And "NewTaxesExpense" precision should be between the bounds in the metadata - And "NewTaxesExpense" scale should be between the bounds in the metadata - And "NewTaxesExpense" precision should be less than or equal to the RESO maxlength of 14 - And "NewTaxesExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @OpenParkingSpaces @DD1.5_OpenParkingSpaces @DD1.6_OpenParkingSpaces - Scenario: OpenParkingSpaces - Given "OpenParkingSpaces" exists in the metadata - And "OpenParkingSpaces" values are not null - Then "OpenParkingSpaces" should be "Decimal" data type - And "OpenParkingSpaces" precision should be between the bounds in the metadata - And "OpenParkingSpaces" scale should be between the bounds in the metadata - And "OpenParkingSpaces" precision should be less than or equal to the RESO maxlength of 14 - And "OpenParkingSpaces" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @OperatingExpense @DD1.5_OperatingExpense @DD1.6_OperatingExpense - Scenario: OperatingExpense - Given "OperatingExpense" exists in the metadata - And "OperatingExpense" values are not null - Then "OperatingExpense" should be "Decimal" data type - And "OperatingExpense" precision should be between the bounds in the metadata - And "OperatingExpense" scale should be between the bounds in the metadata - And "OperatingExpense" precision should be less than or equal to the RESO maxlength of 14 - And "OperatingExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @OriginalListPrice @DD1.5_OriginalListPrice @DD1.6_OriginalListPrice @testing - Scenario: OriginalListPrice - Given "OriginalListPrice" exists in the metadata - And "OriginalListPrice" values are not null - Then "OriginalListPrice" should be "Decimal" data type - And "OriginalListPrice" precision should be between the bounds in the metadata - And "OriginalListPrice" scale should be between the bounds in the metadata - And "OriginalListPrice" precision should be less than or equal to the RESO maxlength of 14 - And "OriginalListPrice" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @OtherExpense @DD1.5_OtherExpense @DD1.6_OtherExpense - Scenario: OtherExpense - Given "OtherExpense" exists in the metadata - And "OtherExpense" values are not null - Then "OtherExpense" should be "Decimal" data type - And "OtherExpense" precision should be between the bounds in the metadata - And "OtherExpense" scale should be between the bounds in the metadata - And "OtherExpense" precision should be less than or equal to the RESO maxlength of 14 - And "OtherExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @ParkingTotal @DD1.5_ParkingTotal @DD1.6_ParkingTotal - Scenario: ParkingTotal - Given "ParkingTotal" exists in the metadata - And "ParkingTotal" values are not null - Then "ParkingTotal" should be "Decimal" data type - And "ParkingTotal" precision should be between the bounds in the metadata - And "ParkingTotal" scale should be between the bounds in the metadata - And "ParkingTotal" precision should be less than or equal to the RESO maxlength of 14 - And "ParkingTotal" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @PastureArea @DD1.5_PastureArea @DD1.6_PastureArea - Scenario: PastureArea - Given "PastureArea" exists in the metadata - And "PastureArea" values are not null - Then "PastureArea" should be "Decimal" data type - And "PastureArea" precision should be between the bounds in the metadata - And "PastureArea" scale should be between the bounds in the metadata - And "PastureArea" precision should be less than or equal to the RESO maxlength of 14 - And "PastureArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @PestControlExpense @DD1.5_PestControlExpense @DD1.6_PestControlExpense - Scenario: PestControlExpense - Given "PestControlExpense" exists in the metadata - And "PestControlExpense" values are not null - Then "PestControlExpense" should be "Decimal" data type - And "PestControlExpense" precision should be between the bounds in the metadata - And "PestControlExpense" scale should be between the bounds in the metadata - And "PestControlExpense" precision should be less than or equal to the RESO maxlength of 14 - And "PestControlExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @PoolExpense @DD1.5_PoolExpense @DD1.6_PoolExpense - Scenario: PoolExpense - Given "PoolExpense" exists in the metadata - And "PoolExpense" values are not null - Then "PoolExpense" should be "Decimal" data type - And "PoolExpense" precision should be between the bounds in the metadata - And "PoolExpense" scale should be between the bounds in the metadata - And "PoolExpense" precision should be less than or equal to the RESO maxlength of 14 - And "PoolExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @PreviousListPrice @DD1.5_PreviousListPrice @DD1.6_PreviousListPrice - Scenario: PreviousListPrice - Given "PreviousListPrice" exists in the metadata - And "PreviousListPrice" values are not null - Then "PreviousListPrice" should be "Decimal" data type - And "PreviousListPrice" precision should be between the bounds in the metadata - And "PreviousListPrice" scale should be between the bounds in the metadata - And "PreviousListPrice" precision should be less than or equal to the RESO maxlength of 14 - And "PreviousListPrice" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @ProfessionalManagementExpense @DD1.5_ProfessionalManagementExpense @DD1.6_ProfessionalManagementExpense - Scenario: ProfessionalManagementExpense - Given "ProfessionalManagementExpense" exists in the metadata - And "ProfessionalManagementExpense" values are not null - Then "ProfessionalManagementExpense" should be "Decimal" data type - And "ProfessionalManagementExpense" precision should be between the bounds in the metadata - And "ProfessionalManagementExpense" scale should be between the bounds in the metadata - And "ProfessionalManagementExpense" precision should be less than or equal to the RESO maxlength of 14 - And "ProfessionalManagementExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @RangeArea @DD1.5_RangeArea @DD1.6_RangeArea - Scenario: RangeArea - Given "RangeArea" exists in the metadata - And "RangeArea" values are not null - Then "RangeArea" should be "Decimal" data type - And "RangeArea" precision should be between the bounds in the metadata - And "RangeArea" scale should be between the bounds in the metadata - And "RangeArea" precision should be less than or equal to the RESO maxlength of 14 - And "RangeArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @RangeArea @DD1.5_RangeArea @DD1.6_RangeArea - Scenario: RangeArea - Given "RangeArea" exists in the metadata - And "RangeArea" values are not null - Then "RangeArea" should be "Decimal" data type - And "RangeArea" precision should be between the bounds in the metadata - And "RangeArea" scale should be between the bounds in the metadata - And "RangeArea" precision should be less than or equal to the RESO maxlength of 14 - And "RangeArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @TaxAnnualAmount @IDX_Payload @DD1.5_TaxAnnualAmount @DD1.6_TaxAnnualAmount - Scenario: TaxAnnualAmount - Given "TaxAnnualAmount" exists in the metadata - And "TaxAnnualAmount" values are not null - Then "TaxAnnualAmount" should be "Decimal" data type - And "TaxAnnualAmount" precision should be between the bounds in the metadata - And "TaxAnnualAmount" scale should be between the bounds in the metadata - And "TaxAnnualAmount" precision should be less than or equal to the RESO maxlength of 14 - And "TaxAnnualAmount" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @TaxOtherAnnualAssessmentAmount @DD1.5_TaxOtherAnnualAssessmentAmount @DD1.6_TaxOtherAnnualAssessmentAmount - Scenario: TaxOtherAnnualAssessmentAmount - Given "TaxOtherAnnualAssessmentAmount" exists in the metadata - And "TaxOtherAnnualAssessmentAmount" values are not null - Then "TaxOtherAnnualAssessmentAmount" should be "Decimal" data type - And "TaxOtherAnnualAssessmentAmount" precision should be between the bounds in the metadata - And "TaxOtherAnnualAssessmentAmount" scale should be between the bounds in the metadata - And "TaxOtherAnnualAssessmentAmount" precision should be less than or equal to the RESO maxlength of 14 - And "TaxOtherAnnualAssessmentAmount" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @TotalActualRent @DD1.5_TotalActualRent @DD1.6_TotalActualRent - Scenario: TotalActualRent - Given "TotalActualRent" exists in the metadata - And "TotalActualRent" values are not null - Then "TotalActualRent" should be "Decimal" data type - And "TotalActualRent" precision should be between the bounds in the metadata - And "TotalActualRent" scale should be between the bounds in the metadata - And "TotalActualRent" precision should be less than or equal to the RESO maxlength of 14 - And "TotalActualRent" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @TrashExpense @DD1.5_TrashExpense @DD1.6_TrashExpense - Scenario: TrashExpense - Given "TrashExpense" exists in the metadata - And "TrashExpense" values are not null - Then "TrashExpense" should be "Decimal" data type - And "TrashExpense" precision should be between the bounds in the metadata - And "TrashExpense" scale should be between the bounds in the metadata - And "TrashExpense" precision should be less than or equal to the RESO maxlength of 14 - And "TrashExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @VacancyAllowanceRate @DD1.5_VacancyAllowanceRate @DD1.6_VacancyAllowanceRate - Scenario: VacancyAllowanceRate - Given "VacancyAllowanceRate" exists in the metadata - And "VacancyAllowanceRate" values are not null - Then "VacancyAllowanceRate" should be "Decimal" data type - And "VacancyAllowanceRate" precision should be between the bounds in the metadata - And "VacancyAllowanceRate" scale should be between the bounds in the metadata - And "VacancyAllowanceRate" precision should be less than or equal to the RESO maxlength of 5 - And "VacancyAllowanceRate" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @WaterSewerExpense @DD1.5_WaterSewerExpense @DD1.6_WaterSewerExpense - Scenario: WaterSewerExpense - Given "WaterSewerExpense" exists in the metadata - And "WaterSewerExpense" values are not null - Then "WaterSewerExpense" should be "Decimal" data type - And "WaterSewerExpense" precision should be between the bounds in the metadata - And "WaterSewerExpense" scale should be between the bounds in the metadata - And "WaterSewerExpense" precision should be less than or equal to the RESO maxlength of 14 - And "WaterSewerExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @WoodedArea @DD1.5_WoodedArea @DD1.6_WoodedArea - Scenario: WoodedArea - Given "WoodedArea" exists in the metadata - And "WoodedArea" values are not null - Then "WoodedArea" should be "Decimal" data type - And "WoodedArea" precision should be between the bounds in the metadata - And "WoodedArea" scale should be between the bounds in the metadata - And "WoodedArea" precision should be less than or equal to the RESO maxlength of 14 - And "WoodedArea" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @WorkmansCompensationExpense @DD1.5_WorkmansCompensationExpense @DD1.6_WorkmansCompensationExpense - Scenario: WorkmansCompensationExpense - Given "WorkmansCompensationExpense" exists in the metadata - And "WorkmansCompensationExpense" values are not null - Then "WorkmansCompensationExpense" should be "Decimal" data type - And "WorkmansCompensationExpense" precision should be between the bounds in the metadata - And "WorkmansCompensationExpense" scale should be between the bounds in the metadata - And "WorkmansCompensationExpense" precision should be less than or equal to the RESO maxlength of 14 - And "WorkmansCompensationExpense" scale should be less than or equal to the RESO scale of 2 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @IrrigationWaterRightsAcres @DD1.5_IrrigationWaterRightsAcres @DD1.6_IrrigationWaterRightsAcres - Scenario: IrrigationWaterRightsAcres - Given "IrrigationWaterRightsAcres" exists in the metadata - And "IrrigationWaterRightsAcres" values are not null - Then "IrrigationWaterRightsAcres" should be "Decimal" data type - And "IrrigationWaterRightsAcres" precision should be between the bounds in the metadata - And "IrrigationWaterRightsAcres" scale should be between the bounds in the metadata - And "IrrigationWaterRightsAcres" precision should be less than or equal to the RESO maxlength of 16 - And "IrrigationWaterRightsAcres" scale should be less than or equal to the RESO scale of 4 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @LotSizeAcres @IDX_Payload @DD1.5_LotSizeAcres @DD1.6_LotSizeAcres - Scenario: LotSizeAcres - Given "LotSizeAcres" exists in the metadata - And "LotSizeAcres" values are not null - Then "LotSizeAcres" should be "Decimal" data type - And "LotSizeAcres" precision should be between the bounds in the metadata - And "LotSizeAcres" scale should be between the bounds in the metadata - And "LotSizeAcres" precision should be less than or equal to the RESO maxlength of 16 - And "LotSizeAcres" scale should be less than or equal to the RESO scale of 4 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @LotSizeArea @IDX_Payload @DD1.5_LotSizeArea @DD1.6_LotSizeArea - Scenario: LotSizeArea - Given "LotSizeArea" exists in the metadata - And "LotSizeArea" values are not null - Then "LotSizeArea" should be "Decimal" data type - And "LotSizeArea" precision should be between the bounds in the metadata - And "LotSizeArea" scale should be between the bounds in the metadata - And "LotSizeArea" precision should be less than or equal to the RESO maxlength of 16 - And "LotSizeArea" scale should be less than or equal to the RESO scale of 4 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @Latitude @DD1.5_Latitude @DD1.6_Latitude @testing - Scenario: Latitude - Given "Latitude" exists in the metadata - And "Latitude" values are not null - Then "Latitude" should be "Decimal" data type - And "Latitude" precision should be between the bounds in the metadata - And "Latitude" scale should be between the bounds in the metadata - And "Latitude" precision should be less than or equal to the RESO maxlength of 12 - And "Latitude" scale should be less than or equal to the RESO scale of 8 - - @DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @Longitude @DD1.5_Longitude @DD1.6_Longitude - Scenario: Longitude - Given "Longitude" exists in the metadata - And "Longitude" values are not null - Then "Longitude" should be "Decimal" data type - And "Longitude" precision should be between the bounds in the metadata - And "Longitude" scale should be between the bounds in the metadata - And "Longitude" precision should be less than or equal to the RESO maxlength of 12 - And "Longitude" scale should be less than or equal to the RESO scale of 8 - - - - - - - - - -#@DD1.5_Decimal @DD1.6_Decimal @DD1.5 @DD1.6 @xxx @DD1.5_xxx @DD1.6_xxx -#Scenario: xxx -# Given "xxx" exists in the metadata -# And "xxx" values are not null -# Then "xxx" should be "Decimal" data type -# And "xxx" precision should be between the bounds in the metadata -# And "xxx" scale should be between the bounds in the metadata -# And "xxx" precision should be less than or equal to the RESO maxlength of 14 -# And "xxx" scale should be less than or equal to the RESO scale of 2 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/integers.feature b/src/main/java/org/reso/certification/features/data-dictionary/integers.feature deleted file mode 100644 index 3bdd01c8..00000000 --- a/src/main/java/org/reso/certification/features/data-dictionary/integers.feature +++ /dev/null @@ -1,434 +0,0 @@ -Feature: Integer Testing - - Background: - Given an XML Metadata file was provided - And the given file exists - And the file contains valid XML - And the file could be read by the Commander - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @Bathrooms123 @DD1.5_Bathrooms123 @DD1.6_Bathrooms123 @testing @bad - Scenario: Bathrooms123 - Given "Bathrooms123" exists in the metadata - And "Bathrooms123" values are not null - Then "Bathrooms123" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BathroomsFull @IDX_Payload @DD1.5_BathroomsFull @DD1.6_BathroomsFull - Scenario: BathroomsFull - Given "BathroomsFull" exists in the metadata - And "BathroomsFull" values are not null - Then "BathroomsFull" should be "Integer" data type - And "BathroomsFull" length should be less than or equal to the RESO maxlength of 3 - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BathroomsHalf @IDX_Payload @DD1.5_BathroomsHalf @DD1.6_BathroomsHalf - Scenario: BathroomsHalf - Given "BathroomsHalf" exists in the metadata - And "BathroomsHalf" values are not null - Then "BathroomsHalf" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BathroomsOneQuarter @IDX_Payload @DD1.5_BathroomsOneQuarter @DD1.6_BathroomsOneQuarter @testing - Scenario: BathroomsOneQuarter - Given "BathroomsOneQuarter" exists in the metadata - And "BathroomsOneQuarter" values are not null - Then "BathroomsOneQuarter" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BathroomsPartial @IDX_Payload @DD1.5_BathroomsPartial @DD1.6_BathroomsPartial - Scenario: BathroomsPartial - Given "BathroomsPartial" exists in the metadata - And "BathroomsPartial" values are not null - Then "BathroomsPartial" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BathroomsThreeQuarter @IDX_Payload @DD1.5_BathroomsThreeQuarter @DD1.6_BathroomsThreeQuarter @testing - Scenario: BathroomsThreeQuarter - Given "BathroomsThreeQuarter" exists in the metadata - And "BathroomsThreeQuarter" values are not null - Then "BathroomsThreeQuarter" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BathroomsTotalInteger @IDX_Payload @DD1.5_BathroomsTotalInteger @DD1.6_BathroomsTotalInteger - Scenario: BathroomsTotalInteger - Given "BathroomsTotalInteger" exists in the metadata - And "BathroomsTotalInteger" values are not null - Then "BathroomsTotalInteger" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BedroomsPossible @DD1.5_BedroomsPossible @DD1.6_BedroomsPossible - Scenario: BedroomsPossible - Given "BedroomsPossible" exists in the metadata - And "BedroomsPossible" values are not null - Then "BedroomsPossible" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BedroomsTotal @IDX_Payload @DD1.5_BedroomsTotal @DD1.6_BedroomsTotal - Scenario: BedroomsTotal - Given "BedroomsTotal" exists in the metadata - And "BedroomsTotal" values are not null - Then "BedroomsTotal" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BuyerAgentKeyNumeric @DD1.5_BuyerAgentKeyNumeric @DD1.6_BuyerAgentKeyNumeric - Scenario: BuyerAgentKeyNumeric - Given "BuyerAgentKeyNumeric" exists in the metadata - And "BuyerAgentKeyNumeric" values are not null - Then "BuyerAgentKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BuyerOfficeKeyNumeric @DD1.5_BuyerOfficeKeyNumeric @DD1.6_BuyerOfficeKeyNumeric - Scenario: BuyerOfficeKeyNumeric - Given "BuyerOfficeKeyNumeric" exists in the metadata - And "BuyerOfficeKeyNumeric" values are not null - Then "BuyerOfficeKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @BuyerTeamKeyNumeric @DD1.5_BuyerTeamKeyNumeric @DD1.6_BuyerTeamKeyNumeric - Scenario: BuyerTeamKeyNumeric - Given "BuyerTeamKeyNumeric" exists in the metadata - And "BuyerTeamKeyNumeric" values are not null - Then "BuyerTeamKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @CoBuyerAgentKeyNumeric @DD1.5_CoBuyerAgentKeyNumeric @DD1.6_CoBuyerAgentKeyNumeric - Scenario: CoBuyerAgentKeyNumeric - Given "CoBuyerAgentKeyNumeric" exists in the metadata - And "CoBuyerAgentKeyNumeric" values are not null - Then "CoBuyerAgentKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @CoBuyerOfficeKeyNumeric @DD1.5_CoBuyerOfficeKeyNumeric @DD1.6_CoBuyerOfficeKeyNumeric - Scenario: CoBuyerOfficeKeyNumeric - Given "CoBuyerOfficeKeyNumeric" exists in the metadata - And "CoBuyerOfficeKeyNumeric" values are not null - Then "CoBuyerOfficeKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @CoListAgentKeyNumeric @DD1.5_CoListAgentKeyNumeric @DD1.6_CoListAgentKeyNumeric - Scenario: CoListAgentKeyNumeric - Given "CoListAgentKeyNumeric" exists in the metadata - And "CoListAgentKeyNumeric" values are not null - Then "CoListAgentKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @CoListOfficeKeyNumeric @DD1.5_CoListOfficeKeyNumeric @DD1.6_CoListOfficeKeyNumeric - Scenario: CoListOfficeKeyNumeric - Given "CoListOfficeKeyNumeric" exists in the metadata - And "CoListOfficeKeyNumeric" values are not null - Then "CoListOfficeKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @ConcessionsAmount @DD1.5_ConcessionsAmount @DD1.6_ConcessionsAmount - Scenario: ConcessionsAmount - Given "ConcessionsAmount" exists in the metadata - And "ConcessionsAmount" values are not null - Then "ConcessionsAmount" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @CumulativeDaysOnMarket @DD1.5_CumulativeDaysOnMarket @DD1.6_CumulativeDaysOnMarket - Scenario: CumulativeDaysOnMarket - Given "CumulativeDaysOnMarket" exists in the metadata - And "CumulativeDaysOnMarket" values are not null - Then "CumulativeDaysOnMarket" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DaysOnMarket @DD1.5_DaysOnMarket @DD1.6_DaysOnMarket - Scenario: DaysOnMarket - Given "DaysOnMarket" exists in the metadata - And "DaysOnMarket" values are not null - Then "DaysOnMarket" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToBusNumeric @DD1.5_DistanceToBusNumeric @DD1.6_DistanceToBusNumeric - Scenario: DistanceToBusNumeric - Given "DistanceToBusNumeric" exists in the metadata - And "DistanceToBusNumeric" values are not null - Then "DistanceToBusNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToElectricNumeric @DD1.5_DistanceToElectricNumeric @DD1.6_DistanceToElectricNumeric - Scenario: DistanceToElectricNumeric - Given "DistanceToElectricNumeric" exists in the metadata - And "DistanceToElectricNumeric" values are not null - Then "DistanceToElectricNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToFreewayNumeric @DD1.5_DistanceToFreewayNumeric @DD1.6_DistanceToFreewayNumeric - Scenario: DistanceToFreewayNumeric - Given "DistanceToFreewayNumeric" exists in the metadata - And "DistanceToFreewayNumeric" values are not null - Then "DistanceToFreewayNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToGasNumeric @DD1.5_DistanceToGasNumeric @DD1.6_DistanceToGasNumeric - Scenario: DistanceToGasNumeric - Given "DistanceToGasNumeric" exists in the metadata - And "DistanceToGasNumeric" values are not null - Then "DistanceToGasNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToPhoneServiceNumeric @DD1.5_DistanceToPhoneServiceNumeric @DD1.6_DistanceToPhoneServiceNumeric - Scenario: DistanceToPhoneServiceNumeric - Given "DistanceToPhoneServiceNumeric" exists in the metadata - And "DistanceToPhoneServiceNumeric" values are not null - Then "DistanceToPhoneServiceNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToPlaceofWorshipNumeric @DD1.5_DistanceToPlaceofWorshipNumeric @DD1.6_DistanceToPlaceofWorshipNumeric - Scenario: DistanceToPlaceofWorshipNumeric - Given "DistanceToPlaceofWorshipNumeric" exists in the metadata - And "DistanceToPlaceofWorshipNumeric" values are not null - Then "DistanceToPlaceofWorshipNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToSchoolBusNumeric @DD1.5_DistanceToSchoolBusNumeric @DD1.6_DistanceToSchoolBusNumeric - Scenario: DistanceToSchoolBusNumeric - Given "DistanceToSchoolBusNumeric" exists in the metadata - And "DistanceToSchoolBusNumeric" values are not null - Then "DistanceToSchoolBusNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToSchoolsNumeric @DD1.5_DistanceToSchoolsNumeric @DD1.6_DistanceToSchoolsNumeric - Scenario: DistanceToSchoolsNumeric - Given "DistanceToSchoolsNumeric" exists in the metadata - And "DistanceToSchoolsNumeric" values are not null - Then "DistanceToSchoolsNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToSewerNumeric @DD1.5_DistanceToSewerNumeric @DD1.6_DistanceToSewerNumeric - Scenario: DistanceToSewerNumeric - Given "DistanceToSewerNumeric" exists in the metadata - And "DistanceToSewerNumeric" values are not null - Then "DistanceToSewerNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToShoppingNumeric @DD1.5_DistanceToShoppingNumeric @DD1.6_DistanceToShoppingNumeric - Scenario: DistanceToShoppingNumeric - Given "DistanceToShoppingNumeric" exists in the metadata - And "DistanceToShoppingNumeric" values are not null - Then "DistanceToShoppingNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToStreetNumeric @DD1.5_DistanceToStreetNumeric @DD1.6_DistanceToStreetNumeric - Scenario: DistanceToStreetNumeric - Given "DistanceToStreetNumeric" exists in the metadata - And "DistanceToStreetNumeric" values are not null - Then "DistanceToStreetNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DistanceToWaterNumeric @DD1.5_DistanceToWaterNumeric @DD1.6_DistanceToWaterNumeric - Scenario: DistanceToWaterNumeric - Given "DistanceToWaterNumeric" exists in the metadata - And "DistanceToWaterNumeric" values are not null - Then "DistanceToWaterNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @DocumentsCount @DD1.5_DocumentsCount @DD1.6_DocumentsCount - Scenario: DocumentsCount - Given "DocumentsCount" exists in the metadata - And "DocumentsCount" values are not null - Then "DocumentsCount" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @Elevation @DD1.5_Elevation @DD1.6_Elevation - Scenario: Elevation - Given "Elevation" exists in the metadata - And "Elevation" values are not null - Then "Elevation" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @EntryLevel @DD1.5_EntryLevel @DD1.6_EntryLevel - Scenario: EntryLevel - Given "EntryLevel" exists in the metadata - And "EntryLevel" values are not null - Then "EntryLevel" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @FireplacesTotal @IDX_Payload @DD1.5_FireplacesTotal @DD1.6_FireplacesTotal - Scenario: FireplacesTotal - Given "FireplacesTotal" exists in the metadata - And "FireplacesTotal" values are not null - Then "FireplacesTotal" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @ListAgentKeyNumeric @DD1.5_ListAgentKeyNumeric @DD1.6_ListAgentKeyNumeric - Scenario: ListAgentKeyNumeric - Given "ListAgentKeyNumeric" exists in the metadata - And "ListAgentKeyNumeric" values are not null - Then "ListAgentKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @ListOfficeKeyNumeric @DD1.5_ListOfficeKeyNumeric @DD1.6_ListOfficeKeyNumeric - Scenario: ListOfficeKeyNumeric - Given "ListOfficeKeyNumeric" exists in the metadata - And "ListOfficeKeyNumeric" values are not null - Then "ListOfficeKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @ListTeamKeyNumeric @DD1.5_ListTeamKeyNumeric @DD1.6_ListTeamKeyNumeric - Scenario: ListTeamKeyNumeric - Given "ListTeamKeyNumeric" exists in the metadata - And "ListTeamKeyNumeric" values are not null - Then "ListTeamKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @ListingKey @IDX_Payload @DD1.5_ListingKeyNumeric @DD1.6_ListingKeyNumeric - Scenario: ListingKeyNumeric - Given "ListingKeyNumeric" exists in the metadata - And "ListingKeyNumeric" values are not null - Then "ListingKeyNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @MainLevelBathrooms @DD1.5_MainLevelBathrooms @DD1.6_MainLevelBathrooms - Scenario: MainLevelBathrooms - Given "MainLevelBathrooms" exists in the metadata - And "MainLevelBathrooms" values are not null - Then "MainLevelBathrooms" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @MainLevelBedrooms @DD1.5_MainLevelBedrooms @DD1.6_MainLevelBedrooms - Scenario: MainLevelBedrooms - Given "MainLevelBedrooms" exists in the metadata - And "MainLevelBedrooms" values are not null - Then "MainLevelBedrooms" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @MobileLength @IDX_Payload @DD1.5_MobileLength @DD1.6_MobileLength - Scenario: MobileLength - Given "MobileLength" exists in the metadata - And "MobileLength" values are not null - Then "MobileLength" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @MobileWidth @IDX_Payload @DD1.5_MobileWidth @DD1.6_MobileWidth - Scenario: MobileWidth - Given "MobileWidth" exists in the metadata - And "MobileWidth" values are not null - Then "MobileWidth" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfBuildings @DD1.5_NumberOfBuildings @DD1.6_NumberOfBuildings - Scenario: NumberOfBuildings - Given "NumberOfBuildings" exists in the metadata - And "NumberOfBuildings" values are not null - Then "NumberOfBuildings" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfFullTimeEmployees @DD1.5_NumberOfFullTimeEmployees @DD1.6_NumberOfFullTimeEmployees - Scenario: NumberOfFullTimeEmployees - Given "NumberOfFullTimeEmployees" exists in the metadata - And "NumberOfFullTimeEmployees" values are not null - Then "NumberOfFullTimeEmployees" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfLots @DD1.5_NumberOfLots @DD1.6_NumberOfLots - Scenario: NumberOfLots - Given "NumberOfLots" exists in the metadata - And "NumberOfLots" values are not null - Then "NumberOfLots" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfPads @DD1.5_NumberOfPads @DD1.6_NumberOfPads - Scenario: NumberOfPads - Given "NumberOfPads" exists in the metadata - And "NumberOfPads" values are not null - Then "NumberOfPads" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfPartTimeEmployees @DD1.5_NumberOfPartTimeEmployees @DD1.6_NumberOfPartTimeEmployees - Scenario: NumberOfPartTimeEmployees - Given "NumberOfPartTimeEmployees" exists in the metadata - And "NumberOfPartTimeEmployees" values are not null - Then "NumberOfPartTimeEmployees" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfSeparateElectricMeters @DD1.5_NumberOfSeparateElectricMeters @DD1.6_NumberOfSeparateElectricMeters - Scenario: NumberOfSeparateElectricMeters - Given "NumberOfSeparateElectricMeters" exists in the metadata - And "NumberOfSeparateElectricMeters" values are not null - Then "NumberOfSeparateElectricMeters" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfSeparateGasMeters @DD1.5_NumberOfSeparateGasMeters @DD1.6_NumberOfSeparateGasMeters - Scenario: NumberOfSeparateGasMeters - Given "NumberOfSeparateGasMeters" exists in the metadata - And "NumberOfSeparateGasMeters" values are not null - Then "NumberOfSeparateGasMeters" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfSeparateWaterMeters @DD1.5_NumberOfSeparateWaterMeters @DD1.6_NumberOfSeparateWaterMeters - Scenario: NumberOfSeparateWaterMeters - Given "NumberOfSeparateWaterMeters" exists in the metadata - And "NumberOfSeparateWaterMeters" values are not null - Then "NumberOfSeparateWaterMeters" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfUnitsInCommunity @DD1.5_NumberOfUnitsInCommunity @DD1.6_NumberOfUnitsInCommunity - Scenario: NumberOfUnitsInCommunity - Given "NumberOfUnitsInCommunity" exists in the metadata - And "NumberOfUnitsInCommunity" values are not null - Then "NumberOfUnitsInCommunity" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfUnitsLeased @DD1.5_NumberOfUnitsLeased @DD1.6_NumberOfUnitsLeased - Scenario: NumberOfUnitsLeased - Given "NumberOfUnitsLeased" exists in the metadata - And "NumberOfUnitsLeased" values are not null - Then "NumberOfUnitsLeased" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfUnitsMoMo @DD1.5_NumberOfUnitsMoMo @DD1.6_NumberOfUnitsMoMo - Scenario: NumberOfUnitsMoMo - Given "NumberOfUnitsMoMo" exists in the metadata - And "NumberOfUnitsMoMo" values are not null - Then "NumberOfUnitsMoMo" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfUnitsTotal @IDX_Payload @DD1.5_NumberOfUnitsTotal @DD1.6_NumberOfUnitsTotal - Scenario: NumberOfUnitsTotal - Given "NumberOfUnitsTotal" exists in the metadata - And "NumberOfUnitsTotal" values are not null - Then "NumberOfUnitsTotal" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @NumberOfUnitsVacant @DD1.5_NumberOfUnitsVacant @DD1.6_NumberOfUnitsVacant - Scenario: NumberOfUnitsVacant - Given "NumberOfUnitsVacant" exists in the metadata - And "NumberOfUnitsVacant" values are not null - Then "NumberOfUnitsVacant" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @PhotosCount @IDX_Payload @DD1.5_PhotosCount @DD1.6_PhotosCount - Scenario: PhotosCount - Given "PhotosCount" exists in the metadata - And "PhotosCount" values are not null - Then "PhotosCount" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @RoomsTotal @IDX_Payload @DD1.5_RoomsTotal @DD1.6_RoomsTotal - Scenario: RoomsTotal - Given "RoomsTotal" exists in the metadata - And "RoomsTotal" values are not null - Then "RoomsTotal" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @SeatingCapacity @DD1.5_SeatingCapacity @DD1.6_SeatingCapacity - Scenario: SeatingCapacity - Given "SeatingCapacity" exists in the metadata - And "SeatingCapacity" values are not null - Then "SeatingCapacity" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @Stories @IDX_Payload @DD1.5_Stories @DD1.6_Stories - Scenario: Stories - Given "Stories" exists in the metadata - And "Stories" values are not null - Then "Stories" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @Stories @IDX_Payload @DD1.5_StoriesTotal @DD1.6_StoriesTotal - Scenario: StoriesTotal - Given "StoriesTotal" exists in the metadata - And "StoriesTotal" values are not null - Then "StoriesTotal" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @StreetNumber @IDX_Payload @DD1.5_StreetNumberNumeric @DD1.6_StreetNumberNumeric - Scenario: StreetNumberNumeric - Given "StreetNumberNumeric" exists in the metadata - And "StreetNumberNumeric" values are not null - Then "StreetNumberNumeric" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @TaxAssessedValue @DD1.5_TaxAssessedValue @DD1.6_TaxAssessedValue - Scenario: TaxAssessedValue - Given "TaxAssessedValue" exists in the metadata - And "TaxAssessedValue" values are not null - Then "TaxAssessedValue" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @TaxYear @DD1.5_TaxYear @DD1.6_TaxYear - Scenario: TaxYear - Given "TaxYear" exists in the metadata - And "TaxYear" values are not null - Then "TaxYear" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @VacancyAllowance @DD1.5_VacancyAllowance @DD1.6_VacancyAllowance - Scenario: VacancyAllowance - Given "VacancyAllowance" exists in the metadata - And "VacancyAllowance" values are not null - Then "VacancyAllowance" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @VideosCount @DD1.5_VideosCount @DD1.6_VideosCount - Scenario: VideosCount - Given "VideosCount" exists in the metadata - And "VideosCount" values are not null - Then "VideosCount" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @WalkScore @DD1.5_WalkScore @DD1.6_WalkScore - Scenario: WalkScore - Given "WalkScore" exists in the metadata - And "WalkScore" values are not null - Then "WalkScore" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @YearBuilt @DD1.5_YearBuilt @DD1.6_YearBuilt - Scenario: YearBuilt - Given "YearBuilt" exists in the metadata - And "YearBuilt" values are not null - Then "YearBuilt" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @YearBuiltEffective @DD1.5_YearBuiltEffective @DD1.6_YearBuiltEffective - Scenario: YearBuiltEffective - Given "YearBuiltEffective" exists in the metadata - And "YearBuiltEffective" values are not null - Then "YearBuiltEffective" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @YearEstablished @DD1.5_YearEstablished @DD1.6_YearEstablished - Scenario: YearEstablished - Given "YearEstablished" exists in the metadata - And "YearEstablished" values are not null - Then "YearEstablished" should be "Integer" data type - - @DD1.5_Integer @DD1.6_Integer @DD1.5 @DD1.6 @YearsCurrentOwner @DD1.5_YearsCurrentOwner @DD1.6_YearsCurrentOwner - Scenario: YearsCurrentOwner - Given "YearsCurrentOwner" exists in the metadata - And "YearsCurrentOwner" values are not null - Then "YearsCurrentOwner" should be "Integer" data type diff --git a/src/main/java/org/reso/certification/features/data-dictionary/stringlist-multi.feature b/src/main/java/org/reso/certification/features/data-dictionary/stringlist-multi.feature deleted file mode 100644 index e31437bc..00000000 --- a/src/main/java/org/reso/certification/features/data-dictionary/stringlist-multi.feature +++ /dev/null @@ -1,826 +0,0 @@ -Feature: StringList-Multi Testing - - Background: - Given an XML Metadata file was provided - And the given file exists - And the file contains valid XML - And the file could be read by the Commander - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @AccessibilityFeatures @IDX_Payload @DD1.5_AccessibilityFeatures @DD1.6_AccessibilityFeatures - Scenario: AccessibilityFeatures - Given "AccessibilityFeatures" exists in the metadata - And "AccessibilityFeatures" enum values can be compiled - And "AccessibilityFeatures" values are not null - Then "AccessibilityFeatures" should be "Array of Strings" data type - And "AccessibilityFeatures" should only contain enum values found in the metadata - And "AccessibilityFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Appliances @IDX_Payload @DD1.5_Appliances @DD1.6_Appliances - Scenario: Appliances - Given "Appliances" exists in the metadata - And "Appliances" enum values can be compiled - And "Appliances" values are not null - Then "Appliances" should be "Array of Strings" data type - And "Appliances" should only contain enum values found in the metadata - And "Appliances" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @ArchitecturalStyle @IDX_Payload @DD1.5_ArchitecturalStyle @DD1.6_ArchitecturalStyle - Scenario: ArchitecturalStyle - Given "ArchitecturalStyle" exists in the metadata - And "ArchitecturalStyle" enum values can be compiled - And "ArchitecturalStyle" values are not null - Then "ArchitecturalStyle" should be "Array of Strings" data type - And "ArchitecturalStyle" should only contain enum values found in the metadata - And "ArchitecturalStyle" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @AssociationAmenities @IDX_Payload @DD1.5_AssociationAmenities @DD1.6_AssociationAmenities - Scenario: AssociationAmenities - Given "AssociationAmenities" exists in the metadata - And "AssociationAmenities" enum values can be compiled - And "AssociationAmenities" values are not null - Then "AssociationAmenities" should be "Array of Strings" data type - And "AssociationAmenities" should only contain enum values found in the metadata - And "AssociationAmenities" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @AssociationFee @IDX_Payload @DD1.5_AssociationFeeIncludes @DD1.6_AssociationFeeIncludes - Scenario: AssociationFeeIncludes - Given "AssociationFeeIncludes" exists in the metadata - And "AssociationFeeIncludes" enum values can be compiled - And "AssociationFeeIncludes" values are not null - Then "AssociationFeeIncludes" should be "Array of Strings" data type - And "AssociationFeeIncludes" should only contain enum values found in the metadata - And "AssociationFeeIncludes" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Basement @IDX_Payload @DD1.5_Basement @DD1.6_Basement - Scenario: Basement - Given "Basement" exists in the metadata - And "Basement" enum values can be compiled - And "Basement" values are not null - Then "Basement" should be "Array of Strings" data type - And "Basement" should only contain enum values found in the metadata - And "Basement" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @BodyType @IDX_Payload @DD1.5_BodyType @DD1.6_BodyType - Scenario: BodyType - Given "BodyType" exists in the metadata - And "BodyType" enum values can be compiled - And "BodyType" values are not null - Then "BodyType" should be "Array of Strings" data type - And "BodyType" should only contain enum values found in the metadata - And "BodyType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @BuildingFeatures @DD1.5_BuildingFeatures @DD1.6_BuildingFeatures - Scenario: BuildingFeatures - Given "BuildingFeatures" exists in the metadata - And "BuildingFeatures" enum values can be compiled - And "BuildingFeatures" values are not null - Then "BuildingFeatures" should be "Array of Strings" data type - And "BuildingFeatures" should only contain enum values found in the metadata - And "BuildingFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @BusinessType @IDX_Payload @DD1.5_BusinessType @DD1.6_BusinessType - Scenario: BusinessType - Given "BusinessType" exists in the metadata - And "BusinessType" enum values can be compiled - And "BusinessType" values are not null - Then "BusinessType" should be "Array of Strings" data type - And "BusinessType" should only contain enum values found in the metadata - And "BusinessType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @BuyerAgentDesignation @DD1.5_BuyerAgentDesignation @DD1.6_BuyerAgentDesignation - Scenario: BuyerAgentDesignation - Given "BuyerAgentDesignation" exists in the metadata - And "BuyerAgentDesignation" enum values can be compiled - And "BuyerAgentDesignation" values are not null - Then "BuyerAgentDesignation" should be "Array of Strings" data type - And "BuyerAgentDesignation" should only contain enum values found in the metadata - And "BuyerAgentDesignation" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @BuyerFinancing @DD1.5_BuyerFinancing @DD1.6_BuyerFinancing - Scenario: BuyerFinancing - Given "BuyerFinancing" exists in the metadata - And "BuyerFinancing" enum values can be compiled - And "BuyerFinancing" values are not null - Then "BuyerFinancing" should be "Array of Strings" data type - And "BuyerFinancing" should only contain enum values found in the metadata - And "BuyerFinancing" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @CoBuyerAgentDesignation @DD1.5_CoBuyerAgentDesignation @DD1.6_CoBuyerAgentDesignation - Scenario: CoBuyerAgentDesignation - Given "CoBuyerAgentDesignation" exists in the metadata - And "CoBuyerAgentDesignation" enum values can be compiled - And "CoBuyerAgentDesignation" values are not null - Then "CoBuyerAgentDesignation" should be "Array of Strings" data type - And "CoBuyerAgentDesignation" should only contain enum values found in the metadata - And "CoBuyerAgentDesignation" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @CoListAgentDesignation @DD1.5_CoListAgentDesignation @DD1.6_CoListAgentDesignation - Scenario: CoListAgentDesignation - Given "CoListAgentDesignation" exists in the metadata - And "CoListAgentDesignation" enum values can be compiled - And "CoListAgentDesignation" values are not null - Then "CoListAgentDesignation" should be "Array of Strings" data type - And "CoListAgentDesignation" should only contain enum values found in the metadata - And "CoListAgentDesignation" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @CommonWalls @DD1.5_CommonWalls @DD1.6_CommonWalls - Scenario: CommonWalls - Given "CommonWalls" exists in the metadata - And "CommonWalls" enum values can be compiled - And "CommonWalls" values are not null - Then "CommonWalls" should be "Array of Strings" data type - And "CommonWalls" should only contain enum values found in the metadata - And "CommonWalls" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @CommunityFeatures @DD1.5_CommunityFeatures @DD1.6_CommunityFeatures - Scenario: CommunityFeatures - Given "CommunityFeatures" exists in the metadata - And "CommunityFeatures" enum values can be compiled - And "CommunityFeatures" values are not null - Then "CommunityFeatures" should be "Array of Strings" data type - And "CommunityFeatures" should only contain enum values found in the metadata - And "CommunityFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @ConstructionMaterials @IDX_Payload @DD1.5_ConstructionMaterials @DD1.6_ConstructionMaterials - Scenario: ConstructionMaterials - Given "ConstructionMaterials" exists in the metadata - And "ConstructionMaterials" enum values can be compiled - And "ConstructionMaterials" values are not null - Then "ConstructionMaterials" should be "Array of Strings" data type - And "ConstructionMaterials" should only contain enum values found in the metadata - And "ConstructionMaterials" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Cooling @IDX_Payload @DD1.5_Cooling @DD1.6_Cooling - Scenario: Cooling - Given "Cooling" exists in the metadata - And "Cooling" enum values can be compiled - And "Cooling" values are not null - Then "Cooling" should be "Array of Strings" data type - And "Cooling" should only contain enum values found in the metadata - And "Cooling" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @CurrentFinancing @DD1.5_CurrentFinancing @DD1.6_CurrentFinancing - Scenario: CurrentFinancing - Given "CurrentFinancing" exists in the metadata - And "CurrentFinancing" enum values can be compiled - And "CurrentFinancing" values are not null - Then "CurrentFinancing" should be "Array of Strings" data type - And "CurrentFinancing" should only contain enum values found in the metadata - And "CurrentFinancing" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @CurrentUse @IDX_Payload @DD1.5_CurrentUse @DD1.6_CurrentUse - Scenario: CurrentUse - Given "CurrentUse" exists in the metadata - And "CurrentUse" enum values can be compiled - And "CurrentUse" values are not null - Then "CurrentUse" should be "Array of Strings" data type - And "CurrentUse" should only contain enum values found in the metadata - And "CurrentUse" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @DevelopmentStatus @DD1.5_DevelopmentStatus @DD1.6_DevelopmentStatus - Scenario: DevelopmentStatus - Given "DevelopmentStatus" exists in the metadata - And "DevelopmentStatus" enum values can be compiled - And "DevelopmentStatus" values are not null - Then "DevelopmentStatus" should be "Array of Strings" data type - And "DevelopmentStatus" should only contain enum values found in the metadata - And "DevelopmentStatus" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Disclosures @DD1.5_Disclosures @DD1.6_Disclosures - Scenario: Disclosures - Given "Disclosures" exists in the metadata - And "Disclosures" enum values can be compiled - And "Disclosures" values are not null - Then "Disclosures" should be "Array of Strings" data type - And "Disclosures" should only contain enum values found in the metadata - And "Disclosures" length should be less than or equal to the RESO maxlength of 4000 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @DocumentsAvailable @DD1.5_DocumentsAvailable @DD1.6_DocumentsAvailable - Scenario: DocumentsAvailable - Given "DocumentsAvailable" exists in the metadata - And "DocumentsAvailable" enum values can be compiled - And "DocumentsAvailable" values are not null - Then "DocumentsAvailable" should be "Array of Strings" data type - And "DocumentsAvailable" should only contain enum values found in the metadata - And "DocumentsAvailable" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @DoorFeatures @DD1.5_DoorFeatures @DD1.6_DoorFeatures - Scenario: DoorFeatures - Given "DoorFeatures" exists in the metadata - And "DoorFeatures" enum values can be compiled - And "DoorFeatures" values are not null - Then "DoorFeatures" should be "Array of Strings" data type - And "DoorFeatures" should only contain enum values found in the metadata - And "DoorFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Electric @IDX_Payload @DD1.5_Electric @DD1.6_Electric - Scenario: Electric - Given "Electric" exists in the metadata - And "Electric" enum values can be compiled - And "Electric" values are not null - Then "Electric" should be "Array of Strings" data type - And "Electric" should only contain enum values found in the metadata - And "Electric" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @ExistingLeaseType @DD1.5_ExistingLeaseType @DD1.6_ExistingLeaseType - Scenario: ExistingLeaseType - Given "ExistingLeaseType" exists in the metadata - And "ExistingLeaseType" enum values can be compiled - And "ExistingLeaseType" values are not null - Then "ExistingLeaseType" should be "Array of Strings" data type - And "ExistingLeaseType" should only contain enum values found in the metadata - And "ExistingLeaseType" length should be less than or equal to the RESO maxlength of 75 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @ExteriorFeatures @IDX_Payload @DD1.5_ExteriorFeatures @DD1.6_ExteriorFeatures - Scenario: ExteriorFeatures - Given "ExteriorFeatures" exists in the metadata - And "ExteriorFeatures" enum values can be compiled - And "ExteriorFeatures" values are not null - Then "ExteriorFeatures" should be "Array of Strings" data type - And "ExteriorFeatures" should only contain enum values found in the metadata - And "ExteriorFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Fencing @IDX_Payload @DD1.5_Fencing @DD1.6_Fencing - Scenario: Fencing - Given "Fencing" exists in the metadata - And "Fencing" enum values can be compiled - And "Fencing" values are not null - Then "Fencing" should be "Array of Strings" data type - And "Fencing" should only contain enum values found in the metadata - And "Fencing" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @FinancialDataSource @DD1.5_FinancialDataSource @DD1.6_FinancialDataSource - Scenario: FinancialDataSource - Given "FinancialDataSource" exists in the metadata - And "FinancialDataSource" enum values can be compiled - And "FinancialDataSource" values are not null - Then "FinancialDataSource" should be "Array of Strings" data type - And "FinancialDataSource" should only contain enum values found in the metadata - And "FinancialDataSource" length should be less than or equal to the RESO maxlength of 75 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @FireplaceFeatures @IDX_Payload @DD1.5_FireplaceFeatures @DD1.6_FireplaceFeatures - Scenario: FireplaceFeatures - Given "FireplaceFeatures" exists in the metadata - And "FireplaceFeatures" enum values can be compiled - And "FireplaceFeatures" values are not null - Then "FireplaceFeatures" should be "Array of Strings" data type - And "FireplaceFeatures" should only contain enum values found in the metadata - And "FireplaceFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Flooring @IDX_Payload @DD1.5_Flooring @DD1.6_Flooring - Scenario: Flooring - Given "Flooring" exists in the metadata - And "Flooring" enum values can be compiled - And "Flooring" values are not null - Then "Flooring" should be "Array of Strings" data type - And "Flooring" should only contain enum values found in the metadata - And "Flooring" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @FoundationDetails @IDX_Payload @DD1.5_FoundationDetails @DD1.6_FoundationDetails - Scenario: FoundationDetails - Given "FoundationDetails" exists in the metadata - And "FoundationDetails" enum values can be compiled - And "FoundationDetails" values are not null - Then "FoundationDetails" should be "Array of Strings" data type - And "FoundationDetails" should only contain enum values found in the metadata - And "FoundationDetails" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @FrontageType @DD1.5_FrontageType @DD1.6_FrontageType - Scenario: FrontageType - Given "FrontageType" exists in the metadata - And "FrontageType" enum values can be compiled - And "FrontageType" values are not null - Then "FrontageType" should be "Array of Strings" data type - And "FrontageType" should only contain enum values found in the metadata - And "FrontageType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.5 @Gas @DD1.5_Gas @testing - Scenario: Gas - Given "Gas" exists in the metadata - And "Gas" enum values can be compiled - And "Gas" values are not null - Then "Gas" should be "Array of Strings" data type - And "Gas" should only contain enum values found in the metadata - And "Gas" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @GreenBuildingVerificationType @IDX_Payload @DD1.5_GreenBuildingVerificationType @DD1.6_GreenBuildingVerificationType - Scenario: GreenBuildingVerificationType - Given "GreenBuildingVerificationType" exists in the metadata - And "GreenBuildingVerificationType" enum values can be compiled - And "GreenBuildingVerificationType" values are not null - Then "GreenBuildingVerificationType" should be "Array of Strings" data type - And "GreenBuildingVerificationType" should only contain enum values found in the metadata - And "GreenBuildingVerificationType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @GreenEnergyEfficient @DD1.5_GreenEnergyEfficient @DD1.6_GreenEnergyEfficient - Scenario: GreenEnergyEfficient - Given "GreenEnergyEfficient" exists in the metadata - And "GreenEnergyEfficient" enum values can be compiled - And "GreenEnergyEfficient" values are not null - Then "GreenEnergyEfficient" should be "Array of Strings" data type - And "GreenEnergyEfficient" should only contain enum values found in the metadata - And "GreenEnergyEfficient" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @GreenEnergyGeneration @DD1.5_GreenEnergyGeneration @DD1.6_GreenEnergyGeneration - Scenario: GreenEnergyGeneration - Given "GreenEnergyGeneration" exists in the metadata - And "GreenEnergyGeneration" enum values can be compiled - And "GreenEnergyGeneration" values are not null - Then "GreenEnergyGeneration" should be "Array of Strings" data type - And "GreenEnergyGeneration" should only contain enum values found in the metadata - And "GreenEnergyGeneration" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @GreenIndoorAirQuality @DD1.5_GreenIndoorAirQuality @DD1.6_GreenIndoorAirQuality - Scenario: GreenIndoorAirQuality - Given "GreenIndoorAirQuality" exists in the metadata - And "GreenIndoorAirQuality" enum values can be compiled - And "GreenIndoorAirQuality" values are not null - Then "GreenIndoorAirQuality" should be "Array of Strings" data type - And "GreenIndoorAirQuality" should only contain enum values found in the metadata - And "GreenIndoorAirQuality" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @GreenLocation @DD1.5_GreenLocation @DD1.6_GreenLocation - Scenario: GreenLocation - Given "GreenLocation" exists in the metadata - And "GreenLocation" enum values can be compiled - And "GreenLocation" values are not null - Then "GreenLocation" should be "Array of Strings" data type - And "GreenLocation" should only contain enum values found in the metadata - And "GreenLocation" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @GreenSustainability @DD1.5_GreenSustainability @DD1.6_GreenSustainability - Scenario: GreenSustainability - Given "GreenSustainability" exists in the metadata - And "GreenSustainability" enum values can be compiled - And "GreenSustainability" values are not null - Then "GreenSustainability" should be "Array of Strings" data type - And "GreenSustainability" should only contain enum values found in the metadata - And "GreenSustainability" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @GreenWaterConservation @DD1.5_GreenWaterConservation @DD1.6_GreenWaterConservation - Scenario: GreenWaterConservation - Given "GreenWaterConservation" exists in the metadata - And "GreenWaterConservation" enum values can be compiled - And "GreenWaterConservation" values are not null - Then "GreenWaterConservation" should be "Array of Strings" data type - And "GreenWaterConservation" should only contain enum values found in the metadata - And "GreenWaterConservation" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Heating @IDX_Payload @DD1.5_Heating @DD1.6_Heating - Scenario: Heating - Given "Heating" exists in the metadata - And "Heating" enum values can be compiled - And "Heating" values are not null - Then "Heating" should be "Array of Strings" data type - And "Heating" should only contain enum values found in the metadata - And "Heating" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @HorseAmenities @DD1.5_HorseAmenities @DD1.6_HorseAmenities - Scenario: HorseAmenities - Given "HorseAmenities" exists in the metadata - And "HorseAmenities" enum values can be compiled - And "HorseAmenities" values are not null - Then "HorseAmenities" should be "Array of Strings" data type - And "HorseAmenities" should only contain enum values found in the metadata - And "HorseAmenities" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @HoursDaysOfOperation @DD1.5_HoursDaysOfOperation @DD1.6_HoursDaysOfOperation - Scenario: HoursDaysOfOperation - Given "HoursDaysOfOperation" exists in the metadata - And "HoursDaysOfOperation" enum values can be compiled - And "HoursDaysOfOperation" values are not null - Then "HoursDaysOfOperation" should be "Array of Strings" data type - And "HoursDaysOfOperation" should only contain enum values found in the metadata - And "HoursDaysOfOperation" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @IncomeIncludes @DD1.5_IncomeIncludes @DD1.6_IncomeIncludes - Scenario: IncomeIncludes - Given "IncomeIncludes" exists in the metadata - And "IncomeIncludes" enum values can be compiled - And "IncomeIncludes" values are not null - Then "IncomeIncludes" should be "Array of Strings" data type - And "IncomeIncludes" should only contain enum values found in the metadata - And "IncomeIncludes" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @InteriorFeatures @IDX_Payload @DD1.5_InteriorFeatures @DD1.6_InteriorFeatures - Scenario: InteriorFeatures - Given "InteriorFeatures" exists in the metadata - And "InteriorFeatures" enum values can be compiled - And "InteriorFeatures" values are not null - Then "InteriorFeatures" should be "Array of Strings" data type - And "InteriorFeatures" should only contain enum values found in the metadata - And "InteriorFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @IrrigationSource @DD1.5_IrrigationSource @DD1.6_IrrigationSource - Scenario: IrrigationSource - Given "IrrigationSource" exists in the metadata - And "IrrigationSource" enum values can be compiled - And "IrrigationSource" values are not null - Then "IrrigationSource" should be "Array of Strings" data type - And "IrrigationSource" should only contain enum values found in the metadata - And "IrrigationSource" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @LaborInformation @DD1.5_LaborInformation @DD1.6_LaborInformation - Scenario: LaborInformation - Given "LaborInformation" exists in the metadata - And "LaborInformation" enum values can be compiled - And "LaborInformation" values are not null - Then "LaborInformation" should be "Array of Strings" data type - And "LaborInformation" should only contain enum values found in the metadata - And "LaborInformation" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @LaundryFeatures @IDX_Payload @DD1.5_LaundryFeatures @DD1.6_LaundryFeatures - Scenario: LaundryFeatures - Given "LaundryFeatures" exists in the metadata - And "LaundryFeatures" enum values can be compiled - And "LaundryFeatures" values are not null - Then "LaundryFeatures" should be "Array of Strings" data type - And "LaundryFeatures" should only contain enum values found in the metadata - And "LaundryFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @LeaseRenewalCompensation @DD1.5_LeaseRenewalCompensation @DD1.6_LeaseRenewalCompensation - Scenario: LeaseRenewalCompensation - Given "LeaseRenewalCompensation" exists in the metadata - And "LeaseRenewalCompensation" enum values can be compiled - And "LeaseRenewalCompensation" values are not null - Then "LeaseRenewalCompensation" should be "Array of Strings" data type - And "LeaseRenewalCompensation" should only contain enum values found in the metadata - And "LeaseRenewalCompensation" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Levels @IDX_Payload @DD1.5_Levels @DD1.6_Levels - Scenario: Levels - Given "Levels" exists in the metadata - And "Levels" enum values can be compiled - And "Levels" values are not null - Then "Levels" should be "Array of Strings" data type - And "Levels" should only contain enum values found in the metadata - And "Levels" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @ListAgentDesignation @DD1.5_ListAgentDesignation @DD1.6_ListAgentDesignation - Scenario: ListAgentDesignation - Given "ListAgentDesignation" exists in the metadata - And "ListAgentDesignation" enum values can be compiled - And "ListAgentDesignation" values are not null - Then "ListAgentDesignation" should be "Array of Strings" data type - And "ListAgentDesignation" should only contain enum values found in the metadata - And "ListAgentDesignation" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @ListingTerms @DD1.5_ListingTerms @DD1.6_ListingTerms - Scenario: ListingTerms - Given "ListingTerms" exists in the metadata - And "ListingTerms" enum values can be compiled - And "ListingTerms" values are not null - Then "ListingTerms" should be "Array of Strings" data type - And "ListingTerms" should only contain enum values found in the metadata - And "ListingTerms" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @LockBoxType @DD1.5_LockBoxType @DD1.6_LockBoxType - Scenario: LockBoxType - Given "LockBoxType" exists in the metadata - And "LockBoxType" enum values can be compiled - And "LockBoxType" values are not null - Then "LockBoxType" should be "Array of Strings" data type - And "LockBoxType" should only contain enum values found in the metadata - And "LockBoxType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @LotFeatures @IDX_Payload @DD1.5_LotFeatures @DD1.6_LotFeatures - Scenario: LotFeatures - Given "LotFeatures" exists in the metadata - And "LotFeatures" enum values can be compiled - And "LotFeatures" values are not null - Then "LotFeatures" should be "Array of Strings" data type - And "LotFeatures" should only contain enum values found in the metadata - And "LotFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @OperatingExpenseIncludes @DD1.5_OperatingExpenseIncludes @DD1.6_OperatingExpenseIncludes - Scenario: OperatingExpenseIncludes - Given "OperatingExpenseIncludes" exists in the metadata - And "OperatingExpenseIncludes" enum values can be compiled - And "OperatingExpenseIncludes" values are not null - Then "OperatingExpenseIncludes" should be "Array of Strings" data type - And "OperatingExpenseIncludes" should only contain enum values found in the metadata - And "OperatingExpenseIncludes" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @OtherEquipment @DD1.5_OtherEquipment @DD1.6_OtherEquipment - Scenario: OtherEquipment - Given "OtherEquipment" exists in the metadata - And "OtherEquipment" enum values can be compiled - And "OtherEquipment" values are not null - Then "OtherEquipment" should be "Array of Strings" data type - And "OtherEquipment" should only contain enum values found in the metadata - And "OtherEquipment" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @OtherStructures @DD1.5_OtherStructures @DD1.6_OtherStructures - Scenario: OtherStructures - Given "OtherStructures" exists in the metadata - And "OtherStructures" enum values can be compiled - And "OtherStructures" values are not null - Then "OtherStructures" should be "Array of Strings" data type - And "OtherStructures" should only contain enum values found in the metadata - And "OtherStructures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @OwnerPays @DD1.5_OwnerPays @DD1.6_OwnerPays - Scenario: OwnerPays - Given "OwnerPays" exists in the metadata - And "OwnerPays" enum values can be compiled - And "OwnerPays" values are not null - Then "OwnerPays" should be "Array of Strings" data type - And "OwnerPays" should only contain enum values found in the metadata - And "OwnerPays" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @ParkingFeatures @IDX_Payload @DD1.5_ParkingFeatures @DD1.6_ParkingFeatures - Scenario: ParkingFeatures - Given "ParkingFeatures" exists in the metadata - And "ParkingFeatures" enum values can be compiled - And "ParkingFeatures" values are not null - Then "ParkingFeatures" should be "Array of Strings" data type - And "ParkingFeatures" should only contain enum values found in the metadata - And "ParkingFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @PatioAndPorchFeatures @IDX_Payload @DD1.5_PatioAndPorchFeatures @DD1.6_PatioAndPorchFeatures - Scenario: PatioAndPorchFeatures - Given "PatioAndPorchFeatures" exists in the metadata - And "PatioAndPorchFeatures" enum values can be compiled - And "PatioAndPorchFeatures" values are not null - Then "PatioAndPorchFeatures" should be "Array of Strings" data type - And "PatioAndPorchFeatures" should only contain enum values found in the metadata - And "PatioAndPorchFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @PetsAllowed @DD1.5_PetsAllowed @DD1.6_PetsAllowed - Scenario: PetsAllowed - Given "PetsAllowed" exists in the metadata - And "PetsAllowed" enum values can be compiled - And "PetsAllowed" values are not null - Then "PetsAllowed" should be "Array of Strings" data type - And "PetsAllowed" should only contain enum values found in the metadata - And "PetsAllowed" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @PoolFeatures @IDX_Payload @DD1.5_PoolFeatures @DD1.6_PoolFeatures - Scenario: PoolFeatures - Given "PoolFeatures" exists in the metadata - And "PoolFeatures" enum values can be compiled - And "PoolFeatures" values are not null - Then "PoolFeatures" should be "Array of Strings" data type - And "PoolFeatures" should only contain enum values found in the metadata - And "PoolFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Possession @DD1.5_Possession @DD1.6_Possession - Scenario: Possession - Given "Possession" exists in the metadata - And "Possession" enum values can be compiled - And "Possession" values are not null - Then "Possession" should be "Array of Strings" data type - And "Possession" should only contain enum values found in the metadata - And "Possession" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @PossibleUse @IDX_Payload @DD1.5_PossibleUse @DD1.6_PossibleUse - Scenario: PossibleUse - Given "PossibleUse" exists in the metadata - And "PossibleUse" enum values can be compiled - And "PossibleUse" values are not null - Then "PossibleUse" should be "Array of Strings" data type - And "PossibleUse" should only contain enum values found in the metadata - And "PossibleUse" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @PowerProductionType @DD1.5_PowerProductionType @DD1.6_PowerProductionType - Scenario: PowerProductionType - Given "PowerProductionType" exists in the metadata - And "PowerProductionType" enum values can be compiled - And "PowerProductionType" values are not null - Then "PowerProductionType" should be "Array of Strings" data type - And "PowerProductionType" should only contain enum values found in the metadata - And "PowerProductionType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @PropertyCondition @DD1.5_PropertyCondition @DD1.6_PropertyCondition - Scenario: PropertyCondition - Given "PropertyCondition" exists in the metadata - And "PropertyCondition" enum values can be compiled - And "PropertyCondition" values are not null - Then "PropertyCondition" should be "Array of Strings" data type - And "PropertyCondition" should only contain enum values found in the metadata - And "PropertyCondition" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @RentIncludes @IDX_Payload @DD1.5_RentIncludes @DD1.6_RentIncludes - Scenario: RentIncludes - Given "RentIncludes" exists in the metadata - And "RentIncludes" enum values can be compiled - And "RentIncludes" values are not null - Then "RentIncludes" should be "Array of Strings" data type - And "RentIncludes" should only contain enum values found in the metadata - And "RentIncludes" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @RoadFrontageType @DD1.5_RoadFrontageType @DD1.6_RoadFrontageType - Scenario: RoadFrontageType - Given "RoadFrontageType" exists in the metadata - And "RoadFrontageType" enum values can be compiled - And "RoadFrontageType" values are not null - Then "RoadFrontageType" should be "Array of Strings" data type - And "RoadFrontageType" should only contain enum values found in the metadata - And "RoadFrontageType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @RoadResponsibility @DD1.5_RoadResponsibility @DD1.6_RoadResponsibility - Scenario: RoadResponsibility - Given "RoadResponsibility" exists in the metadata - And "RoadResponsibility" enum values can be compiled - And "RoadResponsibility" values are not null - Then "RoadResponsibility" should be "Array of Strings" data type - And "RoadResponsibility" should only contain enum values found in the metadata - And "RoadResponsibility" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @RoadSurfaceType @DD1.5_RoadSurfaceType @DD1.6_RoadSurfaceType - Scenario: RoadSurfaceType - Given "RoadSurfaceType" exists in the metadata - And "RoadSurfaceType" enum values can be compiled - And "RoadSurfaceType" values are not null - Then "RoadSurfaceType" should be "Array of Strings" data type - And "RoadSurfaceType" should only contain enum values found in the metadata - And "RoadSurfaceType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Roof @IDX_Payload @DD1.5_Roof @DD1.6_Roof - Scenario: Roof - Given "Roof" exists in the metadata - And "Roof" enum values can be compiled - And "Roof" values are not null - Then "Roof" should be "Array of Strings" data type - And "Roof" should only contain enum values found in the metadata - And "Roof" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @SecurityFeatures @DD1.5_SecurityFeatures @DD1.6_SecurityFeatures - Scenario: SecurityFeatures - Given "SecurityFeatures" exists in the metadata - And "SecurityFeatures" enum values can be compiled - And "SecurityFeatures" values are not null - Then "SecurityFeatures" should be "Array of Strings" data type - And "SecurityFeatures" should only contain enum values found in the metadata - And "SecurityFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Sewer @IDX_Payload @DD1.5_Sewer @DD1.6_Sewer - Scenario: Sewer - Given "Sewer" exists in the metadata - And "Sewer" enum values can be compiled - And "Sewer" values are not null - Then "Sewer" should be "Array of Strings" data type - And "Sewer" should only contain enum values found in the metadata - And "Sewer" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @ShowingContactType @DD1.5_ShowingContactType @DD1.6_ShowingContactType - Scenario: ShowingContactType - Given "ShowingContactType" exists in the metadata - And "ShowingContactType" enum values can be compiled - And "ShowingContactType" values are not null - Then "ShowingContactType" should be "Array of Strings" data type - And "ShowingContactType" should only contain enum values found in the metadata - And "ShowingContactType" length should be less than or equal to the RESO maxlength of 75 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Skirt @IDX_Payload @DD1.5_Skirt @DD1.6_Skirt - Scenario: Skirt - Given "Skirt" exists in the metadata - And "Skirt" enum values can be compiled - And "Skirt" values are not null - Then "Skirt" should be "Array of Strings" data type - And "Skirt" should only contain enum values found in the metadata - And "Skirt" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @SpaFeatures @IDX_Payload @DD1.5_SpaFeatures @DD1.6_SpaFeatures - Scenario: SpaFeatures - Given "SpaFeatures" exists in the metadata - And "SpaFeatures" enum values can be compiled - And "SpaFeatures" values are not null - Then "SpaFeatures" should be "Array of Strings" data type - And "SpaFeatures" should only contain enum values found in the metadata - And "SpaFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @SpecialLicenses @DD1.5_SpecialLicenses @DD1.6_SpecialLicenses - Scenario: SpecialLicenses - Given "SpecialLicenses" exists in the metadata - And "SpecialLicenses" enum values can be compiled - And "SpecialLicenses" values are not null - Then "SpecialLicenses" should be "Array of Strings" data type - And "SpecialLicenses" should only contain enum values found in the metadata - And "SpecialLicenses" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @SpecialListingConditions @IDX_Payload @DD1.5_SpecialListingConditions @DD1.6_SpecialListingConditions - Scenario: SpecialListingConditions - Given "SpecialListingConditions" exists in the metadata - And "SpecialListingConditions" enum values can be compiled - And "SpecialListingConditions" values are not null - Then "SpecialListingConditions" should be "Array of Strings" data type - And "SpecialListingConditions" should only contain enum values found in the metadata - And "SpecialListingConditions" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @StructureType @DD1.5_StructureType @DD1.6_StructureType - Scenario: StructureType - Given "StructureType" exists in the metadata - And "StructureType" enum values can be compiled - And "StructureType" values are not null - Then "StructureType" should be "Array of Strings" data type - And "StructureType" should only contain enum values found in the metadata - And "StructureType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @SyndicateTo @DD1.5_SyndicateTo @DD1.6_SyndicateTo - Scenario: SyndicateTo - Given "SyndicateTo" exists in the metadata - And "SyndicateTo" enum values can be compiled - And "SyndicateTo" values are not null - Then "SyndicateTo" should be "Array of Strings" data type - And "SyndicateTo" should only contain enum values found in the metadata - And "SyndicateTo" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.5 @TaxExemptions @DD1.5_TaxExemptions - Scenario: TaxExemptions - Given "TaxExemptions" exists in the metadata - And "TaxExemptions" enum values can be compiled - And "TaxExemptions" values are not null - Then "TaxExemptions" should be "Array of Strings" data type - And "TaxExemptions" should only contain enum values found in the metadata - And "TaxExemptions" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @TaxStatusCurrent @DD1.5_TaxStatusCurrent @DD1.6_TaxStatusCurrent - Scenario: TaxStatusCurrent - Given "TaxStatusCurrent" exists in the metadata - And "TaxStatusCurrent" enum values can be compiled - And "TaxStatusCurrent" values are not null - Then "TaxStatusCurrent" should be "Array of Strings" data type - And "TaxStatusCurrent" should only contain enum values found in the metadata - And "TaxStatusCurrent" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Multi @DD1.5 @Telephone @DD1.5_Telephone - Scenario: Telephone - Given "Telephone" exists in the metadata - And "Telephone" enum values can be compiled - And "Telephone" values are not null - Then "Telephone" should be "Array of Strings" data type - And "Telephone" should only contain enum values found in the metadata - And "Telephone" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @TenantPays @DD1.5_TenantPays @DD1.6_TenantPays - Scenario: TenantPays - Given "TenantPays" exists in the metadata - And "TenantPays" enum values can be compiled - And "TenantPays" values are not null - Then "TenantPays" should be "Array of Strings" data type - And "TenantPays" should only contain enum values found in the metadata - And "TenantPays" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @UnitTypeType @IDX_Payload @DD1.5_UnitTypeType @DD1.6_UnitTypeType - Scenario: UnitTypeType - Given "UnitTypeType" exists in the metadata - And "UnitTypeType" enum values can be compiled - And "UnitTypeType" values are not null - Then "UnitTypeType" should be "Array of Strings" data type - And "UnitTypeType" should only contain enum values found in the metadata - And "UnitTypeType" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Utilities @IDX_Payload @DD1.5_Utilities @DD1.6_Utilities - Scenario: Utilities - Given "Utilities" exists in the metadata - And "Utilities" enum values can be compiled - And "Utilities" values are not null - Then "Utilities" should be "Array of Strings" data type - And "Utilities" should only contain enum values found in the metadata - And "Utilities" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @Vegetation @DD1.5_Vegetation @DD1.6_Vegetation - Scenario: Vegetation - Given "Vegetation" exists in the metadata - And "Vegetation" enum values can be compiled - And "Vegetation" values are not null - Then "Vegetation" should be "Array of Strings" data type - And "Vegetation" should only contain enum values found in the metadata - And "Vegetation" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @View @IDX_Payload @DD1.5_View @DD1.6_View - Scenario: View - Given "View" exists in the metadata - And "View" enum values can be compiled - And "View" values are not null - Then "View" should be "Array of Strings" data type - And "View" should only contain enum values found in the metadata - And "View" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @WaterSource @DD1.5_WaterSource @DD1.6_WaterSource - Scenario: WaterSource - Given "WaterSource" exists in the metadata - And "WaterSource" enum values can be compiled - And "WaterSource" values are not null - Then "WaterSource" should be "Array of Strings" data type - And "WaterSource" should only contain enum values found in the metadata - And "WaterSource" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @WaterfrontFeatures @DD1.5_WaterfrontFeatures @DD1.6_WaterfrontFeatures - Scenario: WaterfrontFeatures - Given "WaterfrontFeatures" exists in the metadata - And "WaterfrontFeatures" enum values can be compiled - And "WaterfrontFeatures" values are not null - Then "WaterfrontFeatures" should be "Array of Strings" data type - And "WaterfrontFeatures" should only contain enum values found in the metadata - And "WaterfrontFeatures" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_StringList-Multi @DD1.6_StringList-Multi @DD1.5 @DD1.6 @WindowFeatures @DD1.5_WindowFeatures @DD1.6_WindowFeatures - Scenario: WindowFeatures - Given "WindowFeatures" exists in the metadata - And "WindowFeatures" enum values can be compiled - And "WindowFeatures" values are not null - Then "WindowFeatures" should be "Array of Strings" data type - And "WindowFeatures" should only contain enum values found in the metadata - And "WindowFeatures" length should be less than or equal to the RESO maxlength of 1024 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/stringlist-single.feature b/src/main/java/org/reso/certification/features/data-dictionary/stringlist-single.feature deleted file mode 100644 index cf197ff0..00000000 --- a/src/main/java/org/reso/certification/features/data-dictionary/stringlist-single.feature +++ /dev/null @@ -1,700 +0,0 @@ -Feature: StringList-Single Testing - - Background: - Given an XML Metadata file was provided - And the given file exists - And the file contains valid XML - And the file could be read by the Commander - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @AboveGradeFinishedAreaSource @DD1.5_AboveGradeFinishedAreaSource @DD1.6_AboveGradeFinishedAreaSource - Scenario: AboveGradeFinishedAreaSource - Given "AboveGradeFinishedAreaSource" exists in the metadata - And "AboveGradeFinishedAreaSource" enum values can be compiled - And "AboveGradeFinishedAreaSource" values are not null - Then "AboveGradeFinishedAreaSource" should be "String" data type - And "AboveGradeFinishedAreaSource" should only contain enum values found in the metadata - And "AboveGradeFinishedAreaSource" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @AboveGradeFinishedAreaUnits @DD1.5_AboveGradeFinishedAreaUnits @DD1.6_AboveGradeFinishedAreaUnits - Scenario: AboveGradeFinishedAreaUnits - Given "AboveGradeFinishedAreaUnits" exists in the metadata - And "AboveGradeFinishedAreaUnits" enum values can be compiled - And "AboveGradeFinishedAreaUnits" values are not null - Then "AboveGradeFinishedAreaUnits" should be "String" data type - And "AboveGradeFinishedAreaUnits" should only contain enum values found in the metadata - And "AboveGradeFinishedAreaUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.5 @ApprovalStatus @DD1.5_ApprovalStatus - Scenario: ApprovalStatus - Given "ApprovalStatus" exists in the metadata - And "ApprovalStatus" enum values can be compiled - And "ApprovalStatus" values are not null - Then "ApprovalStatus" should be "String" data type - And "ApprovalStatus" should only contain enum values found in the metadata - And "ApprovalStatus" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @AssociationFee @IDX_Payload @DD1.5_AssociationFee @DD1.6_AssociationFee2Frequency - Scenario: AssociationFee2Frequency - Given "AssociationFee2Frequency" exists in the metadata - And "AssociationFee2Frequency" enum values can be compiled - And "AssociationFee2Frequency" values are not null - Then "AssociationFee2Frequency" should be "String" data type - And "AssociationFee2Frequency" should only contain enum values found in the metadata - And "AssociationFee2Frequency" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @AssociationFee @IDX_Payload @DD1.5_AssociationFeeFrequency @DD1.6_AssociationFeeFrequency - Scenario: AssociationFeeFrequency - Given "AssociationFeeFrequency" exists in the metadata - And "AssociationFeeFrequency" enum values can be compiled - And "AssociationFeeFrequency" values are not null - Then "AssociationFeeFrequency" should be "String" data type - And "AssociationFeeFrequency" should only contain enum values found in the metadata - And "AssociationFeeFrequency" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @BelowGradeFinishedAreaSource @DD1.5_BelowGradeFinishedAreaSource @DD1.6_BelowGradeFinishedAreaSource - Scenario: BelowGradeFinishedAreaSource - Given "BelowGradeFinishedAreaSource" exists in the metadata - And "BelowGradeFinishedAreaSource" enum values can be compiled - And "BelowGradeFinishedAreaSource" values are not null - Then "BelowGradeFinishedAreaSource" should be "String" data type - And "BelowGradeFinishedAreaSource" should only contain enum values found in the metadata - And "BelowGradeFinishedAreaSource" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @BelowGradeFinishedAreaUnits @DD1.5_BelowGradeFinishedAreaUnits @DD1.6_BelowGradeFinishedAreaUnits - Scenario: BelowGradeFinishedAreaUnits - Given "BelowGradeFinishedAreaUnits" exists in the metadata - And "BelowGradeFinishedAreaUnits" enum values can be compiled - And "BelowGradeFinishedAreaUnits" values are not null - Then "BelowGradeFinishedAreaUnits" should be "String" data type - And "BelowGradeFinishedAreaUnits" should only contain enum values found in the metadata - And "BelowGradeFinishedAreaUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @BuildingAreaSource @DD1.5_BuildingAreaSource @DD1.6_BuildingAreaSource - Scenario: BuildingAreaSource - Given "BuildingAreaSource" exists in the metadata - And "BuildingAreaSource" enum values can be compiled - And "BuildingAreaSource" values are not null - Then "BuildingAreaSource" should be "String" data type - And "BuildingAreaSource" should only contain enum values found in the metadata - And "BuildingAreaSource" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @BuildingAreaUnits @DD1.5_BuildingAreaUnits @DD1.6_BuildingAreaUnits - Scenario: BuildingAreaUnits - Given "BuildingAreaUnits" exists in the metadata - And "BuildingAreaUnits" enum values can be compiled - And "BuildingAreaUnits" values are not null - Then "BuildingAreaUnits" should be "String" data type - And "BuildingAreaUnits" should only contain enum values found in the metadata - And "BuildingAreaUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @BuyerAgencyCompensationType @DD1.5_BuyerAgencyCompensationType @DD1.6_BuyerAgencyCompensationType - Scenario: BuyerAgencyCompensationType - Given "BuyerAgencyCompensationType" exists in the metadata - And "BuyerAgencyCompensationType" enum values can be compiled - And "BuyerAgencyCompensationType" values are not null - Then "BuyerAgencyCompensationType" should be "String" data type - And "BuyerAgencyCompensationType" should only contain enum values found in the metadata - And "BuyerAgencyCompensationType" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @BuyerAgentAOR @DD1.5_BuyerAgentAOR @DD1.6_BuyerAgentAOR - Scenario: BuyerAgentAOR - Given "BuyerAgentAOR" exists in the metadata - And "BuyerAgentAOR" enum values can be compiled - And "BuyerAgentAOR" values are not null - Then "BuyerAgentAOR" should be "String" data type - And "BuyerAgentAOR" should only contain enum values found in the metadata - And "BuyerAgentAOR" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @BuyerOfficeAOR @DD1.5_BuyerOfficeAOR @DD1.6_BuyerOfficeAOR - Scenario: BuyerOfficeAOR - Given "BuyerOfficeAOR" exists in the metadata - And "BuyerOfficeAOR" enum values can be compiled - And "BuyerOfficeAOR" values are not null - Then "BuyerOfficeAOR" should be "String" data type - And "BuyerOfficeAOR" should only contain enum values found in the metadata - And "BuyerOfficeAOR" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @City @IDX_Payload @DD1.5_City @DD1.6_City - Scenario: City - Given "City" exists in the metadata - And "City" enum values can be compiled - And "City" values are not null - Then "City" should be "String" data type - And "City" should only contain enum values found in the metadata - And "City" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @CoBuyerAgentAOR @DD1.5_CoBuyerAgentAOR @DD1.6_CoBuyerAgentAOR - Scenario: CoBuyerAgentAOR - Given "CoBuyerAgentAOR" exists in the metadata - And "CoBuyerAgentAOR" enum values can be compiled - And "CoBuyerAgentAOR" values are not null - Then "CoBuyerAgentAOR" should be "String" data type - And "CoBuyerAgentAOR" should only contain enum values found in the metadata - And "CoBuyerAgentAOR" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @CoBuyerOfficeAOR @DD1.5_CoBuyerOfficeAOR @DD1.6_CoBuyerOfficeAOR - Scenario: CoBuyerOfficeAOR - Given "CoBuyerOfficeAOR" exists in the metadata - And "CoBuyerOfficeAOR" enum values can be compiled - And "CoBuyerOfficeAOR" values are not null - Then "CoBuyerOfficeAOR" should be "String" data type - And "CoBuyerOfficeAOR" should only contain enum values found in the metadata - And "CoBuyerOfficeAOR" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @CoListAgentAOR @DD1.5_CoListAgentAOR @DD1.6_CoListAgentAOR - Scenario: CoListAgentAOR - Given "CoListAgentAOR" exists in the metadata - And "CoListAgentAOR" enum values can be compiled - And "CoListAgentAOR" values are not null - Then "CoListAgentAOR" should be "String" data type - And "CoListAgentAOR" should only contain enum values found in the metadata - And "CoListAgentAOR" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @CoListOfficeAOR @DD1.5_CoListOfficeAOR @DD1.6_CoListOfficeAOR - Scenario: CoListOfficeAOR - Given "CoListOfficeAOR" exists in the metadata - And "CoListOfficeAOR" enum values can be compiled - And "CoListOfficeAOR" values are not null - Then "CoListOfficeAOR" should be "String" data type - And "CoListOfficeAOR" should only contain enum values found in the metadata - And "CoListOfficeAOR" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @Concessions @DD1.5_Concessions @DD1.6_Concessions - Scenario: Concessions - Given "Concessions" exists in the metadata - And "Concessions" enum values can be compiled - And "Concessions" values are not null - Then "Concessions" should be "String" data type - And "Concessions" should only contain enum values found in the metadata - And "Concessions" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @Country @DD1.5_Country @DD1.6_Country - Scenario: Country - Given "Country" exists in the metadata - And "Country" enum values can be compiled - And "Country" values are not null - Then "Country" should be "String" data type - And "Country" should only contain enum values found in the metadata - And "Country" length should be less than or equal to the RESO maxlength of 2 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @CountyOrParish @IDX_Payload @DD1.5_CountyOrParish @DD1.6_CountyOrParish - Scenario: CountyOrParish - Given "CountyOrParish" exists in the metadata - And "CountyOrParish" enum values can be compiled - And "CountyOrParish" values are not null - Then "CountyOrParish" should be "String" data type - And "CountyOrParish" should only contain enum values found in the metadata - And "CountyOrParish" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DirectionFaces @IDX_Payload @DD1.5_DirectionFaces @DD1.6_DirectionFaces - Scenario: DirectionFaces - Given "DirectionFaces" exists in the metadata - And "DirectionFaces" enum values can be compiled - And "DirectionFaces" values are not null - Then "DirectionFaces" should be "String" data type - And "DirectionFaces" should only contain enum values found in the metadata - And "DirectionFaces" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToBusUnits @DD1.5_DistanceToBusUnits @DD1.6_DistanceToBusUnits - Scenario: DistanceToBusUnits - Given "DistanceToBusUnits" exists in the metadata - And "DistanceToBusUnits" enum values can be compiled - And "DistanceToBusUnits" values are not null - Then "DistanceToBusUnits" should be "String" data type - And "DistanceToBusUnits" should only contain enum values found in the metadata - And "DistanceToBusUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToElectricUnits @DD1.5_DistanceToElectricUnits @DD1.6_DistanceToElectricUnits - Scenario: DistanceToElectricUnits - Given "DistanceToElectricUnits" exists in the metadata - And "DistanceToElectricUnits" enum values can be compiled - And "DistanceToElectricUnits" values are not null - Then "DistanceToElectricUnits" should be "String" data type - And "DistanceToElectricUnits" should only contain enum values found in the metadata - And "DistanceToElectricUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToFreewayUnits @DD1.5_DistanceToFreewayUnits @DD1.6_DistanceToFreewayUnits - Scenario: DistanceToFreewayUnits - Given "DistanceToFreewayUnits" exists in the metadata - And "DistanceToFreewayUnits" enum values can be compiled - And "DistanceToFreewayUnits" values are not null - Then "DistanceToFreewayUnits" should be "String" data type - And "DistanceToFreewayUnits" should only contain enum values found in the metadata - And "DistanceToFreewayUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToGasUnits @DD1.5_DistanceToGasUnits @DD1.6_DistanceToGasUnits - Scenario: DistanceToGasUnits - Given "DistanceToGasUnits" exists in the metadata - And "DistanceToGasUnits" enum values can be compiled - And "DistanceToGasUnits" values are not null - Then "DistanceToGasUnits" should be "String" data type - And "DistanceToGasUnits" should only contain enum values found in the metadata - And "DistanceToGasUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToPhoneServiceUnits @DD1.5_DistanceToPhoneServiceUnits @DD1.6_DistanceToPhoneServiceUnits - Scenario: DistanceToPhoneServiceUnits - Given "DistanceToPhoneServiceUnits" exists in the metadata - And "DistanceToPhoneServiceUnits" enum values can be compiled - And "DistanceToPhoneServiceUnits" values are not null - Then "DistanceToPhoneServiceUnits" should be "String" data type - And "DistanceToPhoneServiceUnits" should only contain enum values found in the metadata - And "DistanceToPhoneServiceUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToPlaceofWorshipUnits @DD1.5_DistanceToPlaceofWorshipUnits @DD1.6_DistanceToPlaceofWorshipUnits - Scenario: DistanceToPlaceofWorshipUnits - Given "DistanceToPlaceofWorshipUnits" exists in the metadata - And "DistanceToPlaceofWorshipUnits" enum values can be compiled - And "DistanceToPlaceofWorshipUnits" values are not null - Then "DistanceToPlaceofWorshipUnits" should be "String" data type - And "DistanceToPlaceofWorshipUnits" should only contain enum values found in the metadata - And "DistanceToPlaceofWorshipUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToSchoolBusUnits @DD1.5_DistanceToSchoolBusUnits @DD1.6_DistanceToSchoolBusUnits - Scenario: DistanceToSchoolBusUnits - Given "DistanceToSchoolBusUnits" exists in the metadata - And "DistanceToSchoolBusUnits" enum values can be compiled - And "DistanceToSchoolBusUnits" values are not null - Then "DistanceToSchoolBusUnits" should be "String" data type - And "DistanceToSchoolBusUnits" should only contain enum values found in the metadata - And "DistanceToSchoolBusUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToSchoolsUnits @DD1.5_DistanceToSchoolsUnits @DD1.6_DistanceToSchoolsUnits - Scenario: DistanceToSchoolsUnits - Given "DistanceToSchoolsUnits" exists in the metadata - And "DistanceToSchoolsUnits" enum values can be compiled - And "DistanceToSchoolsUnits" values are not null - Then "DistanceToSchoolsUnits" should be "String" data type - And "DistanceToSchoolsUnits" should only contain enum values found in the metadata - And "DistanceToSchoolsUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToSewerUnits @DD1.5_DistanceToSewerUnits @DD1.6_DistanceToSewerUnits - Scenario: DistanceToSewerUnits - Given "DistanceToSewerUnits" exists in the metadata - And "DistanceToSewerUnits" enum values can be compiled - And "DistanceToSewerUnits" values are not null - Then "DistanceToSewerUnits" should be "String" data type - And "DistanceToSewerUnits" should only contain enum values found in the metadata - And "DistanceToSewerUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToShoppingUnits @DD1.5_DistanceToShoppingUnits @DD1.6_DistanceToShoppingUnits - Scenario: DistanceToShoppingUnits - Given "DistanceToShoppingUnits" exists in the metadata - And "DistanceToShoppingUnits" enum values can be compiled - And "DistanceToShoppingUnits" values are not null - Then "DistanceToShoppingUnits" should be "String" data type - And "DistanceToShoppingUnits" should only contain enum values found in the metadata - And "DistanceToShoppingUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToStreetUnits @DD1.5_DistanceToStreetUnits @DD1.6_DistanceToStreetUnits - Scenario: DistanceToStreetUnits - Given "DistanceToStreetUnits" exists in the metadata - And "DistanceToStreetUnits" enum values can be compiled - And "DistanceToStreetUnits" values are not null - Then "DistanceToStreetUnits" should be "String" data type - And "DistanceToStreetUnits" should only contain enum values found in the metadata - And "DistanceToStreetUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @DistanceToWaterUnits @DD1.5_DistanceToWaterUnits @DD1.6_DistanceToWaterUnits - Scenario: DistanceToWaterUnits - Given "DistanceToWaterUnits" exists in the metadata - And "DistanceToWaterUnits" enum values can be compiled - And "DistanceToWaterUnits" values are not null - Then "DistanceToWaterUnits" should be "String" data type - And "DistanceToWaterUnits" should only contain enum values found in the metadata - And "DistanceToWaterUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @ElementarySchool @IDX_Payload @DD1.5_ElementarySchool @DD1.6_ElementarySchool - Scenario: ElementarySchool - Given "ElementarySchool" exists in the metadata - And "ElementarySchool" enum values can be compiled - And "ElementarySchool" values are not null - Then "ElementarySchool" should be "String" data type - And "ElementarySchool" should only contain enum values found in the metadata - And "ElementarySchool" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @ElementarySchool @IDX_Payload @DD1.5_ElementarySchoolDistrict @DD1.6_ElementarySchoolDistrict - Scenario: ElementarySchoolDistrict - Given "ElementarySchoolDistrict" exists in the metadata - And "ElementarySchoolDistrict" enum values can be compiled - And "ElementarySchoolDistrict" values are not null - Then "ElementarySchoolDistrict" should be "String" data type - And "ElementarySchoolDistrict" should only contain enum values found in the metadata - And "ElementarySchoolDistrict" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @ElevationUnits @DD1.5_ElevationUnits @DD1.6_ElevationUnits - Scenario: ElevationUnits - Given "ElevationUnits" exists in the metadata - And "ElevationUnits" enum values can be compiled - And "ElevationUnits" values are not null - Then "ElevationUnits" should be "String" data type - And "ElevationUnits" should only contain enum values found in the metadata - And "ElevationUnits" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @FarmLandAreaSource @DD1.5_FarmLandAreaSource @DD1.6_FarmLandAreaSource - Scenario: FarmLandAreaSource - Given "FarmLandAreaSource" exists in the metadata - And "FarmLandAreaSource" enum values can be compiled - And "FarmLandAreaSource" values are not null - Then "FarmLandAreaSource" should be "String" data type - And "FarmLandAreaSource" should only contain enum values found in the metadata - And "FarmLandAreaSource" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @FarmLandAreaUnits @DD1.5_FarmLandAreaUnits @DD1.6_FarmLandAreaUnits - Scenario: FarmLandAreaUnits - Given "FarmLandAreaUnits" exists in the metadata - And "FarmLandAreaUnits" enum values can be compiled - And "FarmLandAreaUnits" values are not null - Then "FarmLandAreaUnits" should be "String" data type - And "FarmLandAreaUnits" should only contain enum values found in the metadata - And "FarmLandAreaUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @Furnished @DD1.5_Furnished @DD1.6_Furnished - Scenario: Furnished - Given "Furnished" exists in the metadata - And "Furnished" enum values can be compiled - And "Furnished" values are not null - Then "Furnished" should be "String" data type - And "Furnished" should only contain enum values found in the metadata - And "Furnished" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @HighSchool @IDX_Payload @DD1.5_HighSchool @DD1.6_HighSchool - Scenario: HighSchool - Given "HighSchool" exists in the metadata - And "HighSchool" enum values can be compiled - And "HighSchool" values are not null - Then "HighSchool" should be "String" data type - And "HighSchool" should only contain enum values found in the metadata - And "HighSchool" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @HighSchool @IDX_Payload @DD1.5_HighSchoolDistrict @DD1.6_HighSchoolDistrict - Scenario: HighSchoolDistrict - Given "HighSchoolDistrict" exists in the metadata - And "HighSchoolDistrict" enum values can be compiled - And "HighSchoolDistrict" values are not null - Then "HighSchoolDistrict" should be "String" data type - And "HighSchoolDistrict" should only contain enum values found in the metadata - And "HighSchoolDistrict" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @LandLeaseAmountFrequency @DD1.5_LandLeaseAmountFrequency @DD1.6_LandLeaseAmountFrequency - Scenario: LandLeaseAmountFrequency - Given "LandLeaseAmountFrequency" exists in the metadata - And "LandLeaseAmountFrequency" enum values can be compiled - And "LandLeaseAmountFrequency" values are not null - Then "LandLeaseAmountFrequency" should be "String" data type - And "LandLeaseAmountFrequency" should only contain enum values found in the metadata - And "LandLeaseAmountFrequency" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @LeasableAreaUnits @DD1.5_LeasableAreaUnits @DD1.6_LeasableAreaUnits - Scenario: LeasableAreaUnits - Given "LeasableAreaUnits" exists in the metadata - And "LeasableAreaUnits" enum values can be compiled - And "LeasableAreaUnits" values are not null - Then "LeasableAreaUnits" should be "String" data type - And "LeasableAreaUnits" should only contain enum values found in the metadata - And "LeasableAreaUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @LeaseAmountFrequency @DD1.5_LeaseAmountFrequency @DD1.6_LeaseAmountFrequency - Scenario: LeaseAmountFrequency - Given "LeaseAmountFrequency" exists in the metadata - And "LeaseAmountFrequency" enum values can be compiled - And "LeaseAmountFrequency" values are not null - Then "LeaseAmountFrequency" should be "String" data type - And "LeaseAmountFrequency" should only contain enum values found in the metadata - And "LeaseAmountFrequency" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @LeaseTerm @DD1.5_LeaseTerm @DD1.6_LeaseTerm - Scenario: LeaseTerm - Given "LeaseTerm" exists in the metadata - And "LeaseTerm" enum values can be compiled - And "LeaseTerm" values are not null - Then "LeaseTerm" should be "String" data type - And "LeaseTerm" should only contain enum values found in the metadata - And "LeaseTerm" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @xxx @DD1.5_ListAOR @DD1.6_ListAOR - Scenario: ListAOR - Given "ListAOR" exists in the metadata - And "ListAOR" enum values can be compiled - And "ListAOR" values are not null - Then "ListAOR" should be "String" data type - And "ListAOR" should only contain enum values found in the metadata - And "ListAOR" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @ListAgentAOR @DD1.5_ListAgentAOR @DD1.6_ListAgentAOR - Scenario: ListAgentAOR - Given "ListAgentAOR" exists in the metadata - And "ListAgentAOR" enum values can be compiled - And "ListAgentAOR" values are not null - Then "ListAgentAOR" should be "String" data type - And "ListAgentAOR" should only contain enum values found in the metadata - And "ListAgentAOR" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @ListOfficeAOR @DD1.5_ListOfficeAOR @DD1.6_ListOfficeAOR - Scenario: ListOfficeAOR - Given "ListOfficeAOR" exists in the metadata - And "ListOfficeAOR" enum values can be compiled - And "ListOfficeAOR" values are not null - Then "ListOfficeAOR" should be "String" data type - And "ListOfficeAOR" should only contain enum values found in the metadata - And "ListOfficeAOR" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @ListingAgreement @DD1.5_ListingAgreement @DD1.6_ListingAgreement - Scenario: ListingAgreement - Given "ListingAgreement" exists in the metadata - And "ListingAgreement" enum values can be compiled - And "ListingAgreement" values are not null - Then "ListingAgreement" should be "String" data type - And "ListingAgreement" should only contain enum values found in the metadata - And "ListingAgreement" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @ListingService @DD1.5_ListingService @DD1.6_ListingService - Scenario: ListingService - Given "ListingService" exists in the metadata - And "ListingService" enum values can be compiled - And "ListingService" values are not null - Then "ListingService" should be "String" data type - And "ListingService" should only contain enum values found in the metadata - And "ListingService" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @LivingArea @IDX_Payload @DD1.5_LivingAreaSource @DD1.6_LivingAreaSource - Scenario: LivingAreaSource - Given "LivingAreaSource" exists in the metadata - And "LivingAreaSource" enum values can be compiled - And "LivingAreaSource" values are not null - Then "LivingAreaSource" should be "String" data type - And "LivingAreaSource" should only contain enum values found in the metadata - And "LivingAreaSource" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @LivingArea @IDX_Payload @DD1.5_LivingAreaUnits @DD1.6_LivingAreaUnits - Scenario: LivingAreaUnits - Given "LivingAreaUnits" exists in the metadata - And "LivingAreaUnits" enum values can be compiled - And "LivingAreaUnits" values are not null - Then "LivingAreaUnits" should be "String" data type - And "LivingAreaUnits" should only contain enum values found in the metadata - And "LivingAreaUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @LotDimensionsSource @DD1.5_LotDimensionsSource @DD1.6_LotDimensionsSource - Scenario: LotDimensionsSource - Given "LotDimensionsSource" exists in the metadata - And "LotDimensionsSource" enum values can be compiled - And "LotDimensionsSource" values are not null - Then "LotDimensionsSource" should be "String" data type - And "LotDimensionsSource" should only contain enum values found in the metadata - And "LotDimensionsSource" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @LotSizeSource @DD1.5_LotSizeSource @DD1.6_LotSizeSource - Scenario: LotSizeSource - Given "LotSizeSource" exists in the metadata - And "LotSizeSource" enum values can be compiled - And "LotSizeSource" values are not null - Then "LotSizeSource" should be "String" data type - And "LotSizeSource" should only contain enum values found in the metadata - And "LotSizeSource" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @LotSizeUnits @IDX_Payload @DD1.5_LotSizeUnits @DD1.6_LotSizeUnits - Scenario: LotSizeUnits - Given "LotSizeUnits" exists in the metadata - And "LotSizeUnits" enum values can be compiled - And "LotSizeUnits" values are not null - Then "LotSizeUnits" should be "String" data type - And "LotSizeUnits" should only contain enum values found in the metadata - And "LotSizeUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @MLSAreaMajor @IDX_Payload @DD1.5_MLSAreaMajor @DD1.6_MLSAreaMajor - Scenario: MLSAreaMajor - Given "MLSAreaMajor" exists in the metadata - And "MLSAreaMajor" enum values can be compiled - And "MLSAreaMajor" values are not null - Then "MLSAreaMajor" should be "String" data type - And "MLSAreaMajor" should only contain enum values found in the metadata - And "MLSAreaMajor" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @MLSAreaMinor @DD1.5_MLSAreaMinor @DD1.6_MLSAreaMinor - Scenario: MLSAreaMinor - Given "MLSAreaMinor" exists in the metadata - And "MLSAreaMinor" enum values can be compiled - And "MLSAreaMinor" values are not null - Then "MLSAreaMinor" should be "String" data type - And "MLSAreaMinor" should only contain enum values found in the metadata - And "MLSAreaMinor" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @MajorChangeType @DD1.5_MajorChangeType @DD1.6_MajorChangeType - Scenario: MajorChangeType - Given "MajorChangeType" exists in the metadata - And "MajorChangeType" enum values can be compiled - And "MajorChangeType" values are not null - Then "MajorChangeType" should be "String" data type - And "MajorChangeType" should only contain enum values found in the metadata - And "MajorChangeType" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @MiddleOrJuniorSchool @IDX_Payload @DD1.5_MiddleOrJuniorSchool @DD1.6_MiddleOrJuniorSchool - Scenario: MiddleOrJuniorSchool - Given "MiddleOrJuniorSchool" exists in the metadata - And "MiddleOrJuniorSchool" enum values can be compiled - And "MiddleOrJuniorSchool" values are not null - Then "MiddleOrJuniorSchool" should be "String" data type - And "MiddleOrJuniorSchool" should only contain enum values found in the metadata - And "MiddleOrJuniorSchool" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @xxx @DD1.5_MiddleOrJuniorSchoolDistrict @DD1.6_MiddleOrJuniorSchoolDistrict - Scenario: MiddleOrJuniorSchoolDistrict - Given "MiddleOrJuniorSchoolDistrict" exists in the metadata - And "MiddleOrJuniorSchoolDistrict" enum values can be compiled - And "MiddleOrJuniorSchoolDistrict" values are not null - Then "MiddleOrJuniorSchoolDistrict" should be "String" data type - And "MiddleOrJuniorSchoolDistrict" should only contain enum values found in the metadata - And "MiddleOrJuniorSchoolDistrict" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @MlsStatus @IDX_Payload @DD1.5_MlsStatus @DD1.6_MlsStatus - Scenario: MlsStatus - Given "MlsStatus" exists in the metadata - And "MlsStatus" enum values can be compiled - And "MlsStatus" values are not null - Then "MlsStatus" should be "String" data type - And "MlsStatus" should only contain enum values found in the metadata - And "MlsStatus" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @MobileDimUnits @DD1.5_MobileDimUnits @DD1.6_MobileDimUnits - Scenario: MobileDimUnits - Given "MobileDimUnits" exists in the metadata - And "MobileDimUnits" enum values can be compiled - And "MobileDimUnits" values are not null - Then "MobileDimUnits" should be "String" data type - And "MobileDimUnits" should only contain enum values found in the metadata - And "MobileDimUnits" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @OccupantType @DD1.5_OccupantType @DD1.6_OccupantType - Scenario: OccupantType - Given "OccupantType" exists in the metadata - And "OccupantType" enum values can be compiled - And "OccupantType" values are not null - Then "OccupantType" should be "String" data type - And "OccupantType" should only contain enum values found in the metadata - And "OccupantType" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @OwnershipType @DD1.5_OwnershipType @DD1.6_OwnershipType - Scenario: OwnershipType - Given "OwnershipType" exists in the metadata - And "OwnershipType" enum values can be compiled - And "OwnershipType" values are not null - Then "OwnershipType" should be "String" data type - And "OwnershipType" should only contain enum values found in the metadata - And "OwnershipType" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @PostalCity @DD1.5_PostalCity @DD1.6_PostalCity - Scenario: PostalCity - Given "PostalCity" exists in the metadata - And "PostalCity" enum values can be compiled - And "PostalCity" values are not null - Then "PostalCity" should be "String" data type - And "PostalCity" should only contain enum values found in the metadata - And "PostalCity" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @PropertySubType @IDX_Payload @DD1.5_PropertySubType @DD1.6_PropertySubType - Scenario: PropertySubType - Given "PropertySubType" exists in the metadata - And "PropertySubType" enum values can be compiled - And "PropertySubType" values are not null - Then "PropertySubType" should be "String" data type - And "PropertySubType" should only contain enum values found in the metadata - And "PropertySubType" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @PropertyType @IDX_Payload @DD1.5_PropertyType @DD1.6_PropertyType - Scenario: PropertyType - Given "PropertyType" exists in the metadata - And "PropertyType" enum values can be compiled - And "PropertyType" values are not null - Then "PropertyType" should be "String" data type - And "PropertyType" should only contain enum values found in the metadata - And "PropertyType" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @StandardStatus @IDX_Payload @DD1.5_StandardStatus @DD1.6_StandardStatus - Scenario: StandardStatus - Given "StandardStatus" exists in the metadata - And "StandardStatus" enum values can be compiled - And "StandardStatus" values are not null - Then "StandardStatus" should be "String" data type - And "StandardStatus" should only contain enum values found in the metadata - And "StandardStatus" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @StateOrProvince @IDX_Payload @DD1.5_StateOrProvince @DD1.6_StateOrProvince - Scenario: StateOrProvince - Given "StateOrProvince" exists in the metadata - And "StateOrProvince" enum values can be compiled - And "StateOrProvince" values are not null - Then "StateOrProvince" should be "String" data type - And "StateOrProvince" should only contain enum values found in the metadata - And "StateOrProvince" length should be less than or equal to the RESO maxlength of 2 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @StreetDirPrefix @IDX_Payload @DD1.5_StreetDirPrefix @DD1.6_StreetDirPrefix - Scenario: StreetDirPrefix - Given "StreetDirPrefix" exists in the metadata - And "StreetDirPrefix" enum values can be compiled - And "StreetDirPrefix" values are not null - Then "StreetDirPrefix" should be "String" data type - And "StreetDirPrefix" should only contain enum values found in the metadata - And "StreetDirPrefix" length should be less than or equal to the RESO maxlength of 15 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @StreetDirSuffix @IDX_Payload @DD1.5_StreetDirSuffix @DD1.6_StreetDirSuffix - Scenario: StreetDirSuffix - Given "StreetDirSuffix" exists in the metadata - And "StreetDirSuffix" enum values can be compiled - And "StreetDirSuffix" values are not null - Then "StreetDirSuffix" should be "String" data type - And "StreetDirSuffix" should only contain enum values found in the metadata - And "StreetDirSuffix" length should be less than or equal to the RESO maxlength of 15 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @StreetSuffix @IDX_Payload @DD1.5_StreetSuffix @DD1.6_StreetSuffix - Scenario: StreetSuffix - Given "StreetSuffix" exists in the metadata - And "StreetSuffix" enum values can be compiled - And "StreetSuffix" values are not null - Then "StreetSuffix" should be "String" data type - And "StreetSuffix" should only contain enum values found in the metadata - And "StreetSuffix" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @SubAgencyCompensationType @DD1.5_SubAgencyCompensationType @DD1.6_SubAgencyCompensationType - Scenario: SubAgencyCompensationType - Given "SubAgencyCompensationType" exists in the metadata - And "SubAgencyCompensationType" enum values can be compiled - And "SubAgencyCompensationType" values are not null - Then "SubAgencyCompensationType" should be "String" data type - And "SubAgencyCompensationType" should only contain enum values found in the metadata - And "SubAgencyCompensationType" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @TransactionBrokerCompensationType @DD1.5_TransactionBrokerCompensationType @DD1.6_TransactionBrokerCompensationType - Scenario: TransactionBrokerCompensationType - Given "TransactionBrokerCompensationType" exists in the metadata - And "TransactionBrokerCompensationType" enum values can be compiled - And "TransactionBrokerCompensationType" values are not null - Then "TransactionBrokerCompensationType" should be "String" data type - And "TransactionBrokerCompensationType" should only contain enum values found in the metadata - And "TransactionBrokerCompensationType" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @UnitsFurnished @DD1.5_UnitsFurnished @DD1.6_UnitsFurnished - Scenario: UnitsFurnished - Given "UnitsFurnished" exists in the metadata - And "UnitsFurnished" enum values can be compiled - And "UnitsFurnished" values are not null - Then "UnitsFurnished" should be "String" data type - And "UnitsFurnished" should only contain enum values found in the metadata - And "UnitsFurnished" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_StringList-Single @DD1.6_StringList-Single @DD1.5 @DD1.6 @YearBuiltSource @DD1.5_YearBuiltSource @DD1.6_YearBuiltSource - Scenario: YearBuiltSource - Given "YearBuiltSource" exists in the metadata - And "YearBuiltSource" enum values can be compiled - And "YearBuiltSource" values are not null - Then "YearBuiltSource" should be "String" data type - And "YearBuiltSource" should only contain enum values found in the metadata - And "YearBuiltSource" length should be less than or equal to the RESO maxlength of 60 - - @DD1.6_StringList-Single @DD1.6 @CommonInterest @DD1.6_CommonInterest - Scenario: CommonInterest - Given "CommonInterest" exists in the metadata - And "CommonInterest" enum values can be compiled - And "CommonInterest" values are not null - Then "CommonInterest" should be "String" data type - And "CommonInterest" should only contain enum values found in the metadata - And "CommonInterest" length should be less than or equal to the RESO maxlength of 60 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/strings.feature b/src/main/java/org/reso/certification/features/data-dictionary/strings.feature deleted file mode 100644 index 3d8a6264..00000000 --- a/src/main/java/org/reso/certification/features/data-dictionary/strings.feature +++ /dev/null @@ -1,2048 +0,0 @@ -Feature: String Testing - - Background: - Given an XML Metadata file was provided - And the given file exists - And the file contains valid XML - And the file could be read by the Commander - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @AccessCode @DD1.5_AccessCode @DD1.6_AccessCode - Scenario: AccessCode - Given "AccessCode" exists in the metadata - And "AccessCode" values are not null - Then "AccessCode" should be "String" data type - And "AccessCode" length should be between the bounds in the metadata - And "AccessCode" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @AdditionalParcelsDescription @DD1.5_AdditionalParcelsDescription @DD1.6_AdditionalParcelsDescription - Scenario: AdditionalParcelsDescription - Given "AdditionalParcelsDescription" exists in the metadata - And "AdditionalParcelsDescription" values are not null - Then "AdditionalParcelsDescription" should be "String" data type - And "AdditionalParcelsDescription" length should be between the bounds in the metadata - And "AdditionalParcelsDescription" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @AnchorsCoTenants @DD1.5_AnchorsCoTenants @DD1.6_AnchorsCoTenants - Scenario: AnchorsCoTenants - Given "AnchorsCoTenants" exists in the metadata - And "AnchorsCoTenants" values are not null - Then "AnchorsCoTenants" should be "String" data type - And "AnchorsCoTenants" length should be between the bounds in the metadata - And "AnchorsCoTenants" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @AssociationName @DD1.5_AssociationName @DD1.6_AssociationName - Scenario: AssociationName - Given "AssociationName" exists in the metadata - And "AssociationName" values are not null - Then "AssociationName" should be "String" data type - And "AssociationName" length should be between the bounds in the metadata - And "AssociationName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @AssociationName2 @DD1.5_AssociationName @DD1.6_AssociationName2 - Scenario: AssociationName2 - Given "AssociationName2" exists in the metadata - And "AssociationName2" values are not null - Then "AssociationName2" should be "String" data type - And "AssociationName2" length should be between the bounds in the metadata - And "AssociationName2" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @AssociationPhone @DD1.5_AssociationPhone @DD1.6_AssociationPhone - Scenario: AssociationPhone - Given "AssociationPhone" exists in the metadata - And "AssociationPhone" values are not null - Then "AssociationPhone" should be "String" data type - And "AssociationPhone" length should be between the bounds in the metadata - And "AssociationPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @AssociationPhone2 @DD1.5_AssociationPhone @DD1.6_AssociationPhone2 - Scenario: AssociationPhone2 - Given "AssociationPhone2" exists in the metadata - And "AssociationPhone2" values are not null - Then "AssociationPhone2" should be "String" data type - And "AssociationPhone2" length should be between the bounds in the metadata - And "AssociationPhone2" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuilderModel @DD1.5_BuilderModel @DD1.6_BuilderModel - Scenario: BuilderModel - Given "BuilderModel" exists in the metadata - And "BuilderModel" values are not null - Then "BuilderModel" should be "String" data type - And "BuilderModel" length should be between the bounds in the metadata - And "BuilderModel" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuildingName @DD1.5_BuildingName @DD1.6_BuildingName - Scenario: BuildingName - Given "BuildingName" exists in the metadata - And "BuildingName" values are not null - Then "BuildingName" should be "String" data type - And "BuildingName" length should be between the bounds in the metadata - And "BuildingName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BusinessName @DD1.5_BusinessName @DD1.6_BusinessName - Scenario: BusinessName - Given "BusinessName" exists in the metadata - And "BusinessName" values are not null - Then "BusinessName" should be "String" data type - And "BusinessName" length should be between the bounds in the metadata - And "BusinessName" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgencyCompensation @DD1.5_BuyerAgencyCompensation @DD1.6_BuyerAgencyCompensation - Scenario: BuyerAgencyCompensation - Given "BuyerAgencyCompensation" exists in the metadata - And "BuyerAgencyCompensation" values are not null - Then "BuyerAgencyCompensation" should be "String" data type - And "BuyerAgencyCompensation" length should be between the bounds in the metadata - And "BuyerAgencyCompensation" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentHomePhone @DD1.5_BuyerAgentHomePhone @DD1.6_BuyerAgentHomePhone - Scenario: BuyerAgentHomePhone - Given "BuyerAgentHomePhone" exists in the metadata - And "BuyerAgentHomePhone" values are not null - Then "BuyerAgentHomePhone" should be "String" data type - And "BuyerAgentHomePhone" length should be between the bounds in the metadata - And "BuyerAgentHomePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentKey @DD1.5_BuyerAgentKey @DD1.6_BuyerAgentKey - Scenario: BuyerAgentKey - Given "BuyerAgentKey" exists in the metadata - And "BuyerAgentKey" values are not null - Then "BuyerAgentKey" should be "String" data type - And "BuyerAgentKey" length should be between the bounds in the metadata - And "BuyerAgentKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentMlsId @IDX_Payload @DD1.5_BuyerAgentMlsId @DD1.6_BuyerAgentMlsId - Scenario: BuyerAgentMlsId - Given "BuyerAgentMlsId" exists in the metadata - And "BuyerAgentMlsId" values are not null - Then "BuyerAgentMlsId" should be "String" data type - And "BuyerAgentMlsId" length should be between the bounds in the metadata - And "BuyerAgentMlsId" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentNamePrefix @DD1.5_BuyerAgentNamePrefix @DD1.6_BuyerAgentNamePrefix - Scenario: BuyerAgentNamePrefix - Given "BuyerAgentNamePrefix" exists in the metadata - And "BuyerAgentNamePrefix" values are not null - Then "BuyerAgentNamePrefix" should be "String" data type - And "BuyerAgentNamePrefix" length should be between the bounds in the metadata - And "BuyerAgentNamePrefix" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentNameSuffix @DD1.5_BuyerAgentNameSuffix @DD1.6_BuyerAgentNameSuffix - Scenario: BuyerAgentNameSuffix - Given "BuyerAgentNameSuffix" exists in the metadata - And "BuyerAgentNameSuffix" values are not null - Then "BuyerAgentNameSuffix" should be "String" data type - And "BuyerAgentNameSuffix" length should be between the bounds in the metadata - And "BuyerAgentNameSuffix" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentOfficePhoneExt @DD1.5_BuyerAgentOfficePhoneExt @DD1.6_BuyerAgentOfficePhoneExt - Scenario: BuyerAgentOfficePhoneExt - Given "BuyerAgentOfficePhoneExt" exists in the metadata - And "BuyerAgentOfficePhoneExt" values are not null - Then "BuyerAgentOfficePhoneExt" should be "String" data type - And "BuyerAgentOfficePhoneExt" length should be between the bounds in the metadata - And "BuyerAgentOfficePhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentPreferredPhoneExt @DD1.5_BuyerAgentPreferredPhoneExt @DD1.6_BuyerAgentPreferredPhoneExt - Scenario: BuyerAgentPreferredPhoneExt - Given "BuyerAgentPreferredPhoneExt" exists in the metadata - And "BuyerAgentPreferredPhoneExt" values are not null - Then "BuyerAgentPreferredPhoneExt" should be "String" data type - And "BuyerAgentPreferredPhoneExt" length should be between the bounds in the metadata - And "BuyerAgentPreferredPhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentVoiceMailExt @DD1.5_BuyerAgentVoiceMailExt @DD1.6_BuyerAgentVoiceMailExt - Scenario: BuyerAgentVoiceMailExt - Given "BuyerAgentVoiceMailExt" exists in the metadata - And "BuyerAgentVoiceMailExt" values are not null - Then "BuyerAgentVoiceMailExt" should be "String" data type - And "BuyerAgentVoiceMailExt" length should be between the bounds in the metadata - And "BuyerAgentVoiceMailExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerOfficeKey @DD1.5_BuyerOfficeKey @DD1.6_BuyerOfficeKey - Scenario: BuyerOfficeKey - Given "BuyerOfficeKey" exists in the metadata - And "BuyerOfficeKey" values are not null - Then "BuyerOfficeKey" should be "String" data type - And "BuyerOfficeKey" length should be between the bounds in the metadata - And "BuyerOfficeKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerOfficeMlsId @IDX_Payload @DD1.5_BuyerOfficeMlsId @DD1.6_BuyerOfficeMlsId - Scenario: BuyerOfficeMlsId - Given "BuyerOfficeMlsId" exists in the metadata - And "BuyerOfficeMlsId" values are not null - Then "BuyerOfficeMlsId" should be "String" data type - And "BuyerOfficeMlsId" length should be between the bounds in the metadata - And "BuyerOfficeMlsId" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerOfficePhoneExt @DD1.5_BuyerOfficePhoneExt @DD1.6_BuyerOfficePhoneExt - Scenario: BuyerOfficePhoneExt - Given "BuyerOfficePhoneExt" exists in the metadata - And "BuyerOfficePhoneExt" values are not null - Then "BuyerOfficePhoneExt" should be "String" data type - And "BuyerOfficePhoneExt" length should be between the bounds in the metadata - And "BuyerOfficePhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerTeamKey @DD1.5_BuyerTeamKey @DD1.6_BuyerTeamKey - Scenario: BuyerTeamKey - Given "BuyerTeamKey" exists in the metadata - And "BuyerTeamKey" values are not null - Then "BuyerTeamKey" should be "String" data type - And "BuyerTeamKey" length should be between the bounds in the metadata - And "BuyerTeamKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerTeamName @DD1.5_BuyerTeamName @DD1.6_BuyerTeamName - Scenario: BuyerTeamName - Given "BuyerTeamName" exists in the metadata - And "BuyerTeamName" values are not null - Then "BuyerTeamName" should be "String" data type - And "BuyerTeamName" length should be between the bounds in the metadata - And "BuyerTeamName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CarrierRoute @DD1.5_CarrierRoute @DD1.6_CarrierRoute - Scenario: CarrierRoute - Given "CarrierRoute" exists in the metadata - And "CarrierRoute" values are not null - Then "CarrierRoute" should be "String" data type - And "CarrierRoute" length should be between the bounds in the metadata - And "CarrierRoute" length should be less than or equal to the RESO maxlength of 9 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @City @IDX_Payload @DD1.5_CityRegion @DD1.6_CityRegion - Scenario: CityRegion - Given "CityRegion" exists in the metadata - And "CityRegion" values are not null - Then "CityRegion" should be "String" data type - And "CityRegion" length should be between the bounds in the metadata - And "CityRegion" length should be less than or equal to the RESO maxlength of 150 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentHomePhone @DD1.5_CoBuyerAgentHomePhone @DD1.6_CoBuyerAgentHomePhone - Scenario: CoBuyerAgentHomePhone - Given "CoBuyerAgentHomePhone" exists in the metadata - And "CoBuyerAgentHomePhone" values are not null - Then "CoBuyerAgentHomePhone" should be "String" data type - And "CoBuyerAgentHomePhone" length should be between the bounds in the metadata - And "CoBuyerAgentHomePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentKey @DD1.5_CoBuyerAgentKey @DD1.6_CoBuyerAgentKey - Scenario: CoBuyerAgentKey - Given "CoBuyerAgentKey" exists in the metadata - And "CoBuyerAgentKey" values are not null - Then "CoBuyerAgentKey" should be "String" data type - And "CoBuyerAgentKey" length should be between the bounds in the metadata - And "CoBuyerAgentKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentMlsId @IDX_Payload @DD1.5_CoBuyerAgentMlsId @DD1.6_CoBuyerAgentMlsId - Scenario: CoBuyerAgentMlsId - Given "CoBuyerAgentMlsId" exists in the metadata - And "CoBuyerAgentMlsId" values are not null - Then "CoBuyerAgentMlsId" should be "String" data type - And "CoBuyerAgentMlsId" length should be between the bounds in the metadata - And "CoBuyerAgentMlsId" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentNamePrefix @DD1.5_CoBuyerAgentNamePrefix @DD1.6_CoBuyerAgentNamePrefix - Scenario: CoBuyerAgentNamePrefix - Given "CoBuyerAgentNamePrefix" exists in the metadata - And "CoBuyerAgentNamePrefix" values are not null - Then "CoBuyerAgentNamePrefix" should be "String" data type - And "CoBuyerAgentNamePrefix" length should be between the bounds in the metadata - And "CoBuyerAgentNamePrefix" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentNameSuffix @DD1.5_CoBuyerAgentNameSuffix @DD1.6_CoBuyerAgentNameSuffix - Scenario: CoBuyerAgentNameSuffix - Given "CoBuyerAgentNameSuffix" exists in the metadata - And "CoBuyerAgentNameSuffix" values are not null - Then "CoBuyerAgentNameSuffix" should be "String" data type - And "CoBuyerAgentNameSuffix" length should be between the bounds in the metadata - And "CoBuyerAgentNameSuffix" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentOfficePhoneExt @DD1.5_CoBuyerAgentOfficePhoneExt @DD1.6_CoBuyerAgentOfficePhoneExt - Scenario: CoBuyerAgentOfficePhoneExt - Given "CoBuyerAgentOfficePhoneExt" exists in the metadata - And "CoBuyerAgentOfficePhoneExt" values are not null - Then "CoBuyerAgentOfficePhoneExt" should be "String" data type - And "CoBuyerAgentOfficePhoneExt" length should be between the bounds in the metadata - And "CoBuyerAgentOfficePhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentPreferredPhoneExt @DD1.5_CoBuyerAgentPreferredPhoneExt @DD1.6_CoBuyerAgentPreferredPhoneExt - Scenario: CoBuyerAgentPreferredPhoneExt - Given "CoBuyerAgentPreferredPhoneExt" exists in the metadata - And "CoBuyerAgentPreferredPhoneExt" values are not null - Then "CoBuyerAgentPreferredPhoneExt" should be "String" data type - And "CoBuyerAgentPreferredPhoneExt" length should be between the bounds in the metadata - And "CoBuyerAgentPreferredPhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentVoiceMailExt @DD1.5_CoBuyerAgentVoiceMailExt @DD1.6_CoBuyerAgentVoiceMailExt - Scenario: CoBuyerAgentVoiceMailExt - Given "CoBuyerAgentVoiceMailExt" exists in the metadata - And "CoBuyerAgentVoiceMailExt" values are not null - Then "CoBuyerAgentVoiceMailExt" should be "String" data type - And "CoBuyerAgentVoiceMailExt" length should be between the bounds in the metadata - And "CoBuyerAgentVoiceMailExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeEmail @DD1.5_CoBuyerOfficeEmail @DD1.6_CoBuyerOfficeEmail - Scenario: CoBuyerOfficeEmail - Given "CoBuyerOfficeEmail" exists in the metadata - And "CoBuyerOfficeEmail" values are not null - Then "CoBuyerOfficeEmail" should be "String" data type - And "CoBuyerOfficeEmail" length should be between the bounds in the metadata - And "CoBuyerOfficeEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeFax @DD1.5_CoBuyerOfficeFax @DD1.6_CoBuyerOfficeFax - Scenario: CoBuyerOfficeFax - Given "CoBuyerOfficeFax" exists in the metadata - And "CoBuyerOfficeFax" values are not null - Then "CoBuyerOfficeFax" should be "String" data type - And "CoBuyerOfficeFax" length should be between the bounds in the metadata - And "CoBuyerOfficeFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeKey @DD1.5_CoBuyerOfficeKey @DD1.6_CoBuyerOfficeKey - Scenario: CoBuyerOfficeKey - Given "CoBuyerOfficeKey" exists in the metadata - And "CoBuyerOfficeKey" values are not null - Then "CoBuyerOfficeKey" should be "String" data type - And "CoBuyerOfficeKey" length should be between the bounds in the metadata - And "CoBuyerOfficeKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeMlsId @IDX_Payload @DD1.5_CoBuyerOfficeMlsId @DD1.6_CoBuyerOfficeMlsId - Scenario: CoBuyerOfficeMlsId - Given "CoBuyerOfficeMlsId" exists in the metadata - And "CoBuyerOfficeMlsId" values are not null - Then "CoBuyerOfficeMlsId" should be "String" data type - And "CoBuyerOfficeMlsId" length should be between the bounds in the metadata - And "CoBuyerOfficeMlsId" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeName @IDX_Payload @DD1.5_CoBuyerOfficeName @DD1.6_CoBuyerOfficeName - Scenario: CoBuyerOfficeName - Given "CoBuyerOfficeName" exists in the metadata - And "CoBuyerOfficeName" values are not null - Then "CoBuyerOfficeName" should be "String" data type - And "CoBuyerOfficeName" length should be between the bounds in the metadata - And "CoBuyerOfficeName" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficePhone @DD1.5_CoBuyerOfficePhone @DD1.6_CoBuyerOfficePhone - Scenario: CoBuyerOfficePhone - Given "CoBuyerOfficePhone" exists in the metadata - And "CoBuyerOfficePhone" values are not null - Then "CoBuyerOfficePhone" should be "String" data type - And "CoBuyerOfficePhone" length should be between the bounds in the metadata - And "CoBuyerOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficePhoneExt @DD1.5_CoBuyerOfficePhoneExt @DD1.6_CoBuyerOfficePhoneExt - Scenario: CoBuyerOfficePhoneExt - Given "CoBuyerOfficePhoneExt" exists in the metadata - And "CoBuyerOfficePhoneExt" values are not null - Then "CoBuyerOfficePhoneExt" should be "String" data type - And "CoBuyerOfficePhoneExt" length should be between the bounds in the metadata - And "CoBuyerOfficePhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeURL @DD1.5_CoBuyerOfficeURL @DD1.6_CoBuyerOfficeURL - Scenario: CoBuyerOfficeURL - Given "CoBuyerOfficeURL" exists in the metadata - And "CoBuyerOfficeURL" values are not null - Then "CoBuyerOfficeURL" should be "String" data type - And "CoBuyerOfficeURL" length should be between the bounds in the metadata - And "CoBuyerOfficeURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentHomePhone @DD1.5_CoListAgentHomePhone @DD1.6_CoListAgentHomePhone - Scenario: CoListAgentHomePhone - Given "CoListAgentHomePhone" exists in the metadata - And "CoListAgentHomePhone" values are not null - Then "CoListAgentHomePhone" should be "String" data type - And "CoListAgentHomePhone" length should be between the bounds in the metadata - And "CoListAgentHomePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentKey @DD1.5_CoListAgentKey @DD1.6_CoListAgentKey - Scenario: CoListAgentKey - Given "CoListAgentKey" exists in the metadata - And "CoListAgentKey" values are not null - Then "CoListAgentKey" should be "String" data type - And "CoListAgentKey" length should be between the bounds in the metadata - And "CoListAgentKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentMlsId @IDX_Payload @DD1.5_CoListAgentMlsId @DD1.6_CoListAgentMlsId - Scenario: CoListAgentMlsId - Given "CoListAgentMlsId" exists in the metadata - And "CoListAgentMlsId" values are not null - Then "CoListAgentMlsId" should be "String" data type - And "CoListAgentMlsId" length should be between the bounds in the metadata - And "CoListAgentMlsId" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentNamePrefix @DD1.5_CoListAgentNamePrefix @DD1.6_CoListAgentNamePrefix - Scenario: CoListAgentNamePrefix - Given "CoListAgentNamePrefix" exists in the metadata - And "CoListAgentNamePrefix" values are not null - Then "CoListAgentNamePrefix" should be "String" data type - And "CoListAgentNamePrefix" length should be between the bounds in the metadata - And "CoListAgentNamePrefix" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentNameSuffix @DD1.5_CoListAgentNameSuffix @DD1.6_CoListAgentNameSuffix - Scenario: CoListAgentNameSuffix - Given "CoListAgentNameSuffix" exists in the metadata - And "CoListAgentNameSuffix" values are not null - Then "CoListAgentNameSuffix" should be "String" data type - And "CoListAgentNameSuffix" length should be between the bounds in the metadata - And "CoListAgentNameSuffix" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeEmail @DD1.5_CoListOfficeEmail @DD1.6_CoListOfficeEmail - Scenario: CoListOfficeEmail - Given "CoListOfficeEmail" exists in the metadata - And "CoListOfficeEmail" values are not null - Then "CoListOfficeEmail" should be "String" data type - And "CoListOfficeEmail" length should be between the bounds in the metadata - And "CoListOfficeEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeFax @DD1.5_CoListOfficeFax @DD1.6_CoListOfficeFax - Scenario: CoListOfficeFax - Given "CoListOfficeFax" exists in the metadata - And "CoListOfficeFax" values are not null - Then "CoListOfficeFax" should be "String" data type - And "CoListOfficeFax" length should be between the bounds in the metadata - And "CoListOfficeFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeKey @DD1.5_CoListOfficeKey @DD1.6_CoListOfficeKey - Scenario: CoListOfficeKey - Given "CoListOfficeKey" exists in the metadata - And "CoListOfficeKey" values are not null - Then "CoListOfficeKey" should be "String" data type - And "CoListOfficeKey" length should be between the bounds in the metadata - And "CoListOfficeKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeMlsId @IDX_Payload @DD1.5_CoListOfficeMlsId @DD1.6_CoListOfficeMlsId - Scenario: CoListOfficeMlsId - Given "CoListOfficeMlsId" exists in the metadata - And "CoListOfficeMlsId" values are not null - Then "CoListOfficeMlsId" should be "String" data type - And "CoListOfficeMlsId" length should be between the bounds in the metadata - And "CoListOfficeMlsId" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeName @IDX_Payload @DD1.5_CoListOfficeName @DD1.6_CoListOfficeName - Scenario: CoListOfficeName - Given "CoListOfficeName" exists in the metadata - And "CoListOfficeName" values are not null - Then "CoListOfficeName" should be "String" data type - And "CoListOfficeName" length should be between the bounds in the metadata - And "CoListOfficeName" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficePhone @DD1.5_CoListOfficePhone @DD1.6_CoListOfficePhone - Scenario: CoListOfficePhone - Given "CoListOfficePhone" exists in the metadata - And "CoListOfficePhone" values are not null - Then "CoListOfficePhone" should be "String" data type - And "CoListOfficePhone" length should be between the bounds in the metadata - And "CoListOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficePhoneExt @DD1.5_CoListOfficePhoneExt @DD1.6_CoListOfficePhoneExt - Scenario: CoListOfficePhoneExt - Given "CoListOfficePhoneExt" exists in the metadata - And "CoListOfficePhoneExt" values are not null - Then "CoListOfficePhoneExt" should be "String" data type - And "CoListOfficePhoneExt" length should be between the bounds in the metadata - And "CoListOfficePhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeURL @DD1.5_CoListOfficeURL @DD1.6_CoListOfficeURL - Scenario: CoListOfficeURL - Given "CoListOfficeURL" exists in the metadata - And "CoListOfficeURL" values are not null - Then "CoListOfficeURL" should be "String" data type - And "CoListOfficeURL" length should be between the bounds in the metadata - And "CoListOfficeURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ConcessionsComments @DD1.5_ConcessionsComments @DD1.6_ConcessionsComments - Scenario: ConcessionsComments - Given "ConcessionsComments" exists in the metadata - And "ConcessionsComments" values are not null - Then "ConcessionsComments" should be "String" data type - And "ConcessionsComments" length should be between the bounds in the metadata - And "ConcessionsComments" length should be less than or equal to the RESO maxlength of 200 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ContinentRegion @DD1.5_ContinentRegion @DD1.6_ContinentRegion - Scenario: ContinentRegion - Given "ContinentRegion" exists in the metadata - And "ContinentRegion" values are not null - Then "ContinentRegion" should be "String" data type - And "ContinentRegion" length should be between the bounds in the metadata - And "ContinentRegion" length should be less than or equal to the RESO maxlength of 150 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Contingency @DD1.5_Contingency @DD1.6_Contingency @testing - Scenario: Contingency - Given "Contingency" exists in the metadata - And "Contingency" values are not null - Then "Contingency" should be "String" data type - And "Contingency" length should be between the bounds in the metadata - And "Contingency" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CopyrightNotice @DD1.5_CopyrightNotice @DD1.6_CopyrightNotice - Scenario: CopyrightNotice - Given "CopyrightNotice" exists in the metadata - And "CopyrightNotice" values are not null - Then "CopyrightNotice" should be "String" data type - And "CopyrightNotice" length should be between the bounds in the metadata - And "CopyrightNotice" length should be less than or equal to the RESO maxlength of 500 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CountryRegion @DD1.5_CountryRegion @DD1.6_CountryRegion - Scenario: CountryRegion - Given "CountryRegion" exists in the metadata - And "CountryRegion" values are not null - Then "CountryRegion" should be "String" data type - And "CountryRegion" length should be between the bounds in the metadata - And "CountryRegion" length should be less than or equal to the RESO maxlength of 150 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CrossStreet @DD1.5_CrossStreet @DD1.6_CrossStreet - Scenario: CrossStreet - Given "CrossStreet" exists in the metadata - And "CrossStreet" values are not null - Then "CrossStreet" should be "String" data type - And "CrossStreet" length should be between the bounds in the metadata - And "CrossStreet" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DOH1 @DD1.5_DOH @DD1.6_DOH1 - Scenario: DOH1 - Given "DOH1" exists in the metadata - And "DOH1" values are not null - Then "DOH1" should be "String" data type - And "DOH1" length should be between the bounds in the metadata - And "DOH1" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DOH2 @DD1.5_DOH @DD1.6_DOH2 - Scenario: DOH2 - Given "DOH2" exists in the metadata - And "DOH2" values are not null - Then "DOH2" should be "String" data type - And "DOH2" length should be between the bounds in the metadata - And "DOH2" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DOH3 @DD1.5_DOH @DD1.6_DOH3 - Scenario: DOH3 - Given "DOH3" exists in the metadata - And "DOH3" values are not null - Then "DOH3" should be "String" data type - And "DOH3" length should be between the bounds in the metadata - And "DOH3" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Directions @IDX_Payload @DD1.5_Directions @DD1.6_Directions - Scenario: Directions - Given "Directions" exists in the metadata - And "Directions" values are not null - Then "Directions" should be "String" data type - And "Directions" length should be between the bounds in the metadata - And "Directions" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Disclaimer @DD1.5_Disclaimer @DD1.6_Disclaimer - Scenario: Disclaimer - Given "Disclaimer" exists in the metadata - And "Disclaimer" values are not null - Then "Disclaimer" should be "String" data type - And "Disclaimer" length should be between the bounds in the metadata - And "Disclaimer" length should be less than or equal to the RESO maxlength of 500 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToBusComments @DD1.5_DistanceToBusComments @DD1.6_DistanceToBusComments - Scenario: DistanceToBusComments - Given "DistanceToBusComments" exists in the metadata - And "DistanceToBusComments" values are not null - Then "DistanceToBusComments" should be "String" data type - And "DistanceToBusComments" length should be between the bounds in the metadata - And "DistanceToBusComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToElectricComments @DD1.5_DistanceToElectricComments @DD1.6_DistanceToElectricComments - Scenario: DistanceToElectricComments - Given "DistanceToElectricComments" exists in the metadata - And "DistanceToElectricComments" values are not null - Then "DistanceToElectricComments" should be "String" data type - And "DistanceToElectricComments" length should be between the bounds in the metadata - And "DistanceToElectricComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToFreewayComments @DD1.5_DistanceToFreewayComments @DD1.6_DistanceToFreewayComments - Scenario: DistanceToFreewayComments - Given "DistanceToFreewayComments" exists in the metadata - And "DistanceToFreewayComments" values are not null - Then "DistanceToFreewayComments" should be "String" data type - And "DistanceToFreewayComments" length should be between the bounds in the metadata - And "DistanceToFreewayComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToGasComments @DD1.5_DistanceToGasComments @DD1.6_DistanceToGasComments - Scenario: DistanceToGasComments - Given "DistanceToGasComments" exists in the metadata - And "DistanceToGasComments" values are not null - Then "DistanceToGasComments" should be "String" data type - And "DistanceToGasComments" length should be between the bounds in the metadata - And "DistanceToGasComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToPhoneServiceComments @DD1.5_DistanceToPhoneServiceComments @DD1.6_DistanceToPhoneServiceComments - Scenario: DistanceToPhoneServiceComments - Given "DistanceToPhoneServiceComments" exists in the metadata - And "DistanceToPhoneServiceComments" values are not null - Then "DistanceToPhoneServiceComments" should be "String" data type - And "DistanceToPhoneServiceComments" length should be between the bounds in the metadata - And "DistanceToPhoneServiceComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToPlaceofWorshipComments @DD1.5_DistanceToPlaceofWorshipComments @DD1.6_DistanceToPlaceofWorshipComments - Scenario: DistanceToPlaceofWorshipComments - Given "DistanceToPlaceofWorshipComments" exists in the metadata - And "DistanceToPlaceofWorshipComments" values are not null - Then "DistanceToPlaceofWorshipComments" should be "String" data type - And "DistanceToPlaceofWorshipComments" length should be between the bounds in the metadata - And "DistanceToPlaceofWorshipComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToSchoolBusComments @DD1.5_DistanceToSchoolBusComments @DD1.6_DistanceToSchoolBusComments - Scenario: DistanceToSchoolBusComments - Given "DistanceToSchoolBusComments" exists in the metadata - And "DistanceToSchoolBusComments" values are not null - Then "DistanceToSchoolBusComments" should be "String" data type - And "DistanceToSchoolBusComments" length should be between the bounds in the metadata - And "DistanceToSchoolBusComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToSchoolsComments @DD1.5_DistanceToSchoolsComments @DD1.6_DistanceToSchoolsComments - Scenario: DistanceToSchoolsComments - Given "DistanceToSchoolsComments" exists in the metadata - And "DistanceToSchoolsComments" values are not null - Then "DistanceToSchoolsComments" should be "String" data type - And "DistanceToSchoolsComments" length should be between the bounds in the metadata - And "DistanceToSchoolsComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToSewerComments @DD1.5_DistanceToSewerComments @DD1.6_DistanceToSewerComments - Scenario: DistanceToSewerComments - Given "DistanceToSewerComments" exists in the metadata - And "DistanceToSewerComments" values are not null - Then "DistanceToSewerComments" should be "String" data type - And "DistanceToSewerComments" length should be between the bounds in the metadata - And "DistanceToSewerComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToShoppingComments @DD1.5_DistanceToShoppingComments @DD1.6_DistanceToShoppingComments - Scenario: DistanceToShoppingComments - Given "DistanceToShoppingComments" exists in the metadata - And "DistanceToShoppingComments" values are not null - Then "DistanceToShoppingComments" should be "String" data type - And "DistanceToShoppingComments" length should be between the bounds in the metadata - And "DistanceToShoppingComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToStreetComments @DD1.5_DistanceToStreetComments @DD1.6_DistanceToStreetComments - Scenario: DistanceToStreetComments - Given "DistanceToStreetComments" exists in the metadata - And "DistanceToStreetComments" values are not null - Then "DistanceToStreetComments" should be "String" data type - And "DistanceToStreetComments" length should be between the bounds in the metadata - And "DistanceToStreetComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @DistanceToWaterComments @DD1.5_DistanceToWaterComments @DD1.6_DistanceToWaterComments - Scenario: DistanceToWaterComments - Given "DistanceToWaterComments" exists in the metadata - And "DistanceToWaterComments" values are not null - Then "DistanceToWaterComments" should be "String" data type - And "DistanceToWaterComments" length should be between the bounds in the metadata - And "DistanceToWaterComments" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @EntryLocation @DD1.5_EntryLocation @DD1.6_EntryLocation - Scenario: EntryLocation - Given "EntryLocation" exists in the metadata - And "EntryLocation" values are not null - Then "EntryLocation" should be "String" data type - And "EntryLocation" length should be between the bounds in the metadata - And "EntryLocation" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Exclusions @DD1.5_Exclusions @DD1.6_Exclusions - Scenario: Exclusions - Given "Exclusions" exists in the metadata - And "Exclusions" values are not null - Then "Exclusions" should be "String" data type - And "Exclusions" length should be between the bounds in the metadata - And "Exclusions" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @FrontageLength @DD1.5_FrontageLength @DD1.6_FrontageLength - Scenario: FrontageLength - Given "FrontageLength" exists in the metadata - And "FrontageLength" values are not null - Then "FrontageLength" should be "String" data type - And "FrontageLength" length should be between the bounds in the metadata - And "FrontageLength" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @HoursDaysofOperationDescription @DD1.5_HoursDaysofOperationDescription @DD1.6_HoursDaysofOperationDescription - Scenario: HoursDaysofOperationDescription - Given "HoursDaysofOperationDescription" exists in the metadata - And "HoursDaysofOperationDescription" values are not null - Then "HoursDaysofOperationDescription" should be "String" data type - And "HoursDaysofOperationDescription" length should be between the bounds in the metadata - And "HoursDaysofOperationDescription" length should be less than or equal to the RESO maxlength of 255 - - @DD1.6_String @DD1.6 @HoursDaysOfOperationDescription @DD1.6_HoursDaysOfOperationDescription - Scenario: HoursDaysOfOperationDescription - Given "HoursDaysOfOperationDescription" exists in the metadata - And "HoursDaysOfOperationDescription" values are not null - Then "HoursDaysOfOperationDescription" should be "String" data type - And "HoursDaysOfOperationDescription" length should be between the bounds in the metadata - And "HoursDaysOfOperationDescription" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Inclusions @DD1.5_Inclusions @DD1.6_Inclusions - Scenario: Inclusions - Given "Inclusions" exists in the metadata - And "Inclusions" values are not null - Then "Inclusions" should be "String" data type - And "Inclusions" length should be between the bounds in the metadata - And "Inclusions" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @License1 @DD1.5_License @DD1.6_License1 - Scenario: License1 - Given "License1" exists in the metadata - And "License1" values are not null - Then "License1" should be "String" data type - And "License1" length should be between the bounds in the metadata - And "License1" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @License2 @DD1.5_License @DD1.6_License2 - Scenario: License2 - Given "License2" exists in the metadata - And "License2" values are not null - Then "License2" should be "String" data type - And "License2" length should be between the bounds in the metadata - And "License2" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @License3 @DD1.5_License @DD1.6_License3 - Scenario: License3 - Given "License3" exists in the metadata - And "License3" values are not null - Then "License3" should be "String" data type - And "License3" length should be between the bounds in the metadata - And "License3" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentHomePhone @DD1.5_ListAgentHomePhone @DD1.6_ListAgentHomePhone - Scenario: ListAgentHomePhone - Given "ListAgentHomePhone" exists in the metadata - And "ListAgentHomePhone" values are not null - Then "ListAgentHomePhone" should be "String" data type - And "ListAgentHomePhone" length should be between the bounds in the metadata - And "ListAgentHomePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentMlsId @IDX_Payload @DD1.5_ListAgentMlsId @DD1.6_ListAgentMlsId - Scenario: ListAgentMlsId - Given "ListAgentMlsId" exists in the metadata - And "ListAgentMlsId" values are not null - Then "ListAgentMlsId" should be "String" data type - And "ListAgentMlsId" length should be between the bounds in the metadata - And "ListAgentMlsId" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentNamePrefix @DD1.5_ListAgentNamePrefix @DD1.6_ListAgentNamePrefix - Scenario: ListAgentNamePrefix - Given "ListAgentNamePrefix" exists in the metadata - And "ListAgentNamePrefix" values are not null - Then "ListAgentNamePrefix" should be "String" data type - And "ListAgentNamePrefix" length should be between the bounds in the metadata - And "ListAgentNamePrefix" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentNameSuffix @DD1.5_ListAgentNameSuffix @DD1.6_ListAgentNameSuffix - Scenario: ListAgentNameSuffix - Given "ListAgentNameSuffix" exists in the metadata - And "ListAgentNameSuffix" values are not null - Then "ListAgentNameSuffix" should be "String" data type - And "ListAgentNameSuffix" length should be between the bounds in the metadata - And "ListAgentNameSuffix" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListOfficeKey @DD1.5_ListOfficeKey @DD1.6_ListOfficeKey - Scenario: ListOfficeKey - Given "ListOfficeKey" exists in the metadata - And "ListOfficeKey" values are not null - Then "ListOfficeKey" should be "String" data type - And "ListOfficeKey" length should be between the bounds in the metadata - And "ListOfficeKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListOfficeMlsId @IDX_Payload @DD1.5_ListOfficeMlsId @DD1.6_ListOfficeMlsId - Scenario: ListOfficeMlsId - Given "ListOfficeMlsId" exists in the metadata - And "ListOfficeMlsId" values are not null - Then "ListOfficeMlsId" should be "String" data type - And "ListOfficeMlsId" length should be between the bounds in the metadata - And "ListOfficeMlsId" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListTeamKey @DD1.5_ListTeamKey @DD1.6_ListTeamKey - Scenario: ListTeamKey - Given "ListTeamKey" exists in the metadata - And "ListTeamKey" values are not null - Then "ListTeamKey" should be "String" data type - And "ListTeamKey" length should be between the bounds in the metadata - And "ListTeamKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListTeamName @DD1.5_ListTeamName @DD1.6_ListTeamName - Scenario: ListTeamName - Given "ListTeamName" exists in the metadata - And "ListTeamName" values are not null - Then "ListTeamName" should be "String" data type - And "ListTeamName" length should be between the bounds in the metadata - And "ListTeamName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @LockBoxLocation @DD1.5_LockBoxLocation @DD1.6_LockBoxLocation - Scenario: LockBoxLocation - Given "LockBoxLocation" exists in the metadata - And "LockBoxLocation" values are not null - Then "LockBoxLocation" should be "String" data type - And "LockBoxLocation" length should be between the bounds in the metadata - And "LockBoxLocation" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @LockBoxSerialNumber @DD1.5_LockBoxSerialNumber @DD1.6_LockBoxSerialNumber - Scenario: LockBoxSerialNumber - Given "LockBoxSerialNumber" exists in the metadata - And "LockBoxSerialNumber" values are not null - Then "LockBoxSerialNumber" should be "String" data type - And "LockBoxSerialNumber" length should be between the bounds in the metadata - And "LockBoxSerialNumber" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @LotSizeDimensions @IDX_Payload @DD1.5_LotSizeDimensions @DD1.6_LotSizeDimensions - Scenario: LotSizeDimensions - Given "LotSizeDimensions" exists in the metadata - And "LotSizeDimensions" values are not null - Then "LotSizeDimensions" should be "String" data type - And "LotSizeDimensions" length should be between the bounds in the metadata - And "LotSizeDimensions" length should be less than or equal to the RESO maxlength of 150 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Make @DD1.5_Make @DD1.6_Make - Scenario: Make - Given "Make" exists in the metadata - And "Make" values are not null - Then "Make" should be "String" data type - And "Make" length should be between the bounds in the metadata - And "Make" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @MapCoordinate @DD1.5_MapCoordinate @DD1.6_MapCoordinate - Scenario: MapCoordinate - Given "MapCoordinate" exists in the metadata - And "MapCoordinate" values are not null - Then "MapCoordinate" should be "String" data type - And "MapCoordinate" length should be between the bounds in the metadata - And "MapCoordinate" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @MapCoordinateSource @DD1.5_MapCoordinateSource @DD1.6_MapCoordinateSource - Scenario: MapCoordinateSource - Given "MapCoordinateSource" exists in the metadata - And "MapCoordinateSource" values are not null - Then "MapCoordinateSource" should be "String" data type - And "MapCoordinateSource" length should be between the bounds in the metadata - And "MapCoordinateSource" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @MapURL @DD1.5_MapURL @DD1.6_MapURL - Scenario: MapURL - Given "MapURL" exists in the metadata - And "MapURL" values are not null - Then "MapURL" should be "String" data type - And "MapURL" length should be between the bounds in the metadata - And "MapURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Model @DD1.5_Model @DD1.6_Model - Scenario: Model - Given "Model" exists in the metadata - And "Model" values are not null - Then "Model" should be "String" data type - And "Model" length should be between the bounds in the metadata - And "Model" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @OtherParking @DD1.5_OtherParking @DD1.6_OtherParking - Scenario: OtherParking - Given "OtherParking" exists in the metadata - And "OtherParking" values are not null - Then "OtherParking" should be "String" data type - And "OtherParking" length should be between the bounds in the metadata - And "OtherParking" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @OwnerPhone @DD1.5_OwnerPhone @DD1.6_OwnerPhone - Scenario: OwnerPhone - Given "OwnerPhone" exists in the metadata - And "OwnerPhone" values are not null - Then "OwnerPhone" should be "String" data type - And "OwnerPhone" length should be between the bounds in the metadata - And "OwnerPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Ownership @DD1.5_Ownership @DD1.6_Ownership - Scenario: Ownership - Given "Ownership" exists in the metadata - And "Ownership" values are not null - Then "Ownership" should be "String" data type - And "Ownership" length should be between the bounds in the metadata - And "Ownership" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ParcelNumber @IDX_Payload @DD1.5_ParcelNumber @DD1.6_ParcelNumber - Scenario: ParcelNumber - Given "ParcelNumber" exists in the metadata - And "ParcelNumber" values are not null - Then "ParcelNumber" should be "String" data type - And "ParcelNumber" length should be between the bounds in the metadata - And "ParcelNumber" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ParkManagerName @DD1.5_ParkManagerName @DD1.6_ParkManagerName - Scenario: ParkManagerName - Given "ParkManagerName" exists in the metadata - And "ParkManagerName" values are not null - Then "ParkManagerName" should be "String" data type - And "ParkManagerName" length should be between the bounds in the metadata - And "ParkManagerName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ParkManagerPhone @DD1.5_ParkManagerPhone @DD1.6_ParkManagerPhone - Scenario: ParkManagerPhone - Given "ParkManagerPhone" exists in the metadata - And "ParkManagerPhone" values are not null - Then "ParkManagerPhone" should be "String" data type - And "ParkManagerPhone" length should be between the bounds in the metadata - And "ParkManagerPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ParkName @IDX_Payload @DD1.5_ParkName @DD1.6_ParkName - Scenario: ParkName - Given "ParkName" exists in the metadata - And "ParkName" values are not null - Then "ParkName" should be "String" data type - And "ParkName" length should be between the bounds in the metadata - And "ParkName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @PostalCode @IDX_Payload @DD1.5_PostalCodePlus @DD1.6_PostalCodePlus4 - Scenario: PostalCodePlus4 - Given "PostalCodePlus4" exists in the metadata - And "PostalCodePlus4" values are not null - Then "PostalCodePlus4" should be "String" data type - And "PostalCodePlus4" length should be between the bounds in the metadata - And "PostalCodePlus4" length should be less than or equal to the RESO maxlength of 4 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @PublicSurveyRange @DD1.5_PublicSurveyRange @DD1.6_PublicSurveyRange - Scenario: PublicSurveyRange - Given "PublicSurveyRange" exists in the metadata - And "PublicSurveyRange" values are not null - Then "PublicSurveyRange" should be "String" data type - And "PublicSurveyRange" length should be between the bounds in the metadata - And "PublicSurveyRange" length should be less than or equal to the RESO maxlength of 20 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @PublicSurveySection @DD1.5_PublicSurveySection @DD1.6_PublicSurveySection - Scenario: PublicSurveySection - Given "PublicSurveySection" exists in the metadata - And "PublicSurveySection" values are not null - Then "PublicSurveySection" should be "String" data type - And "PublicSurveySection" length should be between the bounds in the metadata - And "PublicSurveySection" length should be less than or equal to the RESO maxlength of 20 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @PublicSurveyTownship @DD1.5_PublicSurveyTownship @DD1.6_PublicSurveyTownship - Scenario: PublicSurveyTownship - Given "PublicSurveyTownship" exists in the metadata - And "PublicSurveyTownship" values are not null - Then "PublicSurveyTownship" should be "String" data type - And "PublicSurveyTownship" length should be between the bounds in the metadata - And "PublicSurveyTownship" length should be less than or equal to the RESO maxlength of 20 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @RVParkingDimensions @DD1.5_RVParkingDimensions @DD1.6_RVParkingDimensions - Scenario: RVParkingDimensions - Given "RVParkingDimensions" exists in the metadata - And "RVParkingDimensions" values are not null - Then "RVParkingDimensions" should be "String" data type - And "RVParkingDimensions" length should be between the bounds in the metadata - And "RVParkingDimensions" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @SerialU @DD1.5_SerialU @DD1.6_SerialU - Scenario: SerialU - Given "SerialU" exists in the metadata - And "SerialU" values are not null - Then "SerialU" should be "String" data type - And "SerialU" length should be between the bounds in the metadata - And "SerialU" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @SerialX @DD1.5_SerialX @DD1.6_SerialX - Scenario: SerialX - Given "SerialX" exists in the metadata - And "SerialX" values are not null - Then "SerialX" should be "String" data type - And "SerialX" length should be between the bounds in the metadata - And "SerialX" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @SerialXX @DD1.5_SerialXX @DD1.6_SerialXX - Scenario: SerialXX - Given "SerialXX" exists in the metadata - And "SerialXX" values are not null - Then "SerialXX" should be "String" data type - And "SerialXX" length should be between the bounds in the metadata - And "SerialXX" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ShowingContactName @DD1.5_ShowingContactName @DD1.6_ShowingContactName - Scenario: ShowingContactName - Given "ShowingContactName" exists in the metadata - And "ShowingContactName" values are not null - Then "ShowingContactName" should be "String" data type - And "ShowingContactName" length should be between the bounds in the metadata - And "ShowingContactName" length should be less than or equal to the RESO maxlength of 40 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ShowingContactPhone @DD1.5_ShowingContactPhone @DD1.6_ShowingContactPhone - Scenario: ShowingContactPhone - Given "ShowingContactPhone" exists in the metadata - And "ShowingContactPhone" values are not null - Then "ShowingContactPhone" should be "String" data type - And "ShowingContactPhone" length should be between the bounds in the metadata - And "ShowingContactPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ShowingContactPhoneExt @DD1.5_ShowingContactPhoneExt @DD1.6_ShowingContactPhoneExt - Scenario: ShowingContactPhoneExt - Given "ShowingContactPhoneExt" exists in the metadata - And "ShowingContactPhoneExt" values are not null - Then "ShowingContactPhoneExt" should be "String" data type - And "ShowingContactPhoneExt" length should be between the bounds in the metadata - And "ShowingContactPhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ShowingInstructions @DD1.5_ShowingInstructions @DD1.6_ShowingInstructions - Scenario: ShowingInstructions - Given "ShowingInstructions" exists in the metadata - And "ShowingInstructions" values are not null - Then "ShowingInstructions" should be "String" data type - And "ShowingInstructions" length should be between the bounds in the metadata - And "ShowingInstructions" length should be less than or equal to the RESO maxlength of 4000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @StateRegion @DD1.5_StateRegion @DD1.6_StateRegion - Scenario: StateRegion - Given "StateRegion" exists in the metadata - And "StateRegion" values are not null - Then "StateRegion" should be "String" data type - And "StateRegion" length should be between the bounds in the metadata - And "StateRegion" length should be less than or equal to the RESO maxlength of 150 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @StreetSuffix @IDX_Payload @DD1.5_StreetSuffixModifier @DD1.6_StreetSuffixModifier - Scenario: StreetSuffixModifier - Given "StreetSuffixModifier" exists in the metadata - And "StreetSuffixModifier" values are not null - Then "StreetSuffixModifier" should be "String" data type - And "StreetSuffixModifier" length should be between the bounds in the metadata - And "StreetSuffixModifier" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @SubAgencyCompensation @DD1.5_SubAgencyCompensation @DD1.6_SubAgencyCompensation - Scenario: SubAgencyCompensation - Given "SubAgencyCompensation" exists in the metadata - And "SubAgencyCompensation" values are not null - Then "SubAgencyCompensation" should be "String" data type - And "SubAgencyCompensation" length should be between the bounds in the metadata - And "SubAgencyCompensation" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @SyndicationRemarks @DD1.5_SyndicationRemarks @DD1.6_SyndicationRemarks - Scenario: SyndicationRemarks - Given "SyndicationRemarks" exists in the metadata - And "SyndicationRemarks" values are not null - Then "SyndicationRemarks" should be "String" data type - And "SyndicationRemarks" length should be between the bounds in the metadata - And "SyndicationRemarks" length should be less than or equal to the RESO maxlength of 4000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @TaxBlock @DD1.5_TaxBlock @DD1.6_TaxBlock - Scenario: TaxBlock - Given "TaxBlock" exists in the metadata - And "TaxBlock" values are not null - Then "TaxBlock" should be "String" data type - And "TaxBlock" length should be between the bounds in the metadata - And "TaxBlock" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @TaxBookNumber @DD1.5_TaxBookNumber @DD1.6_TaxBookNumber - Scenario: TaxBookNumber - Given "TaxBookNumber" exists in the metadata - And "TaxBookNumber" values are not null - Then "TaxBookNumber" should be "String" data type - And "TaxBookNumber" length should be between the bounds in the metadata - And "TaxBookNumber" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @TaxLegalDescription @DD1.5_TaxLegalDescription @DD1.6_TaxLegalDescription - Scenario: TaxLegalDescription - Given "TaxLegalDescription" exists in the metadata - And "TaxLegalDescription" values are not null - Then "TaxLegalDescription" should be "String" data type - And "TaxLegalDescription" length should be between the bounds in the metadata - And "TaxLegalDescription" length should be less than or equal to the RESO maxlength of 6000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @TaxLot @DD1.5_TaxLot @DD1.6_TaxLot - Scenario: TaxLot - Given "TaxLot" exists in the metadata - And "TaxLot" values are not null - Then "TaxLot" should be "String" data type - And "TaxLot" length should be between the bounds in the metadata - And "TaxLot" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @TaxMapNumber @DD1.5_TaxMapNumber @DD1.6_TaxMapNumber - Scenario: TaxMapNumber - Given "TaxMapNumber" exists in the metadata - And "TaxMapNumber" values are not null - Then "TaxMapNumber" should be "String" data type - And "TaxMapNumber" length should be between the bounds in the metadata - And "TaxMapNumber" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @TaxParcelLetter @DD1.5_TaxParcelLetter @DD1.6_TaxParcelLetter - Scenario: TaxParcelLetter - Given "TaxParcelLetter" exists in the metadata - And "TaxParcelLetter" values are not null - Then "TaxParcelLetter" should be "String" data type - And "TaxParcelLetter" length should be between the bounds in the metadata - And "TaxParcelLetter" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @TaxTract @DD1.5_TaxTract @DD1.6_TaxTract - Scenario: TaxTract - Given "TaxTract" exists in the metadata - And "TaxTract" values are not null - Then "TaxTract" should be "String" data type - And "TaxTract" length should be between the bounds in the metadata - And "TaxTract" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Topography @IDX_Payload @DD1.5_Topography @DD1.6_Topography - Scenario: Topography - Given "Topography" exists in the metadata - And "Topography" values are not null - Then "Topography" should be "String" data type - And "Topography" length should be between the bounds in the metadata - And "Topography" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Township @DD1.5_Township @DD1.6_Township - Scenario: Township - Given "Township" exists in the metadata - And "Township" values are not null - Then "Township" should be "String" data type - And "Township" length should be between the bounds in the metadata - And "Township" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @TransactionBrokerCompensation @DD1.5_TransactionBrokerCompensation @DD1.6_TransactionBrokerCompensation - Scenario: TransactionBrokerCompensation - Given "TransactionBrokerCompensation" exists in the metadata - And "TransactionBrokerCompensation" values are not null - Then "TransactionBrokerCompensation" should be "String" data type - And "TransactionBrokerCompensation" length should be between the bounds in the metadata - And "TransactionBrokerCompensation" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @UnitNumber @IDX_Payload @DD1.5_UnitNumber @DD1.6_UnitNumber - Scenario: UnitNumber - Given "UnitNumber" exists in the metadata - And "UnitNumber" values are not null - Then "UnitNumber" should be "String" data type - And "UnitNumber" length should be between the bounds in the metadata - And "UnitNumber" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @VirtualTourURLUnbranded @IDX_Payload @DD1.5_VirtualTourURLUnbranded @DD1.6_VirtualTourURLUnbranded - Scenario: VirtualTourURLUnbranded - Given "VirtualTourURLUnbranded" exists in the metadata - And "VirtualTourURLUnbranded" values are not null - Then "VirtualTourURLUnbranded" should be "String" data type - And "VirtualTourURLUnbranded" length should be between the bounds in the metadata - And "VirtualTourURLUnbranded" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @VirtualTourURLBranded @DD1.5_VirtualTourURLBranded @DD1.6_VirtualTourURLBranded - Scenario: VirtualTourURLBranded - Given "VirtualTourURLBranded" exists in the metadata - And "VirtualTourURLBranded" values are not null - Then "VirtualTourURLBranded" should be "String" data type - And "VirtualTourURLBranded" length should be between the bounds in the metadata - And "VirtualTourURLBranded" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @WaterBodyName @IDX_Payload @DD1.5_WaterBodyName @DD1.6_WaterBodyName - Scenario: WaterBodyName - Given "WaterBodyName" exists in the metadata - And "WaterBodyName" values are not null - Then "WaterBodyName" should be "String" data type - And "WaterBodyName" length should be between the bounds in the metadata - And "WaterBodyName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @YearBuiltDetails @DD1.5_YearBuiltDetails @DD1.6_YearBuiltDetails - Scenario: YearBuiltDetails - Given "YearBuiltDetails" exists in the metadata - And "YearBuiltDetails" values are not null - Then "YearBuiltDetails" should be "String" data type - And "YearBuiltDetails" length should be between the bounds in the metadata - And "YearBuiltDetails" length should be less than or equal to the RESO maxlength of 1024 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @Zoning @DD1.5_Zoning @DD1.6_Zoning @testing - Scenario: Zoning - Given "Zoning" exists in the metadata - And "Zoning" values are not null - Then "Zoning" should be "String" data type - And "Zoning" length should be between the bounds in the metadata - And "Zoning" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ZoningDescription @DD1.5_ZoningDescription @DD1.6_ZoningDescription - Scenario: ZoningDescription - Given "ZoningDescription" exists in the metadata - And "ZoningDescription" values are not null - Then "ZoningDescription" should be "String" data type - And "ZoningDescription" length should be between the bounds in the metadata - And "ZoningDescription" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListingKey @IDX_Payload @DD1.5_ListingKey @DD1.6_ListingKey @testing - Scenario: ListingKey - Given "ListingKey" exists in the metadata - And "ListingKey" values are not null - Then "ListingKey" should be "String" data type - And "ListingKey" length should be between the bounds in the metadata - And "ListingKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentDesignation @DD1.5_BuyerAgentDesignation @DD1.6_BuyerAgentDesignation @testing - Scenario: BuyerAgentDesignation - Given "BuyerAgentDesignation" exists in the metadata - And "BuyerAgentDesignation" values are not null - Then "BuyerAgentDesignation" should be "String" data type - And "BuyerAgentDesignation" length should be between the bounds in the metadata - And "BuyerAgentDesignation" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentFullName @IDX_Payload @DD1.5_BuyerAgentFullName @DD1.6_BuyerAgentFullName @testing - Scenario: BuyerAgentFullName2 - Given "BuyerAgentFullName" exists in the metadata - And "BuyerAgentFullName" values are not null - Then "BuyerAgentFullName" should be "String" data type - And "BuyerAgentFullName" length should be between the bounds in the metadata - And "BuyerAgentFullName" length should be less than or equal to the RESO maxlength of 150 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentDesignation @DD1.5_CoBuyerAgentDesignation @DD1.6_CoBuyerAgentDesignation - Scenario: CoBuyerAgentDesignation - Given "CoBuyerAgentDesignation" exists in the metadata - And "CoBuyerAgentDesignation" values are not null - Then "CoBuyerAgentDesignation" should be "String" data type - And "CoBuyerAgentDesignation" length should be between the bounds in the metadata - And "CoBuyerAgentDesignation" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentFullName @IDX_Payload @DD1.5_CoBuyerAgentFullName @DD1.6_CoBuyerAgentFullName - Scenario: CoBuyerAgentFullName - Given "CoBuyerAgentFullName" exists in the metadata - And "CoBuyerAgentFullName" values are not null - Then "CoBuyerAgentFullName" should be "String" data type - And "CoBuyerAgentFullName" length should be between the bounds in the metadata - And "CoBuyerAgentFullName" length should be less than or equal to the RESO maxlength of 150 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentDesignation @DD1.5_CoListAgentDesignation @DD1.6_CoListAgentDesignation - Scenario: CoListAgentDesignation - Given "CoListAgentDesignation" exists in the metadata - And "CoListAgentDesignation" values are not null - Then "CoListAgentDesignation" should be "String" data type - And "CoListAgentDesignation" length should be between the bounds in the metadata - And "CoListAgentDesignation" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentFullName @IDX_Payload @DD1.5_CoListAgentFullName @DD1.6_CoListAgentFullName - Scenario: CoListAgentFullName - Given "CoListAgentFullName" exists in the metadata - And "CoListAgentFullName" values are not null - Then "CoListAgentFullName" should be "String" data type - And "CoListAgentFullName" length should be between the bounds in the metadata - And "CoListAgentFullName" length should be less than or equal to the RESO maxlength of 150 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentDesignation @DD1.5_ListAgentDesignation @DD1.6_ListAgentDesignation - Scenario: ListAgentDesignation - Given "ListAgentDesignation" exists in the metadata - And "ListAgentDesignation" values are not null - Then "ListAgentDesignation" should be "String" data type - And "ListAgentDesignation" length should be between the bounds in the metadata - And "ListAgentDesignation" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentFullName @IDX_Payload @DD1.5_ListAgentFullName @DD1.6_ListAgentFullName - Scenario: ListAgentFullName - Given "ListAgentFullName" exists in the metadata - And "ListAgentFullName" values are not null - Then "ListAgentFullName" should be "String" data type - And "ListAgentFullName" length should be between the bounds in the metadata - And "ListAgentFullName" length should be less than or equal to the RESO maxlength of 150 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuilderName @DD1.5_BuilderName @DD1.6_BuilderName - Scenario: BuilderName - Given "BuilderName" exists in the metadata - And "BuilderName" values are not null - Then "BuilderName" should be "String" data type - And "BuilderName" length should be between the bounds in the metadata - And "BuilderName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentCellPhone @DD1.5_BuyerAgentCellPhone @DD1.6_BuyerAgentCellPhone - Scenario: BuyerAgentCellPhone - Given "BuyerAgentCellPhone" exists in the metadata - And "BuyerAgentCellPhone" values are not null - Then "BuyerAgentCellPhone" should be "String" data type - And "BuyerAgentCellPhone" length should be between the bounds in the metadata - And "BuyerAgentCellPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentDirectPhone @DD1.5_BuyerAgentDirectPhone @DD1.6_BuyerAgentDirectPhone - Scenario: BuyerAgentDirectPhone - Given "BuyerAgentDirectPhone" exists in the metadata - And "BuyerAgentDirectPhone" values are not null - Then "BuyerAgentDirectPhone" should be "String" data type - And "BuyerAgentDirectPhone" length should be between the bounds in the metadata - And "BuyerAgentDirectPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentEmail @DD1.5_BuyerAgentEmail @DD1.6_BuyerAgentEmail - Scenario: BuyerAgentEmail - Given "BuyerAgentEmail" exists in the metadata - And "BuyerAgentEmail" values are not null - Then "BuyerAgentEmail" should be "String" data type - And "BuyerAgentEmail" length should be between the bounds in the metadata - And "BuyerAgentEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentFax @DD1.5_BuyerAgentFax @DD1.6_BuyerAgentFax - Scenario: BuyerAgentFax - Given "BuyerAgentFax" exists in the metadata - And "BuyerAgentFax" values are not null - Then "BuyerAgentFax" should be "String" data type - And "BuyerAgentFax" length should be between the bounds in the metadata - And "BuyerAgentFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentFirstName @IDX_Payload @DD1.5_BuyerAgentFirstName @DD1.6_BuyerAgentFirstName - Scenario: BuyerAgentFirstName - Given "BuyerAgentFirstName" exists in the metadata - And "BuyerAgentFirstName" values are not null - Then "BuyerAgentFirstName" should be "String" data type - And "BuyerAgentFirstName" length should be between the bounds in the metadata - And "BuyerAgentFirstName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentLastName @IDX_Payload @DD1.5_BuyerAgentLastName @DD1.6_BuyerAgentLastName - Scenario: BuyerAgentLastName - Given "BuyerAgentLastName" exists in the metadata - And "BuyerAgentLastName" values are not null - Then "BuyerAgentLastName" should be "String" data type - And "BuyerAgentLastName" length should be between the bounds in the metadata - And "BuyerAgentLastName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentMiddleName @DD1.5_BuyerAgentMiddleName @DD1.6_BuyerAgentMiddleName - Scenario: BuyerAgentMiddleName - Given "BuyerAgentMiddleName" exists in the metadata - And "BuyerAgentMiddleName" values are not null - Then "BuyerAgentMiddleName" should be "String" data type - And "BuyerAgentMiddleName" length should be between the bounds in the metadata - And "BuyerAgentMiddleName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentOfficePhone @DD1.5_BuyerAgentOfficePhone @DD1.6_BuyerAgentOfficePhone - Scenario: BuyerAgentOfficePhone - Given "BuyerAgentOfficePhone" exists in the metadata - And "BuyerAgentOfficePhone" values are not null - Then "BuyerAgentOfficePhone" should be "String" data type - And "BuyerAgentOfficePhone" length should be between the bounds in the metadata - And "BuyerAgentOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentPager @DD1.5_BuyerAgentPager @DD1.6_BuyerAgentPager - Scenario: BuyerAgentPager - Given "BuyerAgentPager" exists in the metadata - And "BuyerAgentPager" values are not null - Then "BuyerAgentPager" should be "String" data type - And "BuyerAgentPager" length should be between the bounds in the metadata - And "BuyerAgentPager" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentPreferredPhone @DD1.5_BuyerAgentPreferredPhone @DD1.6_BuyerAgentPreferredPhone - Scenario: BuyerAgentPreferredPhone - Given "BuyerAgentPreferredPhone" exists in the metadata - And "BuyerAgentPreferredPhone" values are not null - Then "BuyerAgentPreferredPhone" should be "String" data type - And "BuyerAgentPreferredPhone" length should be between the bounds in the metadata - And "BuyerAgentPreferredPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentStateLicense @DD1.5_BuyerAgentStateLicense @DD1.6_BuyerAgentStateLicense - Scenario: BuyerAgentStateLicense - Given "BuyerAgentStateLicense" exists in the metadata - And "BuyerAgentStateLicense" values are not null - Then "BuyerAgentStateLicense" should be "String" data type - And "BuyerAgentStateLicense" length should be between the bounds in the metadata - And "BuyerAgentStateLicense" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentTollFreePhone @DD1.5_BuyerAgentTollFreePhone @DD1.6_BuyerAgentTollFreePhone - Scenario: BuyerAgentTollFreePhone - Given "BuyerAgentTollFreePhone" exists in the metadata - And "BuyerAgentTollFreePhone" values are not null - Then "BuyerAgentTollFreePhone" should be "String" data type - And "BuyerAgentTollFreePhone" length should be between the bounds in the metadata - And "BuyerAgentTollFreePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentURL @DD1.5_BuyerAgentURL @DD1.6_BuyerAgentURL - Scenario: BuyerAgentURL - Given "BuyerAgentURL" exists in the metadata - And "BuyerAgentURL" values are not null - Then "BuyerAgentURL" should be "String" data type - And "BuyerAgentURL" length should be between the bounds in the metadata - And "BuyerAgentURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerAgentVoiceMail @DD1.5_BuyerAgentVoiceMail @DD1.6_BuyerAgentVoiceMail - Scenario: BuyerAgentVoiceMail - Given "BuyerAgentVoiceMail" exists in the metadata - And "BuyerAgentVoiceMail" values are not null - Then "BuyerAgentVoiceMail" should be "String" data type - And "BuyerAgentVoiceMail" length should be between the bounds in the metadata - And "BuyerAgentVoiceMail" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerOfficeEmail @DD1.5_BuyerOfficeEmail @DD1.6_BuyerOfficeEmail - Scenario: BuyerOfficeEmail - Given "BuyerOfficeEmail" exists in the metadata - And "BuyerOfficeEmail" values are not null - Then "BuyerOfficeEmail" should be "String" data type - And "BuyerOfficeEmail" length should be between the bounds in the metadata - And "BuyerOfficeEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerOfficeFax @DD1.5_BuyerOfficeFax @DD1.6_BuyerOfficeFax - Scenario: BuyerOfficeFax - Given "BuyerOfficeFax" exists in the metadata - And "BuyerOfficeFax" values are not null - Then "BuyerOfficeFax" should be "String" data type - And "BuyerOfficeFax" length should be between the bounds in the metadata - And "BuyerOfficeFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerOfficeName @IDX_Payload @DD1.5_BuyerOfficeName @DD1.6_BuyerOfficeName - Scenario: BuyerOfficeName - Given "BuyerOfficeName" exists in the metadata - And "BuyerOfficeName" values are not null - Then "BuyerOfficeName" should be "String" data type - And "BuyerOfficeName" length should be between the bounds in the metadata - And "BuyerOfficeName" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerOfficePhone @DD1.5_BuyerOfficePhone @DD1.6_BuyerOfficePhone - Scenario: BuyerOfficePhone - Given "BuyerOfficePhone" exists in the metadata - And "BuyerOfficePhone" values are not null - Then "BuyerOfficePhone" should be "String" data type - And "BuyerOfficePhone" length should be between the bounds in the metadata - And "BuyerOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @BuyerOfficeURL @DD1.5_BuyerOfficeURL @DD1.6_BuyerOfficeURL - Scenario: BuyerOfficeURL - Given "BuyerOfficeURL" exists in the metadata - And "BuyerOfficeURL" values are not null - Then "BuyerOfficeURL" should be "String" data type - And "BuyerOfficeURL" length should be between the bounds in the metadata - And "BuyerOfficeURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentCellPhone @DD1.5_CoBuyerAgentCellPhone @DD1.6_CoBuyerAgentCellPhone - Scenario: CoBuyerAgentCellPhone - Given "CoBuyerAgentCellPhone" exists in the metadata - And "CoBuyerAgentCellPhone" values are not null - Then "CoBuyerAgentCellPhone" should be "String" data type - And "CoBuyerAgentCellPhone" length should be between the bounds in the metadata - And "CoBuyerAgentCellPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentDirectPhone @DD1.5_CoBuyerAgentDirectPhone @DD1.6_CoBuyerAgentDirectPhone - Scenario: CoBuyerAgentDirectPhone - Given "CoBuyerAgentDirectPhone" exists in the metadata - And "CoBuyerAgentDirectPhone" values are not null - Then "CoBuyerAgentDirectPhone" should be "String" data type - And "CoBuyerAgentDirectPhone" length should be between the bounds in the metadata - And "CoBuyerAgentDirectPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentEmail @DD1.5_CoBuyerAgentEmail @DD1.6_CoBuyerAgentEmail - Scenario: CoBuyerAgentEmail - Given "CoBuyerAgentEmail" exists in the metadata - And "CoBuyerAgentEmail" values are not null - Then "CoBuyerAgentEmail" should be "String" data type - And "CoBuyerAgentEmail" length should be between the bounds in the metadata - And "CoBuyerAgentEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentFax @DD1.5_CoBuyerAgentFax @DD1.6_CoBuyerAgentFax - Scenario: CoBuyerAgentFax - Given "CoBuyerAgentFax" exists in the metadata - And "CoBuyerAgentFax" values are not null - Then "CoBuyerAgentFax" should be "String" data type - And "CoBuyerAgentFax" length should be between the bounds in the metadata - And "CoBuyerAgentFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentFirstName @IDX_Payload @DD1.5_CoBuyerAgentFirstName @DD1.6_CoBuyerAgentFirstName - Scenario: CoBuyerAgentFirstName - Given "CoBuyerAgentFirstName" exists in the metadata - And "CoBuyerAgentFirstName" values are not null - Then "CoBuyerAgentFirstName" should be "String" data type - And "CoBuyerAgentFirstName" length should be between the bounds in the metadata - And "CoBuyerAgentFirstName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentLastName @IDX_Payload @DD1.5_CoBuyerAgentLastName @DD1.6_CoBuyerAgentLastName - Scenario: CoBuyerAgentLastName - Given "CoBuyerAgentLastName" exists in the metadata - And "CoBuyerAgentLastName" values are not null - Then "CoBuyerAgentLastName" should be "String" data type - And "CoBuyerAgentLastName" length should be between the bounds in the metadata - And "CoBuyerAgentLastName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentMiddleName @DD1.5_CoBuyerAgentMiddleName @DD1.6_CoBuyerAgentMiddleName - Scenario: CoBuyerAgentMiddleName - Given "CoBuyerAgentMiddleName" exists in the metadata - And "CoBuyerAgentMiddleName" values are not null - Then "CoBuyerAgentMiddleName" should be "String" data type - And "CoBuyerAgentMiddleName" length should be between the bounds in the metadata - And "CoBuyerAgentMiddleName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentOfficePhone @DD1.5_CoBuyerAgentOfficePhone @DD1.6_CoBuyerAgentOfficePhone - Scenario: CoBuyerAgentOfficePhone - Given "CoBuyerAgentOfficePhone" exists in the metadata - And "CoBuyerAgentOfficePhone" values are not null - Then "CoBuyerAgentOfficePhone" should be "String" data type - And "CoBuyerAgentOfficePhone" length should be between the bounds in the metadata - And "CoBuyerAgentOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentPager @DD1.5_CoBuyerAgentPager @DD1.6_CoBuyerAgentPager - Scenario: CoBuyerAgentPager - Given "CoBuyerAgentPager" exists in the metadata - And "CoBuyerAgentPager" values are not null - Then "CoBuyerAgentPager" should be "String" data type - And "CoBuyerAgentPager" length should be between the bounds in the metadata - And "CoBuyerAgentPager" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentPreferredPhone @DD1.5_CoBuyerAgentPreferredPhone @DD1.6_CoBuyerAgentPreferredPhone - Scenario: CoBuyerAgentPreferredPhone - Given "CoBuyerAgentPreferredPhone" exists in the metadata - And "CoBuyerAgentPreferredPhone" values are not null - Then "CoBuyerAgentPreferredPhone" should be "String" data type - And "CoBuyerAgentPreferredPhone" length should be between the bounds in the metadata - And "CoBuyerAgentPreferredPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentStateLicense @DD1.5_CoBuyerAgentStateLicense @DD1.6_CoBuyerAgentStateLicense - Scenario: CoBuyerAgentStateLicense - Given "CoBuyerAgentStateLicense" exists in the metadata - And "CoBuyerAgentStateLicense" values are not null - Then "CoBuyerAgentStateLicense" should be "String" data type - And "CoBuyerAgentStateLicense" length should be between the bounds in the metadata - And "CoBuyerAgentStateLicense" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentTollFreePhone @DD1.5_CoBuyerAgentTollFreePhone @DD1.6_CoBuyerAgentTollFreePhone - Scenario: CoBuyerAgentTollFreePhone - Given "CoBuyerAgentTollFreePhone" exists in the metadata - And "CoBuyerAgentTollFreePhone" values are not null - Then "CoBuyerAgentTollFreePhone" should be "String" data type - And "CoBuyerAgentTollFreePhone" length should be between the bounds in the metadata - And "CoBuyerAgentTollFreePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentURL @DD1.5_CoBuyerAgentURL @DD1.6_CoBuyerAgentURL - Scenario: CoBuyerAgentURL - Given "CoBuyerAgentURL" exists in the metadata - And "CoBuyerAgentURL" values are not null - Then "CoBuyerAgentURL" should be "String" data type - And "CoBuyerAgentURL" length should be between the bounds in the metadata - And "CoBuyerAgentURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerAgentVoiceMail @DD1.5_CoBuyerAgentVoiceMail @DD1.6_CoBuyerAgentVoiceMail - Scenario: CoBuyerAgentVoiceMail - Given "CoBuyerAgentVoiceMail" exists in the metadata - And "CoBuyerAgentVoiceMail" values are not null - Then "CoBuyerAgentVoiceMail" should be "String" data type - And "CoBuyerAgentVoiceMail" length should be between the bounds in the metadata - And "CoBuyerAgentVoiceMail" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeEmail @DD1.5_CoBuyerOfficeEmail @DD1.6_CoBuyerOfficeEmail - Scenario: CoBuyerOfficeEmail - Given "CoBuyerOfficeEmail" exists in the metadata - And "CoBuyerOfficeEmail" values are not null - Then "CoBuyerOfficeEmail" should be "String" data type - And "CoBuyerOfficeEmail" length should be between the bounds in the metadata - And "CoBuyerOfficeEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeFax @DD1.5_CoBuyerOfficeFax @DD1.6_CoBuyerOfficeFax - Scenario: CoBuyerOfficeFax - Given "CoBuyerOfficeFax" exists in the metadata - And "CoBuyerOfficeFax" values are not null - Then "CoBuyerOfficeFax" should be "String" data type - And "CoBuyerOfficeFax" length should be between the bounds in the metadata - And "CoBuyerOfficeFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeName @IDX_Payload @DD1.5_CoBuyerOfficeName @DD1.6_CoBuyerOfficeName - Scenario: CoBuyerOfficeName - Given "CoBuyerOfficeName" exists in the metadata - And "CoBuyerOfficeName" values are not null - Then "CoBuyerOfficeName" should be "String" data type - And "CoBuyerOfficeName" length should be between the bounds in the metadata - And "CoBuyerOfficeName" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficePhone @DD1.5_CoBuyerOfficePhone @DD1.6_CoBuyerOfficePhone - Scenario: CoBuyerOfficePhone - Given "CoBuyerOfficePhone" exists in the metadata - And "CoBuyerOfficePhone" values are not null - Then "CoBuyerOfficePhone" should be "String" data type - And "CoBuyerOfficePhone" length should be between the bounds in the metadata - And "CoBuyerOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoBuyerOfficeURL @DD1.5_CoBuyerOfficeURL @DD1.6_CoBuyerOfficeURL - Scenario: CoBuyerOfficeURL - Given "CoBuyerOfficeURL" exists in the metadata - And "CoBuyerOfficeURL" values are not null - Then "CoBuyerOfficeURL" should be "String" data type - And "CoBuyerOfficeURL" length should be between the bounds in the metadata - And "CoBuyerOfficeURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentCellPhone @DD1.5_CoListAgentCellPhone @DD1.6_CoListAgentCellPhone - Scenario: CoListAgentCellPhone - Given "CoListAgentCellPhone" exists in the metadata - And "CoListAgentCellPhone" values are not null - Then "CoListAgentCellPhone" should be "String" data type - And "CoListAgentCellPhone" length should be between the bounds in the metadata - And "CoListAgentCellPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentDirectPhone @DD1.5_CoListAgentDirectPhone @DD1.6_CoListAgentDirectPhone - Scenario: CoListAgentDirectPhone - Given "CoListAgentDirectPhone" exists in the metadata - And "CoListAgentDirectPhone" values are not null - Then "CoListAgentDirectPhone" should be "String" data type - And "CoListAgentDirectPhone" length should be between the bounds in the metadata - And "CoListAgentDirectPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentEmail @DD1.5_CoListAgentEmail @DD1.6_CoListAgentEmail - Scenario: CoListAgentEmail - Given "CoListAgentEmail" exists in the metadata - And "CoListAgentEmail" values are not null - Then "CoListAgentEmail" should be "String" data type - And "CoListAgentEmail" length should be between the bounds in the metadata - And "CoListAgentEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentFax @DD1.5_CoListAgentFax @DD1.6_CoListAgentFax - Scenario: CoListAgentFax - Given "CoListAgentFax" exists in the metadata - And "CoListAgentFax" values are not null - Then "CoListAgentFax" should be "String" data type - And "CoListAgentFax" length should be between the bounds in the metadata - And "CoListAgentFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentFirstName @IDX_Payload @DD1.5_CoListAgentFirstName @DD1.6_CoListAgentFirstName - Scenario: CoListAgentFirstName - Given "CoListAgentFirstName" exists in the metadata - And "CoListAgentFirstName" values are not null - Then "CoListAgentFirstName" should be "String" data type - And "CoListAgentFirstName" length should be between the bounds in the metadata - And "CoListAgentFirstName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentLastName @IDX_Payload @DD1.5_CoListAgentLastName @DD1.6_CoListAgentLastName - Scenario: CoListAgentLastName - Given "CoListAgentLastName" exists in the metadata - And "CoListAgentLastName" values are not null - Then "CoListAgentLastName" should be "String" data type - And "CoListAgentLastName" length should be between the bounds in the metadata - And "CoListAgentLastName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentMiddleName @DD1.5_CoListAgentMiddleName @DD1.6_CoListAgentMiddleName - Scenario: CoListAgentMiddleName - Given "CoListAgentMiddleName" exists in the metadata - And "CoListAgentMiddleName" values are not null - Then "CoListAgentMiddleName" should be "String" data type - And "CoListAgentMiddleName" length should be between the bounds in the metadata - And "CoListAgentMiddleName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentOfficePhone @DD1.5_CoListAgentOfficePhone @DD1.6_CoListAgentOfficePhone - Scenario: CoListAgentOfficePhone - Given "CoListAgentOfficePhone" exists in the metadata - And "CoListAgentOfficePhone" values are not null - Then "CoListAgentOfficePhone" should be "String" data type - And "CoListAgentOfficePhone" length should be between the bounds in the metadata - And "CoListAgentOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentOfficePhoneExt @DD1.5_CoListAgentOfficePhoneExt @DD1.6_CoListAgentOfficePhoneExt - Scenario: CoListAgentOfficePhoneExt - Given "CoListAgentOfficePhoneExt" exists in the metadata - And "CoListAgentOfficePhoneExt" values are not null - Then "CoListAgentOfficePhoneExt" should be "String" data type - And "CoListAgentOfficePhoneExt" length should be between the bounds in the metadata - And "CoListAgentOfficePhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentPager @DD1.5_CoListAgentPager @DD1.6_CoListAgentPager - Scenario: CoListAgentPager - Given "CoListAgentPager" exists in the metadata - And "CoListAgentPager" values are not null - Then "CoListAgentPager" should be "String" data type - And "CoListAgentPager" length should be between the bounds in the metadata - And "CoListAgentPager" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentPreferredPhone @DD1.5_CoListAgentPreferredPhone @DD1.6_CoListAgentPreferredPhone - Scenario: CoListAgentPreferredPhone - Given "CoListAgentPreferredPhone" exists in the metadata - And "CoListAgentPreferredPhone" values are not null - Then "CoListAgentPreferredPhone" should be "String" data type - And "CoListAgentPreferredPhone" length should be between the bounds in the metadata - And "CoListAgentPreferredPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentPreferredPhoneExt @DD1.5_CoListAgentPreferredPhoneExt @DD1.6_CoListAgentPreferredPhoneExt - Scenario: CoListAgentPreferredPhoneExt - Given "CoListAgentPreferredPhoneExt" exists in the metadata - And "CoListAgentPreferredPhoneExt" values are not null - Then "CoListAgentPreferredPhoneExt" should be "String" data type - And "CoListAgentPreferredPhoneExt" length should be between the bounds in the metadata - And "CoListAgentPreferredPhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentStateLicense @DD1.5_CoListAgentStateLicense @DD1.6_CoListAgentStateLicense - Scenario: CoListAgentStateLicense - Given "CoListAgentStateLicense" exists in the metadata - And "CoListAgentStateLicense" values are not null - Then "CoListAgentStateLicense" should be "String" data type - And "CoListAgentStateLicense" length should be between the bounds in the metadata - And "CoListAgentStateLicense" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentTollFreePhone @DD1.5_CoListAgentTollFreePhone @DD1.6_CoListAgentTollFreePhone - Scenario: CoListAgentTollFreePhone - Given "CoListAgentTollFreePhone" exists in the metadata - And "CoListAgentTollFreePhone" values are not null - Then "CoListAgentTollFreePhone" should be "String" data type - And "CoListAgentTollFreePhone" length should be between the bounds in the metadata - And "CoListAgentTollFreePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentURL @DD1.5_CoListAgentURL @DD1.6_CoListAgentURL - Scenario: CoListAgentURL - Given "CoListAgentURL" exists in the metadata - And "CoListAgentURL" values are not null - Then "CoListAgentURL" should be "String" data type - And "CoListAgentURL" length should be between the bounds in the metadata - And "CoListAgentURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentVoiceMail @DD1.5_CoListAgentVoiceMail @DD1.6_CoListAgentVoiceMail - Scenario: CoListAgentVoiceMail - Given "CoListAgentVoiceMail" exists in the metadata - And "CoListAgentVoiceMail" values are not null - Then "CoListAgentVoiceMail" should be "String" data type - And "CoListAgentVoiceMail" length should be between the bounds in the metadata - And "CoListAgentVoiceMail" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListAgentVoiceMailExt @DD1.5_CoListAgentVoiceMailExt @DD1.6_CoListAgentVoiceMailExt - Scenario: CoListAgentVoiceMailExt - Given "CoListAgentVoiceMailExt" exists in the metadata - And "CoListAgentVoiceMailExt" values are not null - Then "CoListAgentVoiceMailExt" should be "String" data type - And "CoListAgentVoiceMailExt" length should be between the bounds in the metadata - And "CoListAgentVoiceMailExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeEmail @DD1.5_CoListOfficeEmail @DD1.6_CoListOfficeEmail - Scenario: CoListOfficeEmail - Given "CoListOfficeEmail" exists in the metadata - And "CoListOfficeEmail" values are not null - Then "CoListOfficeEmail" should be "String" data type - And "CoListOfficeEmail" length should be between the bounds in the metadata - And "CoListOfficeEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeFax @DD1.5_CoListOfficeFax @DD1.6_CoListOfficeFax - Scenario: CoListOfficeFax - Given "CoListOfficeFax" exists in the metadata - And "CoListOfficeFax" values are not null - Then "CoListOfficeFax" should be "String" data type - And "CoListOfficeFax" length should be between the bounds in the metadata - And "CoListOfficeFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeName @IDX_Payload @DD1.5_CoListOfficeName @DD1.6_CoListOfficeName - Scenario: CoListOfficeName - Given "CoListOfficeName" exists in the metadata - And "CoListOfficeName" values are not null - Then "CoListOfficeName" should be "String" data type - And "CoListOfficeName" length should be between the bounds in the metadata - And "CoListOfficeName" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficePhone @DD1.5_CoListOfficePhone @DD1.6_CoListOfficePhone - Scenario: CoListOfficePhone - Given "CoListOfficePhone" exists in the metadata - And "CoListOfficePhone" values are not null - Then "CoListOfficePhone" should be "String" data type - And "CoListOfficePhone" length should be between the bounds in the metadata - And "CoListOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficePhoneExt @DD1.5_CoListOfficePhoneExt @DD1.6_CoListOfficePhoneExt - Scenario: CoListOfficePhoneExt - Given "CoListOfficePhoneExt" exists in the metadata - And "CoListOfficePhoneExt" values are not null - Then "CoListOfficePhoneExt" should be "String" data type - And "CoListOfficePhoneExt" length should be between the bounds in the metadata - And "CoListOfficePhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @CoListOfficeURL @DD1.5_CoListOfficeURL @DD1.6_CoListOfficeURL - Scenario: CoListOfficeURL - Given "CoListOfficeURL" exists in the metadata - And "CoListOfficeURL" values are not null - Then "CoListOfficeURL" should be "String" data type - And "CoListOfficeURL" length should be between the bounds in the metadata - And "CoListOfficeURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentCellPhone @DD1.5_ListAgentCellPhone @DD1.6_ListAgentCellPhone - Scenario: ListAgentCellPhone - Given "ListAgentCellPhone" exists in the metadata - And "ListAgentCellPhone" values are not null - Then "ListAgentCellPhone" should be "String" data type - And "ListAgentCellPhone" length should be between the bounds in the metadata - And "ListAgentCellPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentDirectPhone @DD1.5_ListAgentDirectPhone @DD1.6_ListAgentDirectPhone - Scenario: ListAgentDirectPhone - Given "ListAgentDirectPhone" exists in the metadata - And "ListAgentDirectPhone" values are not null - Then "ListAgentDirectPhone" should be "String" data type - And "ListAgentDirectPhone" length should be between the bounds in the metadata - And "ListAgentDirectPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentEmail @DD1.5_ListAgentEmail @DD1.6_ListAgentEmail - Scenario: ListAgentEmail - Given "ListAgentEmail" exists in the metadata - And "ListAgentEmail" values are not null - Then "ListAgentEmail" should be "String" data type - And "ListAgentEmail" length should be between the bounds in the metadata - And "ListAgentEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentFax @DD1.5_ListAgentFax @DD1.6_ListAgentFax - Scenario: ListAgentFax - Given "ListAgentFax" exists in the metadata - And "ListAgentFax" values are not null - Then "ListAgentFax" should be "String" data type - And "ListAgentFax" length should be between the bounds in the metadata - And "ListAgentFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentFirstName @IDX_Payload @DD1.5_ListAgentFirstName @DD1.6_ListAgentFirstName - Scenario: ListAgentFirstName - Given "ListAgentFirstName" exists in the metadata - And "ListAgentFirstName" values are not null - Then "ListAgentFirstName" should be "String" data type - And "ListAgentFirstName" length should be between the bounds in the metadata - And "ListAgentFirstName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentLastName @IDX_Payload @DD1.5_ListAgentLastName @DD1.6_ListAgentLastName - Scenario: ListAgentLastName - Given "ListAgentLastName" exists in the metadata - And "ListAgentLastName" values are not null - Then "ListAgentLastName" should be "String" data type - And "ListAgentLastName" length should be between the bounds in the metadata - And "ListAgentLastName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentMiddleName @DD1.5_ListAgentMiddleName @DD1.6_ListAgentMiddleName - Scenario: ListAgentMiddleName - Given "ListAgentMiddleName" exists in the metadata - And "ListAgentMiddleName" values are not null - Then "ListAgentMiddleName" should be "String" data type - And "ListAgentMiddleName" length should be between the bounds in the metadata - And "ListAgentMiddleName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentOfficePhone @DD1.5_ListAgentOfficePhone @DD1.6_ListAgentOfficePhone - Scenario: ListAgentOfficePhone - Given "ListAgentOfficePhone" exists in the metadata - And "ListAgentOfficePhone" values are not null - Then "ListAgentOfficePhone" should be "String" data type - And "ListAgentOfficePhone" length should be between the bounds in the metadata - And "ListAgentOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentOfficePhoneExt @DD1.5_ListAgentOfficePhoneExt @DD1.6_ListAgentOfficePhoneExt - Scenario: ListAgentOfficePhoneExt - Given "ListAgentOfficePhoneExt" exists in the metadata - And "ListAgentOfficePhoneExt" values are not null - Then "ListAgentOfficePhoneExt" should be "String" data type - And "ListAgentOfficePhoneExt" length should be between the bounds in the metadata - And "ListAgentOfficePhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentPager @DD1.5_ListAgentPager @DD1.6_ListAgentPager - Scenario: ListAgentPager - Given "ListAgentPager" exists in the metadata - And "ListAgentPager" values are not null - Then "ListAgentPager" should be "String" data type - And "ListAgentPager" length should be between the bounds in the metadata - And "ListAgentPager" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentPreferredPhone @DD1.5_ListAgentPreferredPhone @DD1.6_ListAgentPreferredPhone - Scenario: ListAgentPreferredPhone - Given "ListAgentPreferredPhone" exists in the metadata - And "ListAgentPreferredPhone" values are not null - Then "ListAgentPreferredPhone" should be "String" data type - And "ListAgentPreferredPhone" length should be between the bounds in the metadata - And "ListAgentPreferredPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentPreferredPhoneExt @DD1.5_ListAgentPreferredPhoneExt @DD1.6_ListAgentPreferredPhoneExt - Scenario: ListAgentPreferredPhoneExt - Given "ListAgentPreferredPhoneExt" exists in the metadata - And "ListAgentPreferredPhoneExt" values are not null - Then "ListAgentPreferredPhoneExt" should be "String" data type - And "ListAgentPreferredPhoneExt" length should be between the bounds in the metadata - And "ListAgentPreferredPhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentStateLicense @DD1.5_ListAgentStateLicense @DD1.6_ListAgentStateLicense - Scenario: ListAgentStateLicense - Given "ListAgentStateLicense" exists in the metadata - And "ListAgentStateLicense" values are not null - Then "ListAgentStateLicense" should be "String" data type - And "ListAgentStateLicense" length should be between the bounds in the metadata - And "ListAgentStateLicense" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentTollFreePhone @DD1.5_ListAgentTollFreePhone @DD1.6_ListAgentTollFreePhone - Scenario: ListAgentTollFreePhone - Given "ListAgentTollFreePhone" exists in the metadata - And "ListAgentTollFreePhone" values are not null - Then "ListAgentTollFreePhone" should be "String" data type - And "ListAgentTollFreePhone" length should be between the bounds in the metadata - And "ListAgentTollFreePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentURL @DD1.5_ListAgentURL @DD1.6_ListAgentURL - Scenario: ListAgentURL - Given "ListAgentURL" exists in the metadata - And "ListAgentURL" values are not null - Then "ListAgentURL" should be "String" data type - And "ListAgentURL" length should be between the bounds in the metadata - And "ListAgentURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentVoiceMail @DD1.5_ListAgentVoiceMail @DD1.6_ListAgentVoiceMail - Scenario: ListAgentVoiceMail - Given "ListAgentVoiceMail" exists in the metadata - And "ListAgentVoiceMail" values are not null - Then "ListAgentVoiceMail" should be "String" data type - And "ListAgentVoiceMail" length should be between the bounds in the metadata - And "ListAgentVoiceMail" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListAgentVoiceMailExt @DD1.5_ListAgentVoiceMailExt @DD1.6_ListAgentVoiceMailExt - Scenario: ListAgentVoiceMailExt - Given "ListAgentVoiceMailExt" exists in the metadata - And "ListAgentVoiceMailExt" values are not null - Then "ListAgentVoiceMailExt" should be "String" data type - And "ListAgentVoiceMailExt" length should be between the bounds in the metadata - And "ListAgentVoiceMailExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListOfficeEmail @DD1.5_ListOfficeEmail @DD1.6_ListOfficeEmail - Scenario: ListOfficeEmail - Given "ListOfficeEmail" exists in the metadata - And "ListOfficeEmail" values are not null - Then "ListOfficeEmail" should be "String" data type - And "ListOfficeEmail" length should be between the bounds in the metadata - And "ListOfficeEmail" length should be less than or equal to the RESO maxlength of 80 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListOfficeFax @DD1.5_ListOfficeFax @DD1.6_ListOfficeFax - Scenario: ListOfficeFax - Given "ListOfficeFax" exists in the metadata - And "ListOfficeFax" values are not null - Then "ListOfficeFax" should be "String" data type - And "ListOfficeFax" length should be between the bounds in the metadata - And "ListOfficeFax" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListOfficeName @IDX_Payload @DD1.5_ListOfficeName @DD1.6_ListOfficeName - Scenario: ListOfficeName - Given "ListOfficeName" exists in the metadata - And "ListOfficeName" values are not null - Then "ListOfficeName" should be "String" data type - And "ListOfficeName" length should be between the bounds in the metadata - And "ListOfficeName" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListOfficePhone @DD1.5_ListOfficePhone @DD1.6_ListOfficePhone - Scenario: ListOfficePhone - Given "ListOfficePhone" exists in the metadata - And "ListOfficePhone" values are not null - Then "ListOfficePhone" should be "String" data type - And "ListOfficePhone" length should be between the bounds in the metadata - And "ListOfficePhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListOfficePhoneExt @DD1.5_ListOfficePhoneExt @DD1.6_ListOfficePhoneExt - Scenario: ListOfficePhoneExt - Given "ListOfficePhoneExt" exists in the metadata - And "ListOfficePhoneExt" values are not null - Then "ListOfficePhoneExt" should be "String" data type - And "ListOfficePhoneExt" length should be between the bounds in the metadata - And "ListOfficePhoneExt" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListOfficeURL @DD1.5_ListOfficeURL @DD1.6_ListOfficeURL - Scenario: ListOfficeURL - Given "ListOfficeURL" exists in the metadata - And "ListOfficeURL" values are not null - Then "ListOfficeURL" should be "String" data type - And "ListOfficeURL" length should be between the bounds in the metadata - And "ListOfficeURL" length should be less than or equal to the RESO maxlength of 8000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ListingId @IDX_Payload @DD1.5_ListingId @DD1.6_ListingId @testing - Scenario: ListingId - Given "ListingId" exists in the metadata - And "ListingId" values are not null - Then "ListingId" should be "String" data type - And "ListingId" length should be between the bounds in the metadata - And "ListingId" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @OccupantName @DD1.5_OccupantName @DD1.6_OccupantName - Scenario: OccupantName - Given "OccupantName" exists in the metadata - And "OccupantName" values are not null - Then "OccupantName" should be "String" data type - And "OccupantName" length should be between the bounds in the metadata - And "OccupantName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @OccupantPhone @DD1.5_OccupantPhone @DD1.6_OccupantPhone - Scenario: OccupantPhone - Given "OccupantPhone" exists in the metadata - And "OccupantPhone" values are not null - Then "OccupantPhone" should be "String" data type - And "OccupantPhone" length should be between the bounds in the metadata - And "OccupantPhone" length should be less than or equal to the RESO maxlength of 16 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @OriginatingSystemKey @IDX_Payload @DD1.5_OriginatingSystemKey @DD1.6_OriginatingSystemKey - Scenario: OriginatingSystemKey - Given "OriginatingSystemKey" exists in the metadata - And "OriginatingSystemKey" values are not null - Then "OriginatingSystemKey" should be "String" data type - And "OriginatingSystemKey" length should be between the bounds in the metadata - And "OriginatingSystemKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @OriginatingSystemName @IDX_Payload @DD1.5_OriginatingSystemName @DD1.6_OriginatingSystemName - Scenario: OriginatingSystemName - Given "OriginatingSystemName" exists in the metadata - And "OriginatingSystemName" values are not null - Then "OriginatingSystemName" should be "String" data type - And "OriginatingSystemName" length should be between the bounds in the metadata - And "OriginatingSystemName" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @OwnerName @DD1.5_OwnerName @DD1.6_OwnerName - Scenario: OwnerName - Given "OwnerName" exists in the metadata - And "OwnerName" values are not null - Then "OwnerName" should be "String" data type - And "OwnerName" length should be between the bounds in the metadata - And "OwnerName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @PostalCode @IDX_Payload @DD1.5_PostalCode @DD1.6_PostalCode - Scenario: PostalCode - Given "PostalCode" exists in the metadata - And "PostalCode" values are not null - Then "PostalCode" should be "String" data type - And "PostalCode" length should be between the bounds in the metadata - And "PostalCode" length should be less than or equal to the RESO maxlength of 10 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @PrivateOfficeRemarks @DD1.5_PrivateOfficeRemarks @DD1.6_PrivateOfficeRemarks - Scenario: PrivateOfficeRemarks - Given "PrivateOfficeRemarks" exists in the metadata - And "PrivateOfficeRemarks" values are not null - Then "PrivateOfficeRemarks" should be "String" data type - And "PrivateOfficeRemarks" length should be between the bounds in the metadata - And "PrivateOfficeRemarks" length should be less than or equal to the RESO maxlength of 4000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @PrivateRemarks @DD1.5_PrivateRemarks @DD1.6_PrivateRemarks - Scenario: PrivateRemarks - Given "PrivateRemarks" exists in the metadata - And "PrivateRemarks" values are not null - Then "PrivateRemarks" should be "String" data type - And "PrivateRemarks" length should be between the bounds in the metadata - And "PrivateRemarks" length should be less than or equal to the RESO maxlength of 4000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @PublicRemarks @IDX_Payload @DD1.5_PublicRemarks @DD1.6_PublicRemarks @testing - Scenario: PublicRemarks - Given "PublicRemarks" exists in the metadata - And "PublicRemarks" values are not null - Then "PublicRemarks" should be "String" data type - And "PublicRemarks" length should be between the bounds in the metadata - And "PublicRemarks" length should be less than or equal to the RESO maxlength of 4000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @ShowingInstructions @DD1.5_ShowingInstructions @DD1.6_ShowingInstructions @testing - Scenario: ShowingInstructions - Given "ShowingInstructions" exists in the metadata - And "ShowingInstructions" values are not null - Then "ShowingInstructions" should be "String" data type - And "ShowingInstructions" length should be between the bounds in the metadata - And "ShowingInstructions" length should be less than or equal to the RESO maxlength of 4000 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @SourceSystemKey @IDX_Payload @DD1.5_SourceSystemKey @DD1.6_SourceSystemKey - Scenario: SourceSystemKey - Given "SourceSystemKey" exists in the metadata - And "SourceSystemKey" values are not null - Then "SourceSystemKey" should be "String" data type - And "SourceSystemKey" length should be between the bounds in the metadata - And "SourceSystemKey" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @SourceSystemName @IDX_Payload @DD1.5_SourceSystemName @DD1.6_SourceSystemName - Scenario: SourceSystemName - Given "SourceSystemName" exists in the metadata - And "SourceSystemName" values are not null - Then "SourceSystemName" should be "String" data type - And "SourceSystemName" length should be between the bounds in the metadata - And "SourceSystemName" length should be less than or equal to the RESO maxlength of 255 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @StreetAdditionalInfo @DD1.5_StreetAdditionalInfo @DD1.6_StreetAdditionalInfo - Scenario: StreetAdditionalInfo - Given "StreetAdditionalInfo" exists in the metadata - And "StreetAdditionalInfo" values are not null - Then "StreetAdditionalInfo" should be "String" data type - And "StreetAdditionalInfo" length should be between the bounds in the metadata - And "StreetAdditionalInfo" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @StreetName @IDX_Payload @DD1.5_StreetName @DD1.6_StreetName @testing - Scenario: StreetName - Given "StreetName" exists in the metadata - And "StreetName" values are not null - Then "StreetName" should be "String" data type - And "StreetName" length should be between the bounds in the metadata - And "StreetName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @StreetNumber @IDX_Payload @DD1.5_StreetNumber @DD1.6_StreetNumber - Scenario: StreetNumber - Given "StreetNumber" exists in the metadata - And "StreetNumber" values are not null - Then "StreetNumber" should be "String" data type - And "StreetNumber" length should be between the bounds in the metadata - And "StreetNumber" length should be less than or equal to the RESO maxlength of 25 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @SubdivisionName @IDX_Payload @DD1.5_SubdivisionName @DD1.6_SubdivisionName @testing - Scenario: SubdivisionName - Given "SubdivisionName" exists in the metadata - And "SubdivisionName" values are not null - Then "SubdivisionName" should be "String" data type - And "SubdivisionName" length should be between the bounds in the metadata - And "SubdivisionName" length should be less than or equal to the RESO maxlength of 50 - - @DD1.5_String @DD1.6_String @DD1.5 @DD1.6 @UnparsedAddress @IDX_Payload @DD1.5_UnparsedAddress @DD1.6_UnparsedAddress - Scenario: UnparsedAddress - Given "UnparsedAddress" exists in the metadata - And "UnparsedAddress" values are not null - Then "UnparsedAddress" should be "String" data type - And "UnparsedAddress" length should be between the bounds in the metadata - And "UnparsedAddress" length should be less than or equal to the RESO maxlength of 255 - diff --git a/src/main/java/org/reso/certification/features/data-dictionary/timestamp.feature b/src/main/java/org/reso/certification/features/data-dictionary/timestamp.feature deleted file mode 100644 index c6e1dfaa..00000000 --- a/src/main/java/org/reso/certification/features/data-dictionary/timestamp.feature +++ /dev/null @@ -1,95 +0,0 @@ -Feature: Timestamp Testing - - Background: - Given an XML Metadata file was provided - And the given file exists - And the file contains valid XML - And the file could be read by the Commander - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @DocumentsChangeTimestamp @DD1.5_DocumentsChangeTimestamp @DD1.6_DocumentsChangeTimestamp - Scenario: DocumentsChangeTimestamp - Given "DocumentsChangeTimestamp" exists in the metadata - And "DocumentsChangeTimestamp" values are not null - Then "DocumentsChangeTimestamp" should be "Timestamp" data type - And "DocumentsChangeTimestamp" length should be between the bounds in the metadata - And "DocumentsChangeTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @MajorChangeTimestamp @DD1.5_MajorChangeTimestamp @DD1.6_MajorChangeTimestamp - Scenario: MajorChangeTimestamp - Given "MajorChangeTimestamp" exists in the metadata - And "MajorChangeTimestamp" values are not null - Then "MajorChangeTimestamp" should be "Timestamp" data type - And "MajorChangeTimestamp" length should be between the bounds in the metadata - And "MajorChangeTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @ModificationTimestamp @IDX_Payload @testing @DD1.5_ModificationTimestamp @DD1.6_ModificationTimestamp - Scenario: ModificationTimestamp - Given "ModificationTimestamp" exists in the metadata - And "ModificationTimestamp" values are not null - Then "ModificationTimestamp" should be "Timestamp" data type - And "ModificationTimestamp" length should be between the bounds in the metadata - And "ModificationTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @OffMarketTimestamp @DD1.5_OffMarketTimestamp @DD1.6_OffMarketTimestamp - Scenario: OffMarketTimestamp - Given "OffMarketTimestamp" exists in the metadata - And "OffMarketTimestamp" values are not null - Then "OffMarketTimestamp" should be "Timestamp" data type - And "OffMarketTimestamp" length should be between the bounds in the metadata - And "OffMarketTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @OnMarketTimestamp @DD1.5_OnMarketTimestamp @DD1.6_OnMarketTimestamp - Scenario: OnMarketTimestamp - Given "OnMarketTimestamp" exists in the metadata - And "OnMarketTimestamp" values are not null - Then "OnMarketTimestamp" should be "Timestamp" data type - And "OnMarketTimestamp" length should be between the bounds in the metadata - And "OnMarketTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @OriginalEntryTimestamp @DD1.5_OriginalEntryTimestamp @DD1.6_OriginalEntryTimestamp - Scenario: OriginalEntryTimestamp - Given "OriginalEntryTimestamp" exists in the metadata - And "OriginalEntryTimestamp" values are not null - Then "OriginalEntryTimestamp" should be "Timestamp" data type - And "OriginalEntryTimestamp" length should be between the bounds in the metadata - And "OriginalEntryTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @PendingTimestamp @DD1.5_PendingTimestamp @DD1.6_PendingTimestamp - Scenario: PendingTimestamp - Given "PendingTimestamp" exists in the metadata - And "PendingTimestamp" values are not null - Then "PendingTimestamp" should be "Timestamp" data type - And "PendingTimestamp" length should be between the bounds in the metadata - And "PendingTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @PhotosChangeTimestamp @IDX_Payload @DD1.5_PhotosChangeTimestamp @DD1.6_PhotosChangeTimestamp - Scenario: PhotosChangeTimestamp - Given "PhotosChangeTimestamp" exists in the metadata - And "PhotosChangeTimestamp" values are not null - Then "PhotosChangeTimestamp" should be "Timestamp" data type - And "PhotosChangeTimestamp" length should be between the bounds in the metadata - And "PhotosChangeTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @PriceChangeTimestamp @IDX_Payload @DD1.5_PriceChangeTimestamp @DD1.6_PriceChangeTimestamp - Scenario: PriceChangeTimestamp - Given "PriceChangeTimestamp" exists in the metadata - And "PriceChangeTimestamp" values are not null - Then "PriceChangeTimestamp" should be "Timestamp" data type - And "PriceChangeTimestamp" length should be between the bounds in the metadata - And "PriceChangeTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @StatusChangeTimestamp @IDX_Payload @DD1.5_StatusChangeTimestamp @DD1.6_StatusChangeTimestamp - Scenario: StatusChangeTimestamp - Given "StatusChangeTimestamp" exists in the metadata - And "StatusChangeTimestamp" values are not null - Then "StatusChangeTimestamp" should be "Timestamp" data type - And "StatusChangeTimestamp" length should be between the bounds in the metadata - And "StatusChangeTimestamp" length should be less than or equal to the RESO maxlength of 27 - - @DD1.5_Timestamp @DD1.6_Timestamp @DD1.5 @DD1.6 @VideosChangeTimestamp @DD1.5_VideosChangeTimestamp @DD1.6_VideosChangeTimestamp - Scenario: VideosChangeTimestamp - Given "VideosChangeTimestamp" exists in the metadata - And "VideosChangeTimestamp" values are not null - Then "VideosChangeTimestamp" should be "Timestamp" data type - And "VideosChangeTimestamp" length should be between the bounds in the metadata - And "VideosChangeTimestamp" length should be less than or equal to the RESO maxlength of 27 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/contactlistingnotes.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/contactlistingnotes.feature new file mode 100644 index 00000000..f4e73c41 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/contactlistingnotes.feature @@ -0,0 +1,73 @@ +# This file was autogenerated on: 20201023121019795 +Feature: ContactListingNotes + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @ContactListingNotes + Scenario: ContactKey + When "ContactKey" exists in the "ContactListingNotes" metadata + Then "ContactKey" MUST be "String" data type + And "ContactKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @ContactListingNotes + Scenario: ContactKeyNumeric + When "ContactKeyNumeric" exists in the "ContactListingNotes" metadata + Then "ContactKeyNumeric" MUST be "Integer" data type + + @ContactListingNotes + Scenario: ContactListingNotesKey + When "ContactListingNotesKey" exists in the "ContactListingNotes" metadata + Then "ContactListingNotesKey" MUST be "String" data type + And "ContactListingNotesKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @ContactListingNotes + Scenario: ContactListingNotesKeyNumeric + When "ContactListingNotesKeyNumeric" exists in the "ContactListingNotes" metadata + Then "ContactListingNotesKeyNumeric" MUST be "Integer" data type + + @ContactListingNotes + Scenario: ListingId + When "ListingId" exists in the "ContactListingNotes" metadata + Then "ListingId" MUST be "String" data type + And "ListingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @ContactListingNotes + Scenario: ListingKey + When "ListingKey" exists in the "ContactListingNotes" metadata + Then "ListingKey" MUST be "String" data type + And "ListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @ContactListingNotes + Scenario: ListingKeyNumeric + When "ListingKeyNumeric" exists in the "ContactListingNotes" metadata + Then "ListingKeyNumeric" MUST be "Integer" data type + + @ContactListingNotes + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "ContactListingNotes" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @ContactListingNotes + Scenario: NoteContents + When "NoteContents" exists in the "ContactListingNotes" metadata + Then "NoteContents" MUST be "String" data type + And "NoteContents" length SHOULD be equal to the RESO Suggested Max Length of 500 + + @ContactListingNotes + Scenario: NotedBy + When "NotedBy" exists in the "ContactListingNotes" metadata + Then "NotedBy" MUST be "Single Enumeration" data type + And "NotedBy" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Agent | Agent | + | Contact | Contact | + But "NotedBy" MUST NOT contain any similar lookups diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/contactlistings.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/contactlistings.feature new file mode 100644 index 00000000..6c032259 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/contactlistings.feature @@ -0,0 +1,156 @@ +# This file was autogenerated on: 20201023121019795 +Feature: ContactListings + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @ContactListings + Scenario: AgentNotesUnreadYN + When "AgentNotesUnreadYN" exists in the "ContactListings" metadata + Then "AgentNotesUnreadYN" MUST be "Boolean" data type + + @ContactListings + Scenario: ClassName + When "ClassName" exists in the "ContactListings" metadata + Then "ClassName" MUST be "Single Enumeration" data type + And "ClassName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BusinessOpportunity | Business Opportunity | + | CommercialLease | Commercial Lease | + | CommercialSale | Commercial Sale | + | Contacts | Contacts | + | CrossProperty | Cross Property | + | Farm | Farm | + | HistoryTransactional | History Transactional | + | Land | Land | + | ManufacturedInPark | Manufactured In Park | + | Media | Media | + | Member | Member | + | Office | Office | + | OpenHouse | Open House | + | Residential | Residential | + | ResidentialIncome | Residential Income | + | ResidentialLease | Residential Lease | + | SavedSearch | Saved Search | + But "ClassName" MUST NOT contain any similar lookups + + @ContactListings + Scenario: ContactKey + When "ContactKey" exists in the "ContactListings" metadata + Then "ContactKey" MUST be "String" data type + And "ContactKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @ContactListings + Scenario: ContactKeyNumeric + When "ContactKeyNumeric" exists in the "ContactListings" metadata + Then "ContactKeyNumeric" MUST be "Integer" data type + + @ContactListings + Scenario: ContactListingPreference + When "ContactListingPreference" exists in the "ContactListings" metadata + Then "ContactListingPreference" MUST be "Single Enumeration" data type + And "ContactListingPreference" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Discard | Discard | + | Favorite | Favorite | + | Possibility | Possibility | + But "ContactListingPreference" MUST NOT contain any similar lookups + + @ContactListings + Scenario: ContactListingsKey + When "ContactListingsKey" exists in the "ContactListings" metadata + Then "ContactListingsKey" MUST be "String" data type + And "ContactListingsKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @ContactListings + Scenario: ContactListingsKeyNumeric + When "ContactListingsKeyNumeric" exists in the "ContactListings" metadata + Then "ContactListingsKeyNumeric" MUST be "Integer" data type + + @ContactListings + Scenario: ContactLoginId + When "ContactLoginId" exists in the "ContactListings" metadata + Then "ContactLoginId" MUST be "String" data type + And "ContactLoginId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @ContactListings + Scenario: ContactNotesUnreadYN + When "ContactNotesUnreadYN" exists in the "ContactListings" metadata + Then "ContactNotesUnreadYN" MUST be "Boolean" data type + + @ContactListings + Scenario: DirectEmailYN + When "DirectEmailYN" exists in the "ContactListings" metadata + Then "DirectEmailYN" MUST be "Boolean" data type + + @ContactListings + Scenario: LastAgentNoteTimestamp + When "LastAgentNoteTimestamp" exists in the "ContactListings" metadata + Then "LastAgentNoteTimestamp" MUST be "Timestamp" data type + + @ContactListings + Scenario: LastContactNoteTimestamp + When "LastContactNoteTimestamp" exists in the "ContactListings" metadata + Then "LastContactNoteTimestamp" MUST be "Timestamp" data type + + @ContactListings + Scenario: ListingId + When "ListingId" exists in the "ContactListings" metadata + Then "ListingId" MUST be "String" data type + And "ListingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @ContactListings + Scenario: ListingKey + When "ListingKey" exists in the "ContactListings" metadata + Then "ListingKey" MUST be "String" data type + And "ListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @ContactListings + Scenario: ListingKeyNumeric + When "ListingKeyNumeric" exists in the "ContactListings" metadata + Then "ListingKeyNumeric" MUST be "Integer" data type + + @ContactListings + Scenario: ListingModificationTimestamp + When "ListingModificationTimestamp" exists in the "ContactListings" metadata + Then "ListingModificationTimestamp" MUST be "Timestamp" data type + + @ContactListings + Scenario: ListingSentTimestamp + When "ListingSentTimestamp" exists in the "ContactListings" metadata + Then "ListingSentTimestamp" MUST be "Timestamp" data type + + @ContactListings + Scenario: ListingViewedYN + When "ListingViewedYN" exists in the "ContactListings" metadata + Then "ListingViewedYN" MUST be "Boolean" data type + + @ContactListings + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "ContactListings" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @ContactListings + Scenario: PortalLastVisitedTimestamp + When "PortalLastVisitedTimestamp" exists in the "ContactListings" metadata + Then "PortalLastVisitedTimestamp" MUST be "Timestamp" data type + + @ContactListings + Scenario: ResourceName + When "ResourceName" exists in the "ContactListings" metadata + Then "ResourceName" MUST be "Single Enumeration" data type + And "ResourceName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Contacts | Contacts | + | Member | Member | + | Office | Office | + | Property | Property | + But "ResourceName" MUST NOT contain any similar lookups diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/contacts.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/contacts.feature new file mode 100644 index 00000000..746547e7 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/contacts.feature @@ -0,0 +1,1755 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Contacts + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Contacts + Scenario: Anniversary + When "Anniversary" exists in the "Contacts" metadata + Then "Anniversary" MUST be "Date" data type + + @Contacts + Scenario: AssistantEmail + When "AssistantEmail" exists in the "Contacts" metadata + Then "AssistantEmail" MUST be "String" data type + And "AssistantEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Contacts + Scenario: AssistantName + When "AssistantName" exists in the "Contacts" metadata + Then "AssistantName" MUST be "String" data type + And "AssistantName" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Contacts + Scenario: AssistantPhone + When "AssistantPhone" exists in the "Contacts" metadata + Then "AssistantPhone" MUST be "String" data type + And "AssistantPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: AssistantPhoneExt + When "AssistantPhoneExt" exists in the "Contacts" metadata + Then "AssistantPhoneExt" MUST be "String" data type + And "AssistantPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Contacts + Scenario: Birthdate + When "Birthdate" exists in the "Contacts" metadata + Then "Birthdate" MUST be "Date" data type + + @Contacts + Scenario: BusinessFax + When "BusinessFax" exists in the "Contacts" metadata + Then "BusinessFax" MUST be "String" data type + And "BusinessFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: Children + When "Children" exists in the "Contacts" metadata + Then "Children" MUST be "String" data type + And "Children" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Contacts + Scenario: Company + When "Company" exists in the "Contacts" metadata + Then "Company" MUST be "String" data type + And "Company" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: ContactKey + When "ContactKey" exists in the "Contacts" metadata + Then "ContactKey" MUST be "String" data type + And the following synonyms for "ContactKey" MUST NOT exist in the metadata + | RID | + And "ContactKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Contacts + Scenario: ContactKeyNumeric + When "ContactKeyNumeric" exists in the "Contacts" metadata + Then "ContactKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ContactKeyNumeric" MUST NOT exist in the metadata + | RID | + + @Contacts + Scenario: ContactLoginId + When "ContactLoginId" exists in the "Contacts" metadata + Then "ContactLoginId" MUST be "String" data type + And "ContactLoginId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Contacts + Scenario: ContactPassword + When "ContactPassword" exists in the "Contacts" metadata + Then "ContactPassword" MUST be "String" data type + And "ContactPassword" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Contacts + Scenario: ContactStatus + When "ContactStatus" exists in the "Contacts" metadata + Then "ContactStatus" MUST be "Single Enumeration" data type + And the following synonyms for "ContactStatus" MUST NOT exist in the metadata + | ChoiceList | + And "ContactStatus" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Active | Active | + | Deleted | Deleted | + | Inactive | Inactive | + | OnVacation | On Vacation | + But "ContactStatus" MUST NOT contain any similar lookups + + @Contacts + Scenario: ContactType + When "ContactType" exists in the "Contacts" metadata + Then "ContactType" MUST be "Multiple Enumeration" data type + And "ContactType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Business | Business | + | Family | Family | + | Friend | Friend | + | Lead | Lead | + | Prospect | Prospect | + | ReadyToBuy | Ready to Buy | + But "ContactType" MUST NOT contain any similar lookups + + @Contacts + Scenario: Department + When "Department" exists in the "Contacts" metadata + Then "Department" MUST be "String" data type + And "Department" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: DirectPhone + When "DirectPhone" exists in the "Contacts" metadata + Then "DirectPhone" MUST be "String" data type + And "DirectPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: Email + When "Email" exists in the "Contacts" metadata + Then "Email" MUST be "String" data type + And "Email" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Contacts + Scenario: Email2 + When "Email2" exists in the "Contacts" metadata + Then "Email2" MUST be "String" data type + And "Email2" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Contacts + Scenario: Email3 + When "Email3" exists in the "Contacts" metadata + Then "Email3" MUST be "String" data type + And "Email3" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Contacts + Scenario: FirstName + When "FirstName" exists in the "Contacts" metadata + Then "FirstName" MUST be "String" data type + And "FirstName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: FullName + When "FullName" exists in the "Contacts" metadata + Then "FullName" MUST be "String" data type + And "FullName" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Contacts + Scenario: HomeAddress1 + When "HomeAddress1" exists in the "Contacts" metadata + Then "HomeAddress1" MUST be "String" data type + And "HomeAddress1" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: HomeAddress2 + When "HomeAddress2" exists in the "Contacts" metadata + Then "HomeAddress2" MUST be "String" data type + And "HomeAddress2" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: HomeCarrierRoute + When "HomeCarrierRoute" exists in the "Contacts" metadata + Then "HomeCarrierRoute" MUST be "String" data type + And the following synonyms for "HomeCarrierRoute" MUST NOT exist in the metadata + | RR | + | CR | + And "HomeCarrierRoute" length SHOULD be equal to the RESO Suggested Max Length of 9 + + @Contacts + Scenario: HomeCity + When "HomeCity" exists in the "Contacts" metadata + Then "HomeCity" MUST be "String" data type + And "HomeCity" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: HomeCountry + When "HomeCountry" exists in the "Contacts" metadata + Then "HomeCountry" MUST be "Single Enumeration" data type + And "HomeCountry" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AD | AD | + | AE | AE | + | AF | AF | + | AG | AG | + | AI | AI | + | AL | AL | + | AM | AM | + | AN | AN | + | AO | AO | + | AQ | AQ | + | AR | AR | + | AS | AS | + | AT | AT | + | AU | AU | + | AW | AW | + | AX | AX | + | AZ | AZ | + | BA | BA | + | BB | BB | + | BD | BD | + | BE | BE | + | BF | BF | + | BG | BG | + | BH | BH | + | BI | BI | + | BJ | BJ | + | BL | BL | + | BM | BM | + | BN | BN | + | BO | BO | + | BR | BR | + | BS | BS | + | BT | BT | + | BV | BV | + | BW | BW | + | BY | BY | + | BZ | BZ | + | CA | CA | + | CC | CC | + | CD | CD | + | CF | CF | + | CG | CG | + | CH | CH | + | CI | CI | + | CK | CK | + | CL | CL | + | CM | CM | + | CN | CN | + | CO | CO | + | CR | CR | + | CU | CU | + | CV | CV | + | CX | CX | + | CY | CY | + | CZ | CZ | + | DE | DE | + | DJ | DJ | + | DK | DK | + | DM | DM | + | DO | DO | + | DZ | DZ | + | EC | EC | + | EE | EE | + | EG | EG | + | EH | EH | + | ER | ER | + | ES | ES | + | ET | ET | + | FI | FI | + | FJ | FJ | + | FK | FK | + | FM | FM | + | FO | FO | + | FR | FR | + | GA | GA | + | GB | GB | + | GD | GD | + | GE | GE | + | GF | GF | + | GG | GG | + | GH | GH | + | GI | GI | + | GL | GL | + | GM | GM | + | GN | GN | + | GP | GP | + | GQ | GQ | + | GR | GR | + | GS | GS | + | GT | GT | + | GU | GU | + | GW | GW | + | GY | GY | + | HK | HK | + | HM | HM | + | HN | HN | + | HR | HR | + | HT | HT | + | HU | HU | + | ID | ID | + | IE | IE | + | IL | IL | + | IM | IM | + | IN | IN | + | IO | IO | + | IQ | IQ | + | IR | IR | + | IS | IS | + | IT | IT | + | JE | JE | + | JM | JM | + | JO | JO | + | JP | JP | + | KE | KE | + | KG | KG | + | KH | KH | + | KI | KI | + | KM | KM | + | KN | KN | + | KP | KP | + | KR | KR | + | KW | KW | + | KY | KY | + | KZ | KZ | + | LA | LA | + | LB | LB | + | LC | LC | + | LI | LI | + | LK | LK | + | LR | LR | + | LS | LS | + | LT | LT | + | LU | LU | + | LV | LV | + | LY | LY | + | MA | MA | + | MC | MC | + | MD | MD | + | ME | ME | + | MF | MF | + | MG | MG | + | MH | MH | + | MK | MK | + | ML | ML | + | MM | MM | + | MN | MN | + | MO | MO | + | MP | MP | + | MQ | MQ | + | MR | MR | + | MS | MS | + | MT | MT | + | MU | MU | + | MV | MV | + | MW | MW | + | MX | MX | + | MY | MY | + | MZ | MZ | + | NA | NA | + | NC | NC | + | NE | NE | + | NF | NF | + | NG | NG | + | NI | NI | + | NL | NL | + | NP | NP | + | NR | NR | + | NU | NU | + | NZ | NZ | + | OM | OM | + | OT | OT | + | PA | PA | + | PE | PE | + | PF | PF | + | PG | PG | + | PH | PH | + | PK | PK | + | PL | PL | + | PM | PM | + | PN | PN | + | PR | PR | + | PS | PS | + | PT | PT | + | PW | PW | + | PY | PY | + | QA | QA | + | RE | RE | + | RO | RO | + | RS | RS | + | RU | RU | + | RW | RW | + | SA | SA | + | SB | SB | + | SC | SC | + | SD | SD | + | SE | SE | + | SG | SG | + | SH | SH | + | SI | SI | + | SJ | SJ | + | SK | SK | + | SL | SL | + | SM | SM | + | SN | SN | + | SO | SO | + | SR | SR | + | ST | ST | + | SV | SV | + | SY | SY | + | SZ | SZ | + | TC | TC | + | TD | TD | + | TF | TF | + | TG | TG | + | TH | TH | + | TJ | TJ | + | TK | TK | + | TL | TL | + | TM | TM | + | TN | TN | + | TO | TO | + | TR | TR | + | TT | TT | + | TV | TV | + | TW | TW | + | TZ | TZ | + | UA | UA | + | UG | UG | + | UM | UM | + | US | US | + | UY | UY | + | UZ | UZ | + | VA | VA | + | VC | VC | + | VE | VE | + | VG | VG | + | VI | VI | + | VN | VN | + | VU | VU | + | WF | WF | + | WS | WS | + | YE | YE | + | YT | YT | + | ZA | ZA | + | ZM | ZM | + | ZW | ZW | + But "HomeCountry" MUST NOT contain any similar lookups + + @Contacts + Scenario: HomeCountyOrParish + When "HomeCountyOrParish" exists in the "Contacts" metadata + Then "HomeCountyOrParish" MUST be "Single Enumeration" data type + And the following synonyms for "HomeCountyOrParish" MUST NOT exist in the metadata + | County | + + @Contacts + Scenario: HomeFax + When "HomeFax" exists in the "Contacts" metadata + Then "HomeFax" MUST be "String" data type + And "HomeFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: HomePhone + When "HomePhone" exists in the "Contacts" metadata + Then "HomePhone" MUST be "String" data type + And "HomePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: HomePostalCode + When "HomePostalCode" exists in the "Contacts" metadata + Then "HomePostalCode" MUST be "String" data type + And "HomePostalCode" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Contacts + Scenario: HomePostalCodePlus4 + When "HomePostalCodePlus4" exists in the "Contacts" metadata + Then "HomePostalCodePlus4" MUST be "String" data type + And "HomePostalCodePlus4" length SHOULD be equal to the RESO Suggested Max Length of 4 + + @Contacts + Scenario: HomeStateOrProvince + When "HomeStateOrProvince" exists in the "Contacts" metadata + Then "HomeStateOrProvince" MUST be "Single Enumeration" data type + And "HomeStateOrProvince" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "HomeStateOrProvince" MUST NOT contain any similar lookups + + @Contacts + Scenario: JobTitle + When "JobTitle" exists in the "Contacts" metadata + Then "JobTitle" MUST be "String" data type + And "JobTitle" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: Language + When "Language" exists in the "Contacts" metadata + Then "Language" MUST be "Multiple Enumeration" data type + And "Language" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Abkhazian | Abkhazian | + | Afar | Afar | + | Afrikaans | Afrikaans | + | Albanian | Albanian | + | AmericanSignLanguage | American Sign Language | + | Amharic | Amharic | + | Arabic | Arabic | + | Aramaic | Aramaic | + | Armenian | Armenian | + | Assamese | Assamese | + | AssyrianNeoAramaic | Assyrian Neo-Aramaic | + | Avestan | Avestan | + | Aymara | Aymara | + | Azerbaijani | Azerbaijani | + | Bambara | Bambara | + | Bashkir | Bashkir | + | Basque | Basque | + | Bengali | Bengali | + | Bihari | Bihari | + | Bikol | Bikol | + | Bislama | Bislama | + | Bosnian | Bosnian | + | BrazilianPortuguese | Brazilian Portuguese | + | Bulgarian | Bulgarian | + | Burmese | Burmese | + | Byelorussian | Byelorussian | + | Cambodian | Cambodian | + | Cantonese | Cantonese | + | CapeVerdeanCreole | Cape Verdean Creole | + | Catalan | Catalan | + | Cebuano | Cebuano | + | Chamorro | Chamorro | + | Chechen | Chechen | + | Chinese | Chinese | + | Chuukese | Chuukese | + | Chuvash | Chuvash | + | Cornish | Cornish | + | Corsican | Corsican | + | Croatian | Croatian | + | Czech | Czech | + | Danish | Danish | + | Dari | Dari (Afghan Persian) | + | Dioula | Dioula | + | Dutch | Dutch | + | Dzongkha | Dzongkha | + | English | English | + | Esperanto | Esperanto | + | Estonian | Estonian | + | Faroese | Faroese | + | Farsi | Farsi | + | Fiji | Fiji | + | Finnish | Finnish | + | Flemish | Flemish | + | French | French | + | Frisian | Frisian | + | Galician | Galician | + | Georgian | Georgian | + | German | German | + | Greek | Greek | + | Greenlandic | Greenlandic | + | Guarani | Guarani | + | Gujarati | Gujarati | + | HaitianCreole | Haitian Creole | + | Hausa | Hausa | + | Hebrew | Hebrew | + | Herero | Herero | + | Hiligaynon | Hiligaynon | + | Hindi | Hindi | + | HiriMotu | Hiri Motu | + | Hmong | Hmong | + | Hungarian | Hungarian | + | Iban | Iban | + | Icelandic | Icelandic | + | Igbo | Igbo | + | Ilocano | Ilocano | + | Indonesian | Indonesian | + | Interlingua | Interlingua | + | Inuktitut | Inuktitut | + | Inupiak | Inupiak | + | Irish | Irish (Gaelic) | + | Italian | Italian | + | Japanese | Japanese | + | Javanese | Javanese | + | Kannada | Kannada | + | Kashmiri | Kashmiri | + | Kazakh | Kazakh | + | KIche | K'iche' | + | Kichwa | Kichwa | + | Kikuyu | Kikuyu | + | Kinyarwanda | Kinyarwanda | + | Kirghiz | Kirghiz | + | Kirundi | Kirundi | + | Komi | Komi | + | Korean | Korean | + | Kpelle | Kpelle | + | Kru | Kru | + | Kurdish | Kurdish | + | Lao | Lao | + | Latin | Latin | + | Latvian | Latvian | + | Lingala | Lingala | + | Lithuanian | Lithuanian | + | Luxemburgish | Luxemburgish | + | Macedonian | Macedonian | + | Malagasy | Malagasy | + | Malay | Malay | + | Malayalam | Malayalam | + | Maltese | Maltese | + | Mandarin | Mandarin | + | Maninka | Maninka | + | ManxGaelic | Manx Gaelic | + | Maori | Maori | + | Marathi | Marathi | + | Marshallese | Marshallese | + | Moldovan | Moldovan | + | Mongolian | Mongolian | + | Nauru | Nauru | + | Navajo | Navajo | + | Ndebele | Ndebele | + | Ndonga | Ndonga | + | Nepali | Nepali | + | Norwegian | Norwegian | + | Nyanja | Nyanja | + | Occitan | Occitan | + | Oriya | Oriya | + | Oromo | Oromo | + | Ossetian | Ossetian | + | Pali | Pali | + | Pangasinan | Pangasinan | + | Papiamento | Papiamento | + | Pashto | Pashto | + | Polish | Polish | + | Portuguese | Portuguese | + | Punjabi | Punjabi | + | Quechua | Quechua | + | Romanian | Romanian | + | Romany | Romany | + | Russian | Russian | + | Sami | Sami | + | Samoan | Samoan | + | Sangho | Sangho | + | Sanskrit | Sanskrit | + | Sardinian | Sardinian | + | ScotsGaelic | Scots Gaelic | + | Serbian | Serbian | + | SerboCroatian | Serbo-Croatian | + | Sesotho | Sesotho | + | Setswana | Setswana | + | Shan | Shan | + | Shona | Shona | + | Sindhi | Sindhi | + | Sinhalese | Sinhalese | + | Siswati | Siswati | + | Slovak | Slovak | + | Slovenian | Slovenian | + | Somali | Somali | + | SouthernNdebele | Southern Ndebele | + | Spanish | Spanish | + | Sundanese | Sundanese | + | Swahili | Swahili | + | Swedish | Swedish | + | Syriac | Syriac | + | Tagalog | Tagalog | + | Tahitian | Tahitian | + | Tajik | Tajik | + | Tamil | Tamil | + | Tatar | Tatar | + | Telugu | Telugu | + | Thai | Thai | + | Tibetan | Tibetan | + | Tigrinya | Tigrinya | + | Tongan | Tongan | + | Tsonga | Tsonga | + | Turkish | Turkish | + | Turkmen | Turkmen | + | Twi | Twi | + | Uigur | Uigur | + | Ukrainian | Ukrainian | + | Urdu | Urdu | + | Uzbek | Uzbek | + | Vietnamese | Vietnamese | + | Volapuk | Volapuk | + | Welsh | Welsh | + | Wolof | Wolof | + | Xhosa | Xhosa | + | Yiddish | Yiddish | + | Yoruba | Yoruba | + | Zhuang | Zhuang | + | Zulu | Zulu | + But "Language" MUST NOT contain any similar lookups + + @Contacts + Scenario: LastName + When "LastName" exists in the "Contacts" metadata + Then "LastName" MUST be "String" data type + And "LastName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: LeadSource + When "LeadSource" exists in the "Contacts" metadata + Then "LeadSource" MUST be "String" data type + And "LeadSource" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Contacts + Scenario: MiddleName + When "MiddleName" exists in the "Contacts" metadata + Then "MiddleName" MUST be "String" data type + And "MiddleName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: MobilePhone + When "MobilePhone" exists in the "Contacts" metadata + Then "MobilePhone" MUST be "String" data type + And "MobilePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Contacts" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @Contacts + Scenario: NamePrefix + When "NamePrefix" exists in the "Contacts" metadata + Then "NamePrefix" MUST be "String" data type + And the following synonyms for "NamePrefix" MUST NOT exist in the metadata + | Salutation | + | Title | + And "NamePrefix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Contacts + Scenario: NameSuffix + When "NameSuffix" exists in the "Contacts" metadata + Then "NameSuffix" MUST be "String" data type + And "NameSuffix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Contacts + Scenario: Nickname + When "Nickname" exists in the "Contacts" metadata + Then "Nickname" MUST be "String" data type + And "Nickname" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: Notes + When "Notes" exists in the "Contacts" metadata + Then "Notes" MUST be "String" data type + And "Notes" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Contacts + Scenario: OfficePhone + When "OfficePhone" exists in the "Contacts" metadata + Then "OfficePhone" MUST be "String" data type + And "OfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: OfficePhoneExt + When "OfficePhoneExt" exists in the "Contacts" metadata + Then "OfficePhoneExt" MUST be "String" data type + And "OfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Contacts + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "Contacts" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + + @Contacts + Scenario: OriginatingSystemContactKey + When "OriginatingSystemContactKey" exists in the "Contacts" metadata + Then "OriginatingSystemContactKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemContactKey" MUST NOT exist in the metadata + | ProviderKey | + And "OriginatingSystemContactKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Contacts + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "Contacts" metadata + Then "OriginatingSystemID" MUST be "String" data type + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Contacts + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "Contacts" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Contacts + Scenario: OtherAddress1 + When "OtherAddress1" exists in the "Contacts" metadata + Then "OtherAddress1" MUST be "String" data type + And "OtherAddress1" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: OtherAddress2 + When "OtherAddress2" exists in the "Contacts" metadata + Then "OtherAddress2" MUST be "String" data type + And "OtherAddress2" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: OtherCarrierRoute + When "OtherCarrierRoute" exists in the "Contacts" metadata + Then "OtherCarrierRoute" MUST be "String" data type + And the following synonyms for "OtherCarrierRoute" MUST NOT exist in the metadata + | RR | + | CR | + And "OtherCarrierRoute" length SHOULD be equal to the RESO Suggested Max Length of 9 + + @Contacts + Scenario: OtherCity + When "OtherCity" exists in the "Contacts" metadata + Then "OtherCity" MUST be "String" data type + And "OtherCity" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: OtherCountry + When "OtherCountry" exists in the "Contacts" metadata + Then "OtherCountry" MUST be "Single Enumeration" data type + And "OtherCountry" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AD | AD | + | AE | AE | + | AF | AF | + | AG | AG | + | AI | AI | + | AL | AL | + | AM | AM | + | AN | AN | + | AO | AO | + | AQ | AQ | + | AR | AR | + | AS | AS | + | AT | AT | + | AU | AU | + | AW | AW | + | AX | AX | + | AZ | AZ | + | BA | BA | + | BB | BB | + | BD | BD | + | BE | BE | + | BF | BF | + | BG | BG | + | BH | BH | + | BI | BI | + | BJ | BJ | + | BL | BL | + | BM | BM | + | BN | BN | + | BO | BO | + | BR | BR | + | BS | BS | + | BT | BT | + | BV | BV | + | BW | BW | + | BY | BY | + | BZ | BZ | + | CA | CA | + | CC | CC | + | CD | CD | + | CF | CF | + | CG | CG | + | CH | CH | + | CI | CI | + | CK | CK | + | CL | CL | + | CM | CM | + | CN | CN | + | CO | CO | + | CR | CR | + | CU | CU | + | CV | CV | + | CX | CX | + | CY | CY | + | CZ | CZ | + | DE | DE | + | DJ | DJ | + | DK | DK | + | DM | DM | + | DO | DO | + | DZ | DZ | + | EC | EC | + | EE | EE | + | EG | EG | + | EH | EH | + | ER | ER | + | ES | ES | + | ET | ET | + | FI | FI | + | FJ | FJ | + | FK | FK | + | FM | FM | + | FO | FO | + | FR | FR | + | GA | GA | + | GB | GB | + | GD | GD | + | GE | GE | + | GF | GF | + | GG | GG | + | GH | GH | + | GI | GI | + | GL | GL | + | GM | GM | + | GN | GN | + | GP | GP | + | GQ | GQ | + | GR | GR | + | GS | GS | + | GT | GT | + | GU | GU | + | GW | GW | + | GY | GY | + | HK | HK | + | HM | HM | + | HN | HN | + | HR | HR | + | HT | HT | + | HU | HU | + | ID | ID | + | IE | IE | + | IL | IL | + | IM | IM | + | IN | IN | + | IO | IO | + | IQ | IQ | + | IR | IR | + | IS | IS | + | IT | IT | + | JE | JE | + | JM | JM | + | JO | JO | + | JP | JP | + | KE | KE | + | KG | KG | + | KH | KH | + | KI | KI | + | KM | KM | + | KN | KN | + | KP | KP | + | KR | KR | + | KW | KW | + | KY | KY | + | KZ | KZ | + | LA | LA | + | LB | LB | + | LC | LC | + | LI | LI | + | LK | LK | + | LR | LR | + | LS | LS | + | LT | LT | + | LU | LU | + | LV | LV | + | LY | LY | + | MA | MA | + | MC | MC | + | MD | MD | + | ME | ME | + | MF | MF | + | MG | MG | + | MH | MH | + | MK | MK | + | ML | ML | + | MM | MM | + | MN | MN | + | MO | MO | + | MP | MP | + | MQ | MQ | + | MR | MR | + | MS | MS | + | MT | MT | + | MU | MU | + | MV | MV | + | MW | MW | + | MX | MX | + | MY | MY | + | MZ | MZ | + | NA | NA | + | NC | NC | + | NE | NE | + | NF | NF | + | NG | NG | + | NI | NI | + | NL | NL | + | NP | NP | + | NR | NR | + | NU | NU | + | NZ | NZ | + | OM | OM | + | OT | OT | + | PA | PA | + | PE | PE | + | PF | PF | + | PG | PG | + | PH | PH | + | PK | PK | + | PL | PL | + | PM | PM | + | PN | PN | + | PR | PR | + | PS | PS | + | PT | PT | + | PW | PW | + | PY | PY | + | QA | QA | + | RE | RE | + | RO | RO | + | RS | RS | + | RU | RU | + | RW | RW | + | SA | SA | + | SB | SB | + | SC | SC | + | SD | SD | + | SE | SE | + | SG | SG | + | SH | SH | + | SI | SI | + | SJ | SJ | + | SK | SK | + | SL | SL | + | SM | SM | + | SN | SN | + | SO | SO | + | SR | SR | + | ST | ST | + | SV | SV | + | SY | SY | + | SZ | SZ | + | TC | TC | + | TD | TD | + | TF | TF | + | TG | TG | + | TH | TH | + | TJ | TJ | + | TK | TK | + | TL | TL | + | TM | TM | + | TN | TN | + | TO | TO | + | TR | TR | + | TT | TT | + | TV | TV | + | TW | TW | + | TZ | TZ | + | UA | UA | + | UG | UG | + | UM | UM | + | US | US | + | UY | UY | + | UZ | UZ | + | VA | VA | + | VC | VC | + | VE | VE | + | VG | VG | + | VI | VI | + | VN | VN | + | VU | VU | + | WF | WF | + | WS | WS | + | YE | YE | + | YT | YT | + | ZA | ZA | + | ZM | ZM | + | ZW | ZW | + But "OtherCountry" MUST NOT contain any similar lookups + + @Contacts + Scenario: OtherCountyOrParish + When "OtherCountyOrParish" exists in the "Contacts" metadata + Then "OtherCountyOrParish" MUST be "Single Enumeration" data type + And the following synonyms for "OtherCountyOrParish" MUST NOT exist in the metadata + | County | + + @Contacts + Scenario: OtherPhoneType + When "OtherPhoneType" exists in the "Contacts" metadata + Then "OtherPhoneType" MUST be "Single Enumeration" data type + And "OtherPhoneType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Direct | Direct | + | Fax | Fax | + | First | First | + | Home | Home | + | Mobile | Mobile | + | Modem | Modem | + | Office | Office | + | Pager | Pager | + | Preferred | Preferred | + | Second | Second | + | Sms | SMS | + | Third | Third | + | TollFree | Toll Free | + | Voicemail | Voicemail | + But "OtherPhoneType" MUST NOT contain any similar lookups + + @Contacts + Scenario: OtherPostalCode + When "OtherPostalCode" exists in the "Contacts" metadata + Then "OtherPostalCode" MUST be "String" data type + And "OtherPostalCode" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Contacts + Scenario: OtherPostalCodePlus4 + When "OtherPostalCodePlus4" exists in the "Contacts" metadata + Then "OtherPostalCodePlus4" MUST be "String" data type + And "OtherPostalCodePlus4" length SHOULD be equal to the RESO Suggested Max Length of 4 + + @Contacts + Scenario: OtherStateOrProvince + When "OtherStateOrProvince" exists in the "Contacts" metadata + Then "OtherStateOrProvince" MUST be "Single Enumeration" data type + And "OtherStateOrProvince" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "OtherStateOrProvince" MUST NOT contain any similar lookups + + @Contacts + Scenario: OwnerMemberID + When "OwnerMemberID" exists in the "Contacts" metadata + Then "OwnerMemberID" MUST be "String" data type + And the following synonyms for "OwnerMemberID" MUST NOT exist in the metadata + | OwnerAgentID | + And "OwnerMemberID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Contacts + Scenario: OwnerMemberKey + When "OwnerMemberKey" exists in the "Contacts" metadata + Then "OwnerMemberKey" MUST be "String" data type + And the following synonyms for "OwnerMemberKey" MUST NOT exist in the metadata + | OwnerAgentKey | + And "OwnerMemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Contacts + Scenario: OwnerMemberKeyNumeric + When "OwnerMemberKeyNumeric" exists in the "Contacts" metadata + Then "OwnerMemberKeyNumeric" MUST be "Integer" data type + And the following synonyms for "OwnerMemberKeyNumeric" MUST NOT exist in the metadata + | OwnerAgentKeyNumeric | + + @Contacts + Scenario: Pager + When "Pager" exists in the "Contacts" metadata + Then "Pager" MUST be "String" data type + And "Pager" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: PhoneTTYTDD + When "PhoneTTYTDD" exists in the "Contacts" metadata + Then "PhoneTTYTDD" MUST be "String" data type + And "PhoneTTYTDD" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: PreferredAddress + When "PreferredAddress" exists in the "Contacts" metadata + Then "PreferredAddress" MUST be "Single Enumeration" data type + And "PreferredAddress" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Home | Home | + | Other | Other | + | Work | Work | + But "PreferredAddress" MUST NOT contain any similar lookups + + @Contacts + Scenario: PreferredPhone + When "PreferredPhone" exists in the "Contacts" metadata + Then "PreferredPhone" MUST be "Single Enumeration" data type + And "PreferredPhone" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Direct | Direct | + | Home | Home | + | Mobile | Mobile | + | Office | Office | + | Other | Other | + | TollFree | Toll Free | + | Voicemail | Voicemail | + But "PreferredPhone" MUST NOT contain any similar lookups + + @Contacts + Scenario: ReferredBy + When "ReferredBy" exists in the "Contacts" metadata + Then "ReferredBy" MUST be "String" data type + And "ReferredBy" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Contacts + Scenario: SocialMediaType + When "SocialMediaType" exists in the "Contacts" metadata + Then "SocialMediaType" MUST be "Single Enumeration" data type + And "SocialMediaType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Blog | Blog | + | Digg | Digg | + | Facebook | Facebook | + | FacebookMessenger | Facebook Messenger | + | Googleplus | GooglePlus | + | iMessage | iMessage | + | Instagram | Instagram | + | Linkedin | LinkedIn | + | Pinterest | Pinterest | + | Reddit | Reddit | + | Slack | Slack | + | Snapchat | Snapchat | + | Stumbleupon | StumbleUpon | + | Tumblr | Tumblr | + | Twitter | Twitter | + | Website | Website | + | Youtube | YouTube | + But "SocialMediaType" MUST NOT contain any similar lookups + + @Contacts + Scenario: SourceSystemContactKey + When "SourceSystemContactKey" exists in the "Contacts" metadata + Then "SourceSystemContactKey" MUST be "String" data type + And the following synonyms for "SourceSystemContactKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemContactKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Contacts + Scenario: SourceSystemID + When "SourceSystemID" exists in the "Contacts" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Contacts + Scenario: SourceSystemName + When "SourceSystemName" exists in the "Contacts" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Contacts + Scenario: SpousePartnerName + When "SpousePartnerName" exists in the "Contacts" metadata + Then "SpousePartnerName" MUST be "String" data type + And "SpousePartnerName" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Contacts + Scenario: TollFreePhone + When "TollFreePhone" exists in the "Contacts" metadata + Then "TollFreePhone" MUST be "String" data type + And "TollFreePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: VoiceMail + When "VoiceMail" exists in the "Contacts" metadata + Then "VoiceMail" MUST be "String" data type + And "VoiceMail" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Contacts + Scenario: VoiceMailExt + When "VoiceMailExt" exists in the "Contacts" metadata + Then "VoiceMailExt" MUST be "String" data type + And "VoiceMailExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Contacts + Scenario: WorkAddress1 + When "WorkAddress1" exists in the "Contacts" metadata + Then "WorkAddress1" MUST be "String" data type + And "WorkAddress1" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: WorkAddress2 + When "WorkAddress2" exists in the "Contacts" metadata + Then "WorkAddress2" MUST be "String" data type + And "WorkAddress2" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: WorkCarrierRoute + When "WorkCarrierRoute" exists in the "Contacts" metadata + Then "WorkCarrierRoute" MUST be "String" data type + And the following synonyms for "WorkCarrierRoute" MUST NOT exist in the metadata + | RR | + | CR | + And "WorkCarrierRoute" length SHOULD be equal to the RESO Suggested Max Length of 9 + + @Contacts + Scenario: WorkCity + When "WorkCity" exists in the "Contacts" metadata + Then "WorkCity" MUST be "String" data type + And "WorkCity" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Contacts + Scenario: WorkCountry + When "WorkCountry" exists in the "Contacts" metadata + Then "WorkCountry" MUST be "Single Enumeration" data type + And "WorkCountry" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AD | AD | + | AE | AE | + | AF | AF | + | AG | AG | + | AI | AI | + | AL | AL | + | AM | AM | + | AN | AN | + | AO | AO | + | AQ | AQ | + | AR | AR | + | AS | AS | + | AT | AT | + | AU | AU | + | AW | AW | + | AX | AX | + | AZ | AZ | + | BA | BA | + | BB | BB | + | BD | BD | + | BE | BE | + | BF | BF | + | BG | BG | + | BH | BH | + | BI | BI | + | BJ | BJ | + | BL | BL | + | BM | BM | + | BN | BN | + | BO | BO | + | BR | BR | + | BS | BS | + | BT | BT | + | BV | BV | + | BW | BW | + | BY | BY | + | BZ | BZ | + | CA | CA | + | CC | CC | + | CD | CD | + | CF | CF | + | CG | CG | + | CH | CH | + | CI | CI | + | CK | CK | + | CL | CL | + | CM | CM | + | CN | CN | + | CO | CO | + | CR | CR | + | CU | CU | + | CV | CV | + | CX | CX | + | CY | CY | + | CZ | CZ | + | DE | DE | + | DJ | DJ | + | DK | DK | + | DM | DM | + | DO | DO | + | DZ | DZ | + | EC | EC | + | EE | EE | + | EG | EG | + | EH | EH | + | ER | ER | + | ES | ES | + | ET | ET | + | FI | FI | + | FJ | FJ | + | FK | FK | + | FM | FM | + | FO | FO | + | FR | FR | + | GA | GA | + | GB | GB | + | GD | GD | + | GE | GE | + | GF | GF | + | GG | GG | + | GH | GH | + | GI | GI | + | GL | GL | + | GM | GM | + | GN | GN | + | GP | GP | + | GQ | GQ | + | GR | GR | + | GS | GS | + | GT | GT | + | GU | GU | + | GW | GW | + | GY | GY | + | HK | HK | + | HM | HM | + | HN | HN | + | HR | HR | + | HT | HT | + | HU | HU | + | ID | ID | + | IE | IE | + | IL | IL | + | IM | IM | + | IN | IN | + | IO | IO | + | IQ | IQ | + | IR | IR | + | IS | IS | + | IT | IT | + | JE | JE | + | JM | JM | + | JO | JO | + | JP | JP | + | KE | KE | + | KG | KG | + | KH | KH | + | KI | KI | + | KM | KM | + | KN | KN | + | KP | KP | + | KR | KR | + | KW | KW | + | KY | KY | + | KZ | KZ | + | LA | LA | + | LB | LB | + | LC | LC | + | LI | LI | + | LK | LK | + | LR | LR | + | LS | LS | + | LT | LT | + | LU | LU | + | LV | LV | + | LY | LY | + | MA | MA | + | MC | MC | + | MD | MD | + | ME | ME | + | MF | MF | + | MG | MG | + | MH | MH | + | MK | MK | + | ML | ML | + | MM | MM | + | MN | MN | + | MO | MO | + | MP | MP | + | MQ | MQ | + | MR | MR | + | MS | MS | + | MT | MT | + | MU | MU | + | MV | MV | + | MW | MW | + | MX | MX | + | MY | MY | + | MZ | MZ | + | NA | NA | + | NC | NC | + | NE | NE | + | NF | NF | + | NG | NG | + | NI | NI | + | NL | NL | + | NP | NP | + | NR | NR | + | NU | NU | + | NZ | NZ | + | OM | OM | + | OT | OT | + | PA | PA | + | PE | PE | + | PF | PF | + | PG | PG | + | PH | PH | + | PK | PK | + | PL | PL | + | PM | PM | + | PN | PN | + | PR | PR | + | PS | PS | + | PT | PT | + | PW | PW | + | PY | PY | + | QA | QA | + | RE | RE | + | RO | RO | + | RS | RS | + | RU | RU | + | RW | RW | + | SA | SA | + | SB | SB | + | SC | SC | + | SD | SD | + | SE | SE | + | SG | SG | + | SH | SH | + | SI | SI | + | SJ | SJ | + | SK | SK | + | SL | SL | + | SM | SM | + | SN | SN | + | SO | SO | + | SR | SR | + | ST | ST | + | SV | SV | + | SY | SY | + | SZ | SZ | + | TC | TC | + | TD | TD | + | TF | TF | + | TG | TG | + | TH | TH | + | TJ | TJ | + | TK | TK | + | TL | TL | + | TM | TM | + | TN | TN | + | TO | TO | + | TR | TR | + | TT | TT | + | TV | TV | + | TW | TW | + | TZ | TZ | + | UA | UA | + | UG | UG | + | UM | UM | + | US | US | + | UY | UY | + | UZ | UZ | + | VA | VA | + | VC | VC | + | VE | VE | + | VG | VG | + | VI | VI | + | VN | VN | + | VU | VU | + | WF | WF | + | WS | WS | + | YE | YE | + | YT | YT | + | ZA | ZA | + | ZM | ZM | + | ZW | ZW | + But "WorkCountry" MUST NOT contain any similar lookups + + @Contacts + Scenario: WorkCountyOrParish + When "WorkCountyOrParish" exists in the "Contacts" metadata + Then "WorkCountyOrParish" MUST be "Single Enumeration" data type + And the following synonyms for "WorkCountyOrParish" MUST NOT exist in the metadata + | County | + + @Contacts + Scenario: WorkPostalCode + When "WorkPostalCode" exists in the "Contacts" metadata + Then "WorkPostalCode" MUST be "String" data type + And "WorkPostalCode" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Contacts + Scenario: WorkPostalCodePlus4 + When "WorkPostalCodePlus4" exists in the "Contacts" metadata + Then "WorkPostalCodePlus4" MUST be "String" data type + And "WorkPostalCodePlus4" length SHOULD be equal to the RESO Suggested Max Length of 4 + + @Contacts + Scenario: WorkStateOrProvince + When "WorkStateOrProvince" exists in the "Contacts" metadata + Then "WorkStateOrProvince" MUST be "Single Enumeration" data type + And "WorkStateOrProvince" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "WorkStateOrProvince" MUST NOT contain any similar lookups diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/historytransactional.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/historytransactional.feature new file mode 100644 index 00000000..05335c54 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/historytransactional.feature @@ -0,0 +1,191 @@ +# This file was autogenerated on: 20201023121019795 +Feature: HistoryTransactional + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @HistoryTransactional + Scenario: ChangeType + When "ChangeType" exists in the "HistoryTransactional" metadata + Then "ChangeType" MUST be "Single Enumeration" data type + And "ChangeType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Active | Active | + | ActiveUnderContract | Active Under Contract | + | BackOnMarket | Back On Market | + | Canceled | Canceled | + | Closed | Closed | + | Deleted | Deleted | + | Expired | Expired | + | Hold | Hold | + | NewListing | New Listing | + | Pending | Pending | + | PriceChange | Price Change | + | Withdrawn | Withdrawn | + But "ChangeType" MUST NOT contain any similar lookups + + @HistoryTransactional + Scenario: ChangedByMemberID + When "ChangedByMemberID" exists in the "HistoryTransactional" metadata + Then "ChangedByMemberID" MUST be "String" data type + And the following synonyms for "ChangedByMemberID" MUST NOT exist in the metadata + | ChangedByAgentID | + And "ChangedByMemberID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @HistoryTransactional + Scenario: ChangedByMemberKey + When "ChangedByMemberKey" exists in the "HistoryTransactional" metadata + Then "ChangedByMemberKey" MUST be "String" data type + And the following synonyms for "ChangedByMemberKey" MUST NOT exist in the metadata + | ChangedByAgentKey | + And "ChangedByMemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: ChangedByMemberKeyNumeric + When "ChangedByMemberKeyNumeric" exists in the "HistoryTransactional" metadata + Then "ChangedByMemberKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ChangedByMemberKeyNumeric" MUST NOT exist in the metadata + | ChangedByAgentKeyNumeric | + + @HistoryTransactional + Scenario: ClassName + When "ClassName" exists in the "HistoryTransactional" metadata + Then "ClassName" MUST be "String" data type + And "ClassName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: FieldKey + When "FieldKey" exists in the "HistoryTransactional" metadata + Then "FieldKey" MUST be "String" data type + And "FieldKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: FieldKeyNumeric + When "FieldKeyNumeric" exists in the "HistoryTransactional" metadata + Then "FieldKeyNumeric" MUST be "Integer" data type + + @HistoryTransactional + Scenario: FieldName + When "FieldName" exists in the "HistoryTransactional" metadata + Then "FieldName" MUST be "String" data type + And "FieldName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: HistoryTransactionalKey + When "HistoryTransactionalKey" exists in the "HistoryTransactional" metadata + Then "HistoryTransactionalKey" MUST be "String" data type + And "HistoryTransactionalKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: HistoryTransactionalKeyNumeric + When "HistoryTransactionalKeyNumeric" exists in the "HistoryTransactional" metadata + Then "HistoryTransactionalKeyNumeric" MUST be "Integer" data type + + @HistoryTransactional + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "HistoryTransactional" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @HistoryTransactional + Scenario: NewValue + When "NewValue" exists in the "HistoryTransactional" metadata + Then "NewValue" MUST be "String" data type + And "NewValue" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @HistoryTransactional + Scenario: OriginatingSystemHistoryKey + When "OriginatingSystemHistoryKey" exists in the "HistoryTransactional" metadata + Then "OriginatingSystemHistoryKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemHistoryKey" MUST NOT exist in the metadata + | ProviderKey | + And "OriginatingSystemHistoryKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "HistoryTransactional" metadata + Then "OriginatingSystemID" MUST be "String" data type + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @HistoryTransactional + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "HistoryTransactional" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: PreviousValue + When "PreviousValue" exists in the "HistoryTransactional" metadata + Then "PreviousValue" MUST be "String" data type + And "PreviousValue" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @HistoryTransactional + Scenario: ResourceName + When "ResourceName" exists in the "HistoryTransactional" metadata + Then "ResourceName" MUST be "String" data type + And "ResourceName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: ResourceRecordID + When "ResourceRecordID" exists in the "HistoryTransactional" metadata + Then "ResourceRecordID" MUST be "String" data type + And the following synonyms for "ResourceRecordID" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + | AgentID | + | OfficeID | + | ContactID | + And "ResourceRecordID" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: ResourceRecordKey + When "ResourceRecordKey" exists in the "HistoryTransactional" metadata + Then "ResourceRecordKey" MUST be "String" data type + And the following synonyms for "ResourceRecordKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ResourceRecordKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: ResourceRecordKeyNumeric + When "ResourceRecordKeyNumeric" exists in the "HistoryTransactional" metadata + Then "ResourceRecordKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ResourceRecordKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @HistoryTransactional + Scenario: SourceSystemHistoryKey + When "SourceSystemHistoryKey" exists in the "HistoryTransactional" metadata + Then "SourceSystemHistoryKey" MUST be "String" data type + And the following synonyms for "SourceSystemHistoryKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemHistoryKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @HistoryTransactional + Scenario: SourceSystemID + When "SourceSystemID" exists in the "HistoryTransactional" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @HistoryTransactional + Scenario: SourceSystemName + When "SourceSystemName" exists in the "HistoryTransactional" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/internettracking.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/internettracking.feature new file mode 100644 index 00000000..abe80edb --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/internettracking.feature @@ -0,0 +1,476 @@ +# This file was autogenerated on: 20201023121019795 +Feature: InternetTracking + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @InternetTracking + Scenario: ActorCity + When "ActorCity" exists in the "InternetTracking" metadata + Then "ActorCity" MUST be "String" data type + And "ActorCity" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @InternetTracking + Scenario: ActorEmail + When "ActorEmail" exists in the "InternetTracking" metadata + Then "ActorEmail" MUST be "String" data type + And "ActorEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @InternetTracking + Scenario: ActorID + When "ActorID" exists in the "InternetTracking" metadata + Then "ActorID" MUST be "String" data type + And "ActorID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @InternetTracking + Scenario: ActorIP + When "ActorIP" exists in the "InternetTracking" metadata + Then "ActorIP" MUST be "String" data type + And "ActorIP" length SHOULD be equal to the RESO Suggested Max Length of 39 + + @InternetTracking + Scenario: ActorKey + When "ActorKey" exists in the "InternetTracking" metadata + Then "ActorKey" MUST be "String" data type + And "ActorKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: ActorKeyNumeric + When "ActorKeyNumeric" exists in the "InternetTracking" metadata + Then "ActorKeyNumeric" MUST be "Integer" data type + + @InternetTracking + Scenario: ActorLatitude + When "ActorLatitude" exists in the "InternetTracking" metadata + Then "ActorLatitude" MUST be "Decimal" data type + And "ActorLatitude" precision SHOULD be equal to the RESO Suggested Max Precision of 12 + And "ActorLatitude" scale SHOULD be equal to the RESO Suggested Max Scale of 8 + + @InternetTracking + Scenario: ActorLongitude + When "ActorLongitude" exists in the "InternetTracking" metadata + Then "ActorLongitude" MUST be "Decimal" data type + And "ActorLongitude" precision SHOULD be equal to the RESO Suggested Max Precision of 12 + And "ActorLongitude" scale SHOULD be equal to the RESO Suggested Max Scale of 8 + + @InternetTracking + Scenario: ActorOriginatingSystemID + When "ActorOriginatingSystemID" exists in the "InternetTracking" metadata + Then "ActorOriginatingSystemID" MUST be "String" data type + And "ActorOriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @InternetTracking + Scenario: ActorOriginatingSystemName + When "ActorOriginatingSystemName" exists in the "InternetTracking" metadata + Then "ActorOriginatingSystemName" MUST be "String" data type + And "ActorOriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: ActorPhone + When "ActorPhone" exists in the "InternetTracking" metadata + Then "ActorPhone" MUST be "String" data type + And "ActorPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @InternetTracking + Scenario: ActorPhoneExt + When "ActorPhoneExt" exists in the "InternetTracking" metadata + Then "ActorPhoneExt" MUST be "String" data type + And "ActorPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @InternetTracking + Scenario: ActorPostalCode + When "ActorPostalCode" exists in the "InternetTracking" metadata + Then "ActorPostalCode" MUST be "String" data type + And "ActorPostalCode" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @InternetTracking + Scenario: ActorPostalCodePlus4 + When "ActorPostalCodePlus4" exists in the "InternetTracking" metadata + Then "ActorPostalCodePlus4" MUST be "String" data type + And "ActorPostalCodePlus4" length SHOULD be equal to the RESO Suggested Max Length of 4 + + @InternetTracking + Scenario: ActorRegion + When "ActorRegion" exists in the "InternetTracking" metadata + Then "ActorRegion" MUST be "String" data type + And "ActorRegion" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @InternetTracking + Scenario: ActorSourceSystemID + When "ActorSourceSystemID" exists in the "InternetTracking" metadata + Then "ActorSourceSystemID" MUST be "String" data type + And "ActorSourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @InternetTracking + Scenario: ActorSourceSystemName + When "ActorSourceSystemName" exists in the "InternetTracking" metadata + Then "ActorSourceSystemName" MUST be "String" data type + And "ActorSourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: ActorStateOrProvince + When "ActorStateOrProvince" exists in the "InternetTracking" metadata + Then "ActorStateOrProvince" MUST be "Single Enumeration" data type + And "ActorStateOrProvince" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "ActorStateOrProvince" MUST NOT contain any similar lookups + + @InternetTracking + Scenario: ActorType + When "ActorType" exists in the "InternetTracking" metadata + Then "ActorType" MUST be "Single Enumeration" data type + And "ActorType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Agent | Agent | + | Bot | Bot | + | Client | Client | + | Consumer | Consumer | + | Unknown | Unknown | + But "ActorType" MUST NOT contain any similar lookups + + @InternetTracking + Scenario: ColorDepth + When "ColorDepth" exists in the "InternetTracking" metadata + Then "ColorDepth" MUST be "Integer" data type + + @InternetTracking + Scenario: DeviceType + When "DeviceType" exists in the "InternetTracking" metadata + Then "DeviceType" MUST be "Single Enumeration" data type + And "DeviceType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Desktop | Desktop | + | Mobile | Mobile | + | Tablet | Tablet | + | Unknown | Unknown | + | Wearable | Wearable | + But "DeviceType" MUST NOT contain any similar lookups + + @InternetTracking + Scenario: EventDescription + When "EventDescription" exists in the "InternetTracking" metadata + Then "EventDescription" MUST be "String" data type + And "EventDescription" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @InternetTracking + Scenario: EventKey + When "EventKey" exists in the "InternetTracking" metadata + Then "EventKey" MUST be "String" data type + And "EventKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: EventKeyNumeric + When "EventKeyNumeric" exists in the "InternetTracking" metadata + Then "EventKeyNumeric" MUST be "Integer" data type + + @InternetTracking + Scenario: EventLabel + When "EventLabel" exists in the "InternetTracking" metadata + Then "EventLabel" MUST be "String" data type + And "EventLabel" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @InternetTracking + Scenario: EventOriginatingSystemID + When "EventOriginatingSystemID" exists in the "InternetTracking" metadata + Then "EventOriginatingSystemID" MUST be "String" data type + And "EventOriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @InternetTracking + Scenario: EventOriginatingSystemName + When "EventOriginatingSystemName" exists in the "InternetTracking" metadata + Then "EventOriginatingSystemName" MUST be "String" data type + And "EventOriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: EventSourceSystemID + When "EventSourceSystemID" exists in the "InternetTracking" metadata + Then "EventSourceSystemID" MUST be "String" data type + And "EventSourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @InternetTracking + Scenario: EventSourceSystemName + When "EventSourceSystemName" exists in the "InternetTracking" metadata + Then "EventSourceSystemName" MUST be "String" data type + And "EventSourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: EventTarget + When "EventTarget" exists in the "InternetTracking" metadata + Then "EventTarget" MUST be "Single Enumeration" data type + And "EventTarget" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Agent | Agent | + | Broker | Broker | + | Digg | Digg | + | Email | Email | + | Facebook | Facebook | + | FacebookMessenger | Facebook Messenger | + | Googleplus | GooglePlus | + | Imessage | iMessage | + | Instagram | Instagram | + | Linkedin | LinkedIn | + | Pinterest | Pinterest | + | Reddit | Reddit | + | Slack | Slack | + | Sms | SMS | + | Snapchat | Snapchat | + | Stumbleupon | StumbleUpon | + | Tumblr | Tumblr | + | Twitter | Twitter | + | Youtube | YouTube | + But "EventTarget" MUST NOT contain any similar lookups + + @InternetTracking + Scenario: EventTimestamp + When "EventTimestamp" exists in the "InternetTracking" metadata + Then "EventTimestamp" MUST be "Timestamp" data type + + @InternetTracking + Scenario: EventType + When "EventType" exists in the "InternetTracking" metadata + Then "EventType" MUST be "Single Enumeration" data type + And "EventType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | ClickedOnEmailAddress | Clicked on Email Address | + | ClickedOnPhoneNumber | Clicked on Phone Number | + | ClickToPrimaryHostedSite | Click to Primary Hosted Site | + | Comments | Comments | + | DetailedView | Detailed View | + | Discard | Discard | + | DrivingDirections | Driving Directions | + | ExitDetailedView | Exit Detailed View | + | Favorited | Favorited | + | Maybe | Maybe | + | NonDetailedView | Non-Detailed View | + | ObjectModified | Object Modified | + | PhotoGallery | Photo Gallery | + | Printed | Printed | + | PropertyVideos | Property Videos | + | Search | Search | + | Share | Share | + | SubmissionOfLeadForm | Submission of Lead Form | + | VirtualTour | Virtual Tour | + But "EventType" MUST NOT contain any similar lookups + + @InternetTracking + Scenario: ObjectID + When "ObjectID" exists in the "InternetTracking" metadata + Then "ObjectID" MUST be "String" data type + And "ObjectID" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: ObjectIdType + When "ObjectIdType" exists in the "InternetTracking" metadata + Then "ObjectIdType" MUST be "Single Enumeration" data type + And "ObjectIdType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Listingid | ListingId | + | Listingkey | ListingKey | + | Listingkeynumeric | ListingKeyNumeric | + | Openhouseid | OpenHouseId | + | Openhousekey | OpenHouseKey | + | Openhousekeynumeric | OpenHouseKeyNumeric | + | Parcelnumber | ParcelNumber | + | Puid | PUID | + | Savedsearchkey | SavedSearchKey | + | Savedsearchkeynumeric | SavedSearchKeyNumeric | + | Unique | Unique | + But "ObjectIdType" MUST NOT contain any similar lookups + + @InternetTracking + Scenario: ObjectKey + When "ObjectKey" exists in the "InternetTracking" metadata + Then "ObjectKey" MUST be "String" data type + And "ObjectKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: ObjectKeyNumeric + When "ObjectKeyNumeric" exists in the "InternetTracking" metadata + Then "ObjectKeyNumeric" MUST be "Integer" data type + + @InternetTracking + Scenario: ObjectOriginatingSystemID + When "ObjectOriginatingSystemID" exists in the "InternetTracking" metadata + Then "ObjectOriginatingSystemID" MUST be "String" data type + And "ObjectOriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @InternetTracking + Scenario: ObjectOriginatingSystemName + When "ObjectOriginatingSystemName" exists in the "InternetTracking" metadata + Then "ObjectOriginatingSystemName" MUST be "String" data type + And "ObjectOriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: ObjectSourceSystemID + When "ObjectSourceSystemID" exists in the "InternetTracking" metadata + Then "ObjectSourceSystemID" MUST be "String" data type + And "ObjectSourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @InternetTracking + Scenario: ObjectSourceSystemName + When "ObjectSourceSystemName" exists in the "InternetTracking" metadata + Then "ObjectSourceSystemName" MUST be "String" data type + And "ObjectSourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: ObjectType + When "ObjectType" exists in the "InternetTracking" metadata + Then "ObjectType" MUST be "Single Enumeration" data type + And "ObjectType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Document | Document | + | Listing | Listing | + | OpenHouse | Open House | + | Photo | Photo | + | Property | Property | + | SavedSearch | Saved Search | + | VirtualTour | Virtual Tour | + But "ObjectType" MUST NOT contain any similar lookups + + @InternetTracking + Scenario: ObjectURL + When "ObjectURL" exists in the "InternetTracking" metadata + Then "ObjectURL" MUST be "String" data type + And "ObjectURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @InternetTracking + Scenario: OriginatingSystemActorKey + When "OriginatingSystemActorKey" exists in the "InternetTracking" metadata + Then "OriginatingSystemActorKey" MUST be "String" data type + And "OriginatingSystemActorKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: OriginatingSystemEventKey + When "OriginatingSystemEventKey" exists in the "InternetTracking" metadata + Then "OriginatingSystemEventKey" MUST be "String" data type + And "OriginatingSystemEventKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: OriginatingSystemObjectKey + When "OriginatingSystemObjectKey" exists in the "InternetTracking" metadata + Then "OriginatingSystemObjectKey" MUST be "String" data type + And "OriginatingSystemObjectKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: ReferringURL + When "ReferringURL" exists in the "InternetTracking" metadata + Then "ReferringURL" MUST be "String" data type + And "ReferringURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @InternetTracking + Scenario: ScreenHeight + When "ScreenHeight" exists in the "InternetTracking" metadata + Then "ScreenHeight" MUST be "Integer" data type + + @InternetTracking + Scenario: ScreenWidth + When "ScreenWidth" exists in the "InternetTracking" metadata + Then "ScreenWidth" MUST be "Integer" data type + + @InternetTracking + Scenario: SessionID + When "SessionID" exists in the "InternetTracking" metadata + Then "SessionID" MUST be "String" data type + And "SessionID" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: SourceSystemActorKey + When "SourceSystemActorKey" exists in the "InternetTracking" metadata + Then "SourceSystemActorKey" MUST be "String" data type + And "SourceSystemActorKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: SourceSystemEventKey + When "SourceSystemEventKey" exists in the "InternetTracking" metadata + Then "SourceSystemEventKey" MUST be "String" data type + And "SourceSystemEventKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: SourceSystemObjectKey + When "SourceSystemObjectKey" exists in the "InternetTracking" metadata + Then "SourceSystemObjectKey" MUST be "String" data type + And "SourceSystemObjectKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @InternetTracking + Scenario: TimeZoneOffset + When "TimeZoneOffset" exists in the "InternetTracking" metadata + Then "TimeZoneOffset" MUST be "Integer" data type + + @InternetTracking + Scenario: UserAgent + When "UserAgent" exists in the "InternetTracking" metadata + Then "UserAgent" MUST be "String" data type + And "UserAgent" length SHOULD be equal to the RESO Suggested Max Length of 255 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/media.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/media.feature new file mode 100644 index 00000000..e39c901e --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/media.feature @@ -0,0 +1,395 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Media + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Media + Scenario: ChangedByMemberID + When "ChangedByMemberID" exists in the "Media" metadata + Then "ChangedByMemberID" MUST be "String" data type + And the following synonyms for "ChangedByMemberID" MUST NOT exist in the metadata + | ChangedByAgentID | + And "ChangedByMemberID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Media + Scenario: ChangedByMemberKey + When "ChangedByMemberKey" exists in the "Media" metadata + Then "ChangedByMemberKey" MUST be "String" data type + And the following synonyms for "ChangedByMemberKey" MUST NOT exist in the metadata + | ChangedByAgentKey | + And "ChangedByMemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Media + Scenario: ChangedByMemberKeyNumeric + When "ChangedByMemberKeyNumeric" exists in the "Media" metadata + Then "ChangedByMemberKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ChangedByMemberKeyNumeric" MUST NOT exist in the metadata + | ChangedByAgentKeyNumeric | + + @Media + Scenario: ClassName + When "ClassName" exists in the "Media" metadata + Then "ClassName" MUST be "Single Enumeration" data type + And "ClassName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BusinessOpportunity | Business Opportunity | + | CommercialLease | Commercial Lease | + | CommercialSale | Commercial Sale | + | Contacts | Contacts | + | CrossProperty | Cross Property | + | Farm | Farm | + | HistoryTransactional | History Transactional | + | Land | Land | + | ManufacturedInPark | Manufactured In Park | + | Media | Media | + | Member | Member | + | Office | Office | + | OpenHouse | Open House | + | Residential | Residential | + | ResidentialIncome | Residential Income | + | ResidentialLease | Residential Lease | + | SavedSearch | Saved Search | + But "ClassName" MUST NOT contain any similar lookups + + @Media @IDX + Scenario: ImageHeight + When "ImageHeight" exists in the "Media" metadata + Then "ImageHeight" MUST be "Integer" data type + + @Media @IDX + Scenario: ImageOf + When "ImageOf" exists in the "Media" metadata + Then "ImageOf" MUST be "Single Enumeration" data type + And "ImageOf" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AerialView | Aerial View | + | Atrium | Atrium | + | Attic | Attic | + | BackOfStructure | Back of Structure | + | Balcony | Balcony | + | Bar | Bar | + | Barn | Barn | + | Basement | Basement | + | Bathroom | Bathroom | + | Bedroom | Bedroom | + | BonusRoom | Bonus Room | + | BreakfastArea | Breakfast Area | + | Closet | Closet | + | Community | Community | + | Courtyard | Courtyard | + | Deck | Deck | + | Den | Den | + | DiningArea | Dining Area | + | DiningRoom | Dining Room | + | Dock | Dock | + | Entry | Entry | + | ExerciseRoom | Exercise Room | + | FamilyRoom | Family Room | + | Fence | Fence | + | Fireplace | Fireplace | + | FloorPlan | Floor Plan | + | FrontOfStructure | Front of Structure | + | GameRoom | Game Room | + | Garage | Garage | + | Garden | Garden | + | GolfCourse | Golf Course | + | GreatRoom | Great Room | + | GuestQuarters | Guest Quarters | + | Gym | Gym | + | HobbyRoom | Hobby Room | + | Inlaw | Inlaw | + | Kitchen | Kitchen | + | Lake | Lake | + | Laundry | Laundry | + | Library | Library | + | LivingRoom | Living Room | + | LoadingDock | Loading Dock | + | Lobby | Lobby | + | Loft | Loft | + | Lot | Lot | + | MasterBathroom | Master Bathroom | + | MasterBedroom | Master Bedroom | + | MediaRoom | Media Room | + | MudRoom | Mud Room | + | Nursery | Nursery | + | Office | Office | + | Other | Other | + | OutBuildings | Out Buildings | + | Pantry | Pantry | + | Parking | Parking | + | Patio | Patio | + | Pier | Pier | + | PlatMap | Plat Map | + | Pond | Pond | + | Pool | Pool | + | Reception | Reception | + | RecreationRoom | Recreation Room | + | Sauna | Sauna | + | Showroom | Showroom | + | SideOfStructure | Side of Structure | + | SittingRoom | Sitting Room | + | Spa | Spa | + | Stable | Stable | + | Storage | Storage | + | Studio | Studio | + | Study | Study | + | SunRoom | Sun Room | + | View | View | + | Waterfront | Waterfront | + | WineCellar | Wine Cellar | + | Workshop | Workshop | + | Yard | Yard | + But "ImageOf" MUST NOT contain any similar lookups + + @Media @IDX + Scenario: ImageSizeDescription + When "ImageSizeDescription" exists in the "Media" metadata + Then "ImageSizeDescription" MUST be "Single Enumeration" data type + + @Media @IDX + Scenario: ImageWidth + When "ImageWidth" exists in the "Media" metadata + Then "ImageWidth" MUST be "Integer" data type + + @Media @IDX + Scenario: LongDescription + When "LongDescription" exists in the "Media" metadata + Then "LongDescription" MUST be "String" data type + And the following synonyms for "LongDescription" MUST NOT exist in the metadata + | FullDescription | + And "LongDescription" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Media @IDX + Scenario: MediaCategory + When "MediaCategory" exists in the "Media" metadata + Then "MediaCategory" MUST be "Single Enumeration" data type + And "MediaCategory" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AgentPhoto | Agent Photo | + | BrandedVirtualTour | Branded Virtual Tour | + | Document | Document | + | FloorPlan | Floor Plan | + | OfficeLogo | Office Logo | + | OfficePhoto | Office Photo | + | Photo | Photo | + | UnbrandedVirtualTour | Unbranded Virtual Tour | + | Video | Video | + But "MediaCategory" MUST NOT contain any similar lookups + + @Media + Scenario: MediaHTML + When "MediaHTML" exists in the "Media" metadata + Then "MediaHTML" MUST be "String" data type + And "MediaHTML" length SHOULD be equal to the RESO Suggested Max Length of 8500 + + @Media @IDX + Scenario: MediaKey + When "MediaKey" exists in the "Media" metadata + Then "MediaKey" MUST be "String" data type + And the following synonyms for "MediaKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "MediaKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Media @IDX + Scenario: MediaKeyNumeric + When "MediaKeyNumeric" exists in the "Media" metadata + Then "MediaKeyNumeric" MUST be "Integer" data type + And the following synonyms for "MediaKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @Media @IDX + Scenario: MediaModificationTimestamp + When "MediaModificationTimestamp" exists in the "Media" metadata + Then "MediaModificationTimestamp" MUST be "Timestamp" data type + And the following synonyms for "MediaModificationTimestamp" MUST NOT exist in the metadata + | MediaTimestamp | + + @Media + Scenario: MediaObjectID + When "MediaObjectID" exists in the "Media" metadata + Then "MediaObjectID" MUST be "String" data type + And "MediaObjectID" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Media @IDX + Scenario: MediaStatus + When "MediaStatus" exists in the "Media" metadata + Then "MediaStatus" MUST be "Single Enumeration" data type + + @Media + Scenario: MediaType + When "MediaType" exists in the "Media" metadata + Then "MediaType" MUST be "Single Enumeration" data type + And the following synonyms for "MediaType" MUST NOT exist in the metadata + | MimeType | + And "MediaType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Doc | doc | + | Docx | docx | + | Gif | gif | + | Jpeg | jpeg | + | Mov | mov | + | Mp4 | mp4 | + | Mpeg | mpeg | + | Pdf | pdf | + | Png | png | + | Quicktime | quicktime | + | Rtf | rtf | + | Tiff | tiff | + | Txt | txt | + | Wmv | wmv | + | Xls | xls | + | Xlsx | xlsx | + But "MediaType" MUST NOT contain any similar lookups + + @Media @IDX + Scenario: MediaURL + When "MediaURL" exists in the "Media" metadata + Then "MediaURL" MUST be "String" data type + And "MediaURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Media @IDX + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Media" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + And the following synonyms for "ModificationTimestamp" MUST NOT exist in the metadata + | ModificationDateTime | + | DateTimeModified | + | ModDate | + | DateMod | + | UpdateDate | + | UpdateTimestamp | + + @Media @IDX + Scenario: Order + When "Order" exists in the "Media" metadata + Then "Order" MUST be "Integer" data type + + @Media @IDX + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "Media" metadata + Then "OriginatingSystemID" MUST be "String" data type + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Media @IDX + Scenario: OriginatingSystemMediaKey + When "OriginatingSystemMediaKey" exists in the "Media" metadata + Then "OriginatingSystemMediaKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemMediaKey" MUST NOT exist in the metadata + | ProviderKey | + And "OriginatingSystemMediaKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Media + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "Media" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Media + Scenario: Permission + When "Permission" exists in the "Media" metadata + Then "Permission" MUST be "Multiple Enumeration" data type + And "Permission" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AgentOnly | Agent Only | + | FirmOnly | Firm Only | + | Idx | IDX | + | OfficeOnly | Office Only | + | Private | Private | + | Public | Public | + | Vow | VOW | + But "Permission" MUST NOT contain any similar lookups + + @Media + Scenario: PreferredPhotoYN + When "PreferredPhotoYN" exists in the "Media" metadata + Then "PreferredPhotoYN" MUST be "Boolean" data type + + @Media @IDX + Scenario: ResourceName + When "ResourceName" exists in the "Media" metadata + Then "ResourceName" MUST be "Single Enumeration" data type + And "ResourceName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Contacts | Contacts | + | Member | Member | + | Office | Office | + | Property | Property | + But "ResourceName" MUST NOT contain any similar lookups + + @Media @IDX + Scenario: ResourceRecordID + When "ResourceRecordID" exists in the "Media" metadata + Then "ResourceRecordID" MUST be "String" data type + And the following synonyms for "ResourceRecordID" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + | AgentID | + | OfficeID | + | ContactID | + And "ResourceRecordID" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Media @IDX + Scenario: ResourceRecordKey + When "ResourceRecordKey" exists in the "Media" metadata + Then "ResourceRecordKey" MUST be "String" data type + And the following synonyms for "ResourceRecordKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ResourceRecordKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Media @IDX + Scenario: ResourceRecordKeyNumeric + When "ResourceRecordKeyNumeric" exists in the "Media" metadata + Then "ResourceRecordKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ResourceRecordKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @Media @IDX + Scenario: ShortDescription + When "ShortDescription" exists in the "Media" metadata + Then "ShortDescription" MUST be "String" data type + And the following synonyms for "ShortDescription" MUST NOT exist in the metadata + | Caption | + | Name | + And "ShortDescription" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Media @IDX + Scenario: SourceSystemID + When "SourceSystemID" exists in the "Media" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Media @IDX + Scenario: SourceSystemMediaKey + When "SourceSystemMediaKey" exists in the "Media" metadata + Then "SourceSystemMediaKey" MUST be "String" data type + And the following synonyms for "SourceSystemMediaKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemMediaKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Media + Scenario: SourceSystemName + When "SourceSystemName" exists in the "Media" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/member.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/member.feature new file mode 100644 index 00000000..6e955e26 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/member.feature @@ -0,0 +1,1190 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Member + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Member + Scenario: JobTitle + When "JobTitle" exists in the "Member" metadata + Then "JobTitle" MUST be "String" data type + And "JobTitle" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member + Scenario: LastLoginTimestamp + When "LastLoginTimestamp" exists in the "Member" metadata + Then "LastLoginTimestamp" MUST be "Timestamp" data type + + @Member + Scenario: MemberAOR + When "MemberAOR" exists in the "Member" metadata + Then "MemberAOR" MUST be "Single Enumeration" data type + And the following synonyms for "MemberAOR" MUST NOT exist in the metadata + | AgentAOR | + + @Member + Scenario: MemberAORMlsId + When "MemberAORMlsId" exists in the "Member" metadata + Then "MemberAORMlsId" MUST be "String" data type + And the following synonyms for "MemberAORMlsId" MUST NOT exist in the metadata + | AgentAORMlsld | + And "MemberAORMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Member + Scenario: MemberAORkey + When "MemberAORkey" exists in the "Member" metadata + Then "MemberAORkey" MUST be "String" data type + And the following synonyms for "MemberAORkey" MUST NOT exist in the metadata + | AgentAORkey | + And "MemberAORkey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Member + Scenario: MemberAORkeyNumeric + When "MemberAORkeyNumeric" exists in the "Member" metadata + Then "MemberAORkeyNumeric" MUST be "Integer" data type + And the following synonyms for "MemberAORkeyNumeric" MUST NOT exist in the metadata + | AgentAORkeyNumeric | + + @Member + Scenario: MemberAddress1 + When "MemberAddress1" exists in the "Member" metadata + Then "MemberAddress1" MUST be "String" data type + And the following synonyms for "MemberAddress1" MUST NOT exist in the metadata + | AgentAddress1 | + And "MemberAddress1" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member + Scenario: MemberAddress2 + When "MemberAddress2" exists in the "Member" metadata + Then "MemberAddress2" MUST be "String" data type + And the following synonyms for "MemberAddress2" MUST NOT exist in the metadata + | AgentAddress2 | + And "MemberAddress2" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member + Scenario: MemberAssociationComments + When "MemberAssociationComments" exists in the "Member" metadata + Then "MemberAssociationComments" MUST be "String" data type + And the following synonyms for "MemberAssociationComments" MUST NOT exist in the metadata + | AgentAssociationComments | + And "MemberAssociationComments" length SHOULD be equal to the RESO Suggested Max Length of 500 + + @Member + Scenario: MemberCarrierRoute + When "MemberCarrierRoute" exists in the "Member" metadata + Then "MemberCarrierRoute" MUST be "String" data type + And the following synonyms for "MemberCarrierRoute" MUST NOT exist in the metadata + | AgentCarrierRoute | + | RR | + | CR | + And "MemberCarrierRoute" length SHOULD be equal to the RESO Suggested Max Length of 9 + + @Member + Scenario: MemberCity + When "MemberCity" exists in the "Member" metadata + Then "MemberCity" MUST be "String" data type + And the following synonyms for "MemberCity" MUST NOT exist in the metadata + | AgentCity | + And "MemberCity" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member + Scenario: MemberCountry + When "MemberCountry" exists in the "Member" metadata + Then "MemberCountry" MUST be "Single Enumeration" data type + And the following synonyms for "MemberCountry" MUST NOT exist in the metadata + | AgentCountry | + And "MemberCountry" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AD | AD | + | AE | AE | + | AF | AF | + | AG | AG | + | AI | AI | + | AL | AL | + | AM | AM | + | AN | AN | + | AO | AO | + | AQ | AQ | + | AR | AR | + | AS | AS | + | AT | AT | + | AU | AU | + | AW | AW | + | AX | AX | + | AZ | AZ | + | BA | BA | + | BB | BB | + | BD | BD | + | BE | BE | + | BF | BF | + | BG | BG | + | BH | BH | + | BI | BI | + | BJ | BJ | + | BL | BL | + | BM | BM | + | BN | BN | + | BO | BO | + | BR | BR | + | BS | BS | + | BT | BT | + | BV | BV | + | BW | BW | + | BY | BY | + | BZ | BZ | + | CA | CA | + | CC | CC | + | CD | CD | + | CF | CF | + | CG | CG | + | CH | CH | + | CI | CI | + | CK | CK | + | CL | CL | + | CM | CM | + | CN | CN | + | CO | CO | + | CR | CR | + | CU | CU | + | CV | CV | + | CX | CX | + | CY | CY | + | CZ | CZ | + | DE | DE | + | DJ | DJ | + | DK | DK | + | DM | DM | + | DO | DO | + | DZ | DZ | + | EC | EC | + | EE | EE | + | EG | EG | + | EH | EH | + | ER | ER | + | ES | ES | + | ET | ET | + | FI | FI | + | FJ | FJ | + | FK | FK | + | FM | FM | + | FO | FO | + | FR | FR | + | GA | GA | + | GB | GB | + | GD | GD | + | GE | GE | + | GF | GF | + | GG | GG | + | GH | GH | + | GI | GI | + | GL | GL | + | GM | GM | + | GN | GN | + | GP | GP | + | GQ | GQ | + | GR | GR | + | GS | GS | + | GT | GT | + | GU | GU | + | GW | GW | + | GY | GY | + | HK | HK | + | HM | HM | + | HN | HN | + | HR | HR | + | HT | HT | + | HU | HU | + | ID | ID | + | IE | IE | + | IL | IL | + | IM | IM | + | IN | IN | + | IO | IO | + | IQ | IQ | + | IR | IR | + | IS | IS | + | IT | IT | + | JE | JE | + | JM | JM | + | JO | JO | + | JP | JP | + | KE | KE | + | KG | KG | + | KH | KH | + | KI | KI | + | KM | KM | + | KN | KN | + | KP | KP | + | KR | KR | + | KW | KW | + | KY | KY | + | KZ | KZ | + | LA | LA | + | LB | LB | + | LC | LC | + | LI | LI | + | LK | LK | + | LR | LR | + | LS | LS | + | LT | LT | + | LU | LU | + | LV | LV | + | LY | LY | + | MA | MA | + | MC | MC | + | MD | MD | + | ME | ME | + | MF | MF | + | MG | MG | + | MH | MH | + | MK | MK | + | ML | ML | + | MM | MM | + | MN | MN | + | MO | MO | + | MP | MP | + | MQ | MQ | + | MR | MR | + | MS | MS | + | MT | MT | + | MU | MU | + | MV | MV | + | MW | MW | + | MX | MX | + | MY | MY | + | MZ | MZ | + | NA | NA | + | NC | NC | + | NE | NE | + | NF | NF | + | NG | NG | + | NI | NI | + | NL | NL | + | NP | NP | + | NR | NR | + | NU | NU | + | NZ | NZ | + | OM | OM | + | OT | OT | + | PA | PA | + | PE | PE | + | PF | PF | + | PG | PG | + | PH | PH | + | PK | PK | + | PL | PL | + | PM | PM | + | PN | PN | + | PR | PR | + | PS | PS | + | PT | PT | + | PW | PW | + | PY | PY | + | QA | QA | + | RE | RE | + | RO | RO | + | RS | RS | + | RU | RU | + | RW | RW | + | SA | SA | + | SB | SB | + | SC | SC | + | SD | SD | + | SE | SE | + | SG | SG | + | SH | SH | + | SI | SI | + | SJ | SJ | + | SK | SK | + | SL | SL | + | SM | SM | + | SN | SN | + | SO | SO | + | SR | SR | + | ST | ST | + | SV | SV | + | SY | SY | + | SZ | SZ | + | TC | TC | + | TD | TD | + | TF | TF | + | TG | TG | + | TH | TH | + | TJ | TJ | + | TK | TK | + | TL | TL | + | TM | TM | + | TN | TN | + | TO | TO | + | TR | TR | + | TT | TT | + | TV | TV | + | TW | TW | + | TZ | TZ | + | UA | UA | + | UG | UG | + | UM | UM | + | US | US | + | UY | UY | + | UZ | UZ | + | VA | VA | + | VC | VC | + | VE | VE | + | VG | VG | + | VI | VI | + | VN | VN | + | VU | VU | + | WF | WF | + | WS | WS | + | YE | YE | + | YT | YT | + | ZA | ZA | + | ZM | ZM | + | ZW | ZW | + But "MemberCountry" MUST NOT contain any similar lookups + + @Member + Scenario: MemberCountyOrParish + When "MemberCountyOrParish" exists in the "Member" metadata + Then "MemberCountyOrParish" MUST be "Single Enumeration" data type + And the following synonyms for "MemberCountyOrParish" MUST NOT exist in the metadata + | AgentCountyOrParish | + + @Member + Scenario: MemberDesignation + When "MemberDesignation" exists in the "Member" metadata + Then "MemberDesignation" MUST be "Multiple Enumeration" data type + And the following synonyms for "MemberDesignation" MUST NOT exist in the metadata + | AgentDesignation | + And "MemberDesignation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AccreditedBuyersRepresentative | Accredited Buyer's Representative / ABR | + | AccreditedLandConsultant | Accredited Land Consultant / ALC | + | AtHomeWithDiversity | At Home With Diversity / AHWD | + | CertifiedCommercialInvestmentMember | Certified Commercial Investment Member / CCIM | + | CertifiedDistressedPropertyExpert | Certified Distressed Property Expert / CDPE | + | CertifiedInternationalPropertySpecialist | Certified International Property Specialist / CIPS | + | CertifiedPropertyManager | Certified Property Manager / CPM | + | CertifiedRealEstateBrokerageManager | Certified Real Estate Brokerage Manager / CRB | + | CertifiedRealEstateTeamSpecialist | Certified Real Estate Team Specialist / C-RETS | + | CertifiedResidentialSpecialist | Certified Residential Specialist / CRS | + | CounselorOfRealEstate | Counselor of Real Estate / CRE | + | ePRO | e-PRO | + | GeneralAccreditedAppraiser | General Accredited Appraiser / GAA | + | GraduateRealtorInstitute | Graduate, REALTOR Institute / GRI | + | MilitaryRelocationProfessional | Military Relocation Professional / MRP | + | NARsGreenDesignation | NAR's Green Designation / GREEN | + | PerformanceManagementNetwork | Performance Management Network / PMN | + | PricingStrategyAdvisor | Pricing Strategy Advisor / PSA | + | RealEstateNegotiationExpert | Real Estate Negotiation Expert / RENE | + | RealtorAssociationCertifiedExecutive | REALTOR Association Certified Executive / RCE | + | ResidentialAccreditedAppraiser | Residential Accredited Appraiser / RAA | + | ResortAndSecondHomePropertySpecialist | Resort & Second-Home Property Specialist / RSPS | + | SellerRepresentativeSpecialist | Seller Representative Specialist / SRS | + | SeniorsRealEstateSpecialist | Seniors Real Estate Specialist / SRES | + | ShortSalesAndForeclosureResource | Short Sales & Foreclosure Resource / SFR | + | SocietyOfIndustrialAndOfficeRealtors | Society of Industrial and Office REALTORS / SIOR | + | TransnationalReferralCertification | Transnational Referral Certification / TRC | + But "MemberDesignation" MUST NOT contain any similar lookups + + @Member + Scenario: MemberDirectPhone + When "MemberDirectPhone" exists in the "Member" metadata + Then "MemberDirectPhone" MUST be "String" data type + And the following synonyms for "MemberDirectPhone" MUST NOT exist in the metadata + | AgentDirectPhone | + And "MemberDirectPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member @IDX + Scenario: MemberEmail + When "MemberEmail" exists in the "Member" metadata + Then "MemberEmail" MUST be "String" data type + And the following synonyms for "MemberEmail" MUST NOT exist in the metadata + | AgentEmail | + And "MemberEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Member + Scenario: MemberFax + When "MemberFax" exists in the "Member" metadata + Then "MemberFax" MUST be "String" data type + And the following synonyms for "MemberFax" MUST NOT exist in the metadata + | AgentFax | + And "MemberFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member @IDX + Scenario: MemberFirstName + When "MemberFirstName" exists in the "Member" metadata + Then "MemberFirstName" MUST be "String" data type + And the following synonyms for "MemberFirstName" MUST NOT exist in the metadata + | AgentFirstName | + And "MemberFirstName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member @IDX + Scenario: MemberFullName + When "MemberFullName" exists in the "Member" metadata + Then "MemberFullName" MUST be "String" data type + And the following synonyms for "MemberFullName" MUST NOT exist in the metadata + | AgentFullName | + And "MemberFullName" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Member + Scenario: MemberHomePhone + When "MemberHomePhone" exists in the "Member" metadata + Then "MemberHomePhone" MUST be "String" data type + And the following synonyms for "MemberHomePhone" MUST NOT exist in the metadata + | AgentHomePhone | + And "MemberHomePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member + Scenario: MemberIsAssistantTo + When "MemberIsAssistantTo" exists in the "Member" metadata + Then "MemberIsAssistantTo" MUST be "String" data type + And the following synonyms for "MemberIsAssistantTo" MUST NOT exist in the metadata + | AgentIsAssistantTo | + And "MemberIsAssistantTo" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member @IDX + Scenario: MemberKey + When "MemberKey" exists in the "Member" metadata + Then "MemberKey" MUST be "String" data type + And the following synonyms for "MemberKey" MUST NOT exist in the metadata + | AgentKey | + And "MemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Member @IDX + Scenario: MemberKeyNumeric + When "MemberKeyNumeric" exists in the "Member" metadata + Then "MemberKeyNumeric" MUST be "Integer" data type + And the following synonyms for "MemberKeyNumeric" MUST NOT exist in the metadata + | AgentKeyNumeric | + + @Member + Scenario: MemberLanguages + When "MemberLanguages" exists in the "Member" metadata + Then "MemberLanguages" MUST be "Multiple Enumeration" data type + And the following synonyms for "MemberLanguages" MUST NOT exist in the metadata + | AgentLanguages | + And "MemberLanguages" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Abkhazian | Abkhazian | + | Afar | Afar | + | Afrikaans | Afrikaans | + | Albanian | Albanian | + | AmericanSignLanguage | American Sign Language | + | Amharic | Amharic | + | Arabic | Arabic | + | Aramaic | Aramaic | + | Armenian | Armenian | + | Assamese | Assamese | + | AssyrianNeoAramaic | Assyrian Neo-Aramaic | + | Avestan | Avestan | + | Aymara | Aymara | + | Azerbaijani | Azerbaijani | + | Bambara | Bambara | + | Bashkir | Bashkir | + | Basque | Basque | + | Bengali | Bengali | + | Bihari | Bihari | + | Bikol | Bikol | + | Bislama | Bislama | + | Bosnian | Bosnian | + | BrazilianPortuguese | Brazilian Portuguese | + | Bulgarian | Bulgarian | + | Burmese | Burmese | + | Byelorussian | Byelorussian | + | Cambodian | Cambodian | + | Cantonese | Cantonese | + | CapeVerdeanCreole | Cape Verdean Creole | + | Catalan | Catalan | + | Cebuano | Cebuano | + | Chamorro | Chamorro | + | Chechen | Chechen | + | Chinese | Chinese | + | Chuukese | Chuukese | + | Chuvash | Chuvash | + | Cornish | Cornish | + | Corsican | Corsican | + | Croatian | Croatian | + | Czech | Czech | + | Danish | Danish | + | Dari | Dari (Afghan Persian) | + | Dioula | Dioula | + | Dutch | Dutch | + | Dzongkha | Dzongkha | + | English | English | + | Esperanto | Esperanto | + | Estonian | Estonian | + | Faroese | Faroese | + | Farsi | Farsi | + | Fiji | Fiji | + | Finnish | Finnish | + | Flemish | Flemish | + | French | French | + | Frisian | Frisian | + | Galician | Galician | + | Georgian | Georgian | + | German | German | + | Greek | Greek | + | Greenlandic | Greenlandic | + | Guarani | Guarani | + | Gujarati | Gujarati | + | HaitianCreole | Haitian Creole | + | Hausa | Hausa | + | Hebrew | Hebrew | + | Herero | Herero | + | Hiligaynon | Hiligaynon | + | Hindi | Hindi | + | HiriMotu | Hiri Motu | + | Hmong | Hmong | + | Hungarian | Hungarian | + | Iban | Iban | + | Icelandic | Icelandic | + | Igbo | Igbo | + | Ilocano | Ilocano | + | Indonesian | Indonesian | + | Interlingua | Interlingua | + | Inuktitut | Inuktitut | + | Inupiak | Inupiak | + | Irish | Irish (Gaelic) | + | Italian | Italian | + | Japanese | Japanese | + | Javanese | Javanese | + | Kannada | Kannada | + | Kashmiri | Kashmiri | + | Kazakh | Kazakh | + | KIche | K'iche' | + | Kichwa | Kichwa | + | Kikuyu | Kikuyu | + | Kinyarwanda | Kinyarwanda | + | Kirghiz | Kirghiz | + | Kirundi | Kirundi | + | Komi | Komi | + | Korean | Korean | + | Kpelle | Kpelle | + | Kru | Kru | + | Kurdish | Kurdish | + | Lao | Lao | + | Latin | Latin | + | Latvian | Latvian | + | Lingala | Lingala | + | Lithuanian | Lithuanian | + | Luxemburgish | Luxemburgish | + | Macedonian | Macedonian | + | Malagasy | Malagasy | + | Malay | Malay | + | Malayalam | Malayalam | + | Maltese | Maltese | + | Mandarin | Mandarin | + | Maninka | Maninka | + | ManxGaelic | Manx Gaelic | + | Maori | Maori | + | Marathi | Marathi | + | Marshallese | Marshallese | + | Moldovan | Moldovan | + | Mongolian | Mongolian | + | Nauru | Nauru | + | Navajo | Navajo | + | Ndebele | Ndebele | + | Ndonga | Ndonga | + | Nepali | Nepali | + | Norwegian | Norwegian | + | Nyanja | Nyanja | + | Occitan | Occitan | + | Oriya | Oriya | + | Oromo | Oromo | + | Ossetian | Ossetian | + | Pali | Pali | + | Pangasinan | Pangasinan | + | Papiamento | Papiamento | + | Pashto | Pashto | + | Polish | Polish | + | Portuguese | Portuguese | + | Punjabi | Punjabi | + | Quechua | Quechua | + | Romanian | Romanian | + | Romany | Romany | + | Russian | Russian | + | Sami | Sami | + | Samoan | Samoan | + | Sangho | Sangho | + | Sanskrit | Sanskrit | + | Sardinian | Sardinian | + | ScotsGaelic | Scots Gaelic | + | Serbian | Serbian | + | SerboCroatian | Serbo-Croatian | + | Sesotho | Sesotho | + | Setswana | Setswana | + | Shan | Shan | + | Shona | Shona | + | Sindhi | Sindhi | + | Sinhalese | Sinhalese | + | Siswati | Siswati | + | Slovak | Slovak | + | Slovenian | Slovenian | + | Somali | Somali | + | SouthernNdebele | Southern Ndebele | + | Spanish | Spanish | + | Sundanese | Sundanese | + | Swahili | Swahili | + | Swedish | Swedish | + | Syriac | Syriac | + | Tagalog | Tagalog | + | Tahitian | Tahitian | + | Tajik | Tajik | + | Tamil | Tamil | + | Tatar | Tatar | + | Telugu | Telugu | + | Thai | Thai | + | Tibetan | Tibetan | + | Tigrinya | Tigrinya | + | Tongan | Tongan | + | Tsonga | Tsonga | + | Turkish | Turkish | + | Turkmen | Turkmen | + | Twi | Twi | + | Uigur | Uigur | + | Ukrainian | Ukrainian | + | Urdu | Urdu | + | Uzbek | Uzbek | + | Vietnamese | Vietnamese | + | Volapuk | Volapuk | + | Welsh | Welsh | + | Wolof | Wolof | + | Xhosa | Xhosa | + | Yiddish | Yiddish | + | Yoruba | Yoruba | + | Zhuang | Zhuang | + | Zulu | Zulu | + But "MemberLanguages" MUST NOT contain any similar lookups + + @Member @IDX + Scenario: MemberLastName + When "MemberLastName" exists in the "Member" metadata + Then "MemberLastName" MUST be "String" data type + And the following synonyms for "MemberLastName" MUST NOT exist in the metadata + | AgentLastName | + And "MemberLastName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member @IDX + Scenario: MemberLoginId + When "MemberLoginId" exists in the "Member" metadata + Then "MemberLoginId" MUST be "String" data type + And the following synonyms for "MemberLoginId" MUST NOT exist in the metadata + | AgentLoginId | + And "MemberLoginId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Member @IDX + Scenario: MemberMiddleName + When "MemberMiddleName" exists in the "Member" metadata + Then "MemberMiddleName" MUST be "String" data type + And the following synonyms for "MemberMiddleName" MUST NOT exist in the metadata + | AgentMiddleName | + And "MemberMiddleName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member + Scenario: MemberMlsAccessYN + When "MemberMlsAccessYN" exists in the "Member" metadata + Then "MemberMlsAccessYN" MUST be "Boolean" data type + And the following synonyms for "MemberMlsAccessYN" MUST NOT exist in the metadata + | AgentMlsAccessYN | + + @Member @IDX + Scenario: MemberMlsId + When "MemberMlsId" exists in the "Member" metadata + Then "MemberMlsId" MUST be "String" data type + And the following synonyms for "MemberMlsId" MUST NOT exist in the metadata + | AgentMlsId | + And "MemberMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Member + Scenario: MemberMlsSecurityClass + When "MemberMlsSecurityClass" exists in the "Member" metadata + Then "MemberMlsSecurityClass" MUST be "Single Enumeration" data type + And the following synonyms for "MemberMlsSecurityClass" MUST NOT exist in the metadata + | AgentMlsSecurityClass | + + @Member + Scenario: MemberMobilePhone + When "MemberMobilePhone" exists in the "Member" metadata + Then "MemberMobilePhone" MUST be "String" data type + And the following synonyms for "MemberMobilePhone" MUST NOT exist in the metadata + | AgentMobilePhone | + And "MemberMobilePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member + Scenario: MemberNamePrefix + When "MemberNamePrefix" exists in the "Member" metadata + Then "MemberNamePrefix" MUST be "String" data type + And the following synonyms for "MemberNamePrefix" MUST NOT exist in the metadata + | AgentNamePrefix | + | Salutation | + | Title | + And "MemberNamePrefix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Member @IDX + Scenario: MemberNameSuffix + When "MemberNameSuffix" exists in the "Member" metadata + Then "MemberNameSuffix" MUST be "String" data type + And the following synonyms for "MemberNameSuffix" MUST NOT exist in the metadata + | AgentNameSuffix | + And "MemberNameSuffix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Member + Scenario: MemberNationalAssociationId + When "MemberNationalAssociationId" exists in the "Member" metadata + Then "MemberNationalAssociationId" MUST be "String" data type + And the following synonyms for "MemberNationalAssociationId" MUST NOT exist in the metadata + | AgentNationalAssociationId | + And "MemberNationalAssociationId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Member @IDX + Scenario: MemberNickname + When "MemberNickname" exists in the "Member" metadata + Then "MemberNickname" MUST be "String" data type + And the following synonyms for "MemberNickname" MUST NOT exist in the metadata + | AgentNickname | + And "MemberNickname" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member + Scenario: MemberOfficePhone + When "MemberOfficePhone" exists in the "Member" metadata + Then "MemberOfficePhone" MUST be "String" data type + And the following synonyms for "MemberOfficePhone" MUST NOT exist in the metadata + | AgentOfficePhone | + And "MemberOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member + Scenario: MemberOfficePhoneExt + When "MemberOfficePhoneExt" exists in the "Member" metadata + Then "MemberOfficePhoneExt" MUST be "String" data type + And the following synonyms for "MemberOfficePhoneExt" MUST NOT exist in the metadata + | AgentOfficePhoneExt | + And "MemberOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Member + Scenario: MemberOtherPhoneType + When "MemberOtherPhoneType" exists in the "Member" metadata + Then "MemberOtherPhoneType" MUST be "Single Enumeration" data type + And the following synonyms for "MemberOtherPhoneType" MUST NOT exist in the metadata + | AgentOtherPhoneType | + And "MemberOtherPhoneType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Direct | Direct | + | Fax | Fax | + | First | First | + | Home | Home | + | Mobile | Mobile | + | Modem | Modem | + | Office | Office | + | Pager | Pager | + | Preferred | Preferred | + | Second | Second | + | Sms | SMS | + | Third | Third | + | TollFree | Toll Free | + | Voicemail | Voicemail | + But "MemberOtherPhoneType" MUST NOT contain any similar lookups + + @Member + Scenario: MemberPager + When "MemberPager" exists in the "Member" metadata + Then "MemberPager" MUST be "String" data type + And the following synonyms for "MemberPager" MUST NOT exist in the metadata + | AgentPager | + And "MemberPager" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member + Scenario: MemberPassword + When "MemberPassword" exists in the "Member" metadata + Then "MemberPassword" MUST be "String" data type + And the following synonyms for "MemberPassword" MUST NOT exist in the metadata + | AgentPassword | + And "MemberPassword" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Member + Scenario: MemberPhoneTTYTDD + When "MemberPhoneTTYTDD" exists in the "Member" metadata + Then "MemberPhoneTTYTDD" MUST be "String" data type + And the following synonyms for "MemberPhoneTTYTDD" MUST NOT exist in the metadata + | AgentPhoneTTYTDD | + And "MemberPhoneTTYTDD" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member + Scenario: MemberPostalCode + When "MemberPostalCode" exists in the "Member" metadata + Then "MemberPostalCode" MUST be "String" data type + And the following synonyms for "MemberPostalCode" MUST NOT exist in the metadata + | AgentPostalCode | + And "MemberPostalCode" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Member + Scenario: MemberPostalCodePlus4 + When "MemberPostalCodePlus4" exists in the "Member" metadata + Then "MemberPostalCodePlus4" MUST be "String" data type + And the following synonyms for "MemberPostalCodePlus4" MUST NOT exist in the metadata + | AgentPostalCodePlus4 | + And "MemberPostalCodePlus4" length SHOULD be equal to the RESO Suggested Max Length of 4 + + @Member @IDX + Scenario: MemberPreferredPhone + When "MemberPreferredPhone" exists in the "Member" metadata + Then "MemberPreferredPhone" MUST be "String" data type + And the following synonyms for "MemberPreferredPhone" MUST NOT exist in the metadata + | AgentPreferredPhone | + And "MemberPreferredPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member @IDX + Scenario: MemberPreferredPhoneExt + When "MemberPreferredPhoneExt" exists in the "Member" metadata + Then "MemberPreferredPhoneExt" MUST be "String" data type + And the following synonyms for "MemberPreferredPhoneExt" MUST NOT exist in the metadata + | AgentPreferredPhoneExt | + And "MemberPreferredPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Member @IDX + Scenario: MemberStateLicense + When "MemberStateLicense" exists in the "Member" metadata + Then "MemberStateLicense" MUST be "String" data type + And the following synonyms for "MemberStateLicense" MUST NOT exist in the metadata + | AgentStateLicense | + And "MemberStateLicense" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Member @IDX + Scenario: MemberStateLicenseState + When "MemberStateLicenseState" exists in the "Member" metadata + Then "MemberStateLicenseState" MUST be "Single Enumeration" data type + And the following synonyms for "MemberStateLicenseState" MUST NOT exist in the metadata + | AgentStateLicenseState | + And "MemberStateLicenseState" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "MemberStateLicenseState" MUST NOT contain any similar lookups + + @Member + Scenario: MemberStateOrProvince + When "MemberStateOrProvince" exists in the "Member" metadata + Then "MemberStateOrProvince" MUST be "Single Enumeration" data type + And the following synonyms for "MemberStateOrProvince" MUST NOT exist in the metadata + | AgentStateOrProvince | + And "MemberStateOrProvince" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "MemberStateOrProvince" MUST NOT contain any similar lookups + + @Member @IDX + Scenario: MemberStatus + When "MemberStatus" exists in the "Member" metadata + Then "MemberStatus" MUST be "Single Enumeration" data type + And the following synonyms for "MemberStatus" MUST NOT exist in the metadata + | AgentStatus | + And "MemberStatus" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Active | Active | + | Inactive | Inactive | + But "MemberStatus" MUST NOT contain any similar lookups + + @Member + Scenario: MemberTollFreePhone + When "MemberTollFreePhone" exists in the "Member" metadata + Then "MemberTollFreePhone" MUST be "String" data type + And the following synonyms for "MemberTollFreePhone" MUST NOT exist in the metadata + | AgentTollFreePhone | + And "MemberTollFreePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member + Scenario: MemberType + When "MemberType" exists in the "Member" metadata + Then "MemberType" MUST be "Single Enumeration" data type + And the following synonyms for "MemberType" MUST NOT exist in the metadata + | AgentType | + And "MemberType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Assistant | Assistant | + | AssociationStaff | Association Staff | + | DesignatedRealtorAppraiser | Designated REALTOR Appraiser | + | DesignatedRealtorParticipant | Designated REALTOR Participant | + | LicensedAssistant | Licensed Assistant | + | MlsOnlyAppraiser | MLS Only Appraiser | + | MlsOnlyBroker | MLS Only Broker | + | MlsOnlySalesperson | MLS Only Salesperson | + | MlsStaff | MLS Staff | + | NonMemberVendor | Non Member/Vendor | + | OfficeManager | Office Manager | + | RealtorAppraiser | REALTOR Appraiser | + | RealtorSalesperson | REALTOR Salesperson | + | UnlicensedAssistant | Unlicensed Assistant | + But "MemberType" MUST NOT contain any similar lookups + + @Member + Scenario: MemberVoiceMail + When "MemberVoiceMail" exists in the "Member" metadata + Then "MemberVoiceMail" MUST be "String" data type + And the following synonyms for "MemberVoiceMail" MUST NOT exist in the metadata + | AgentVoiceMail | + And "MemberVoiceMail" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Member + Scenario: MemberVoiceMailExt + When "MemberVoiceMailExt" exists in the "Member" metadata + Then "MemberVoiceMailExt" MUST be "String" data type + And the following synonyms for "MemberVoiceMailExt" MUST NOT exist in the metadata + | AgentVoiceMailExt | + And "MemberVoiceMailExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Member @IDX + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Member" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @Member @IDX + Scenario: OfficeKey + When "OfficeKey" exists in the "Member" metadata + Then "OfficeKey" MUST be "String" data type + And "OfficeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Member @IDX + Scenario: OfficeKeyNumeric + When "OfficeKeyNumeric" exists in the "Member" metadata + Then "OfficeKeyNumeric" MUST be "Integer" data type + + @Member @IDX + Scenario: OfficeMlsId + When "OfficeMlsId" exists in the "Member" metadata + Then "OfficeMlsId" MUST be "String" data type + And "OfficeMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Member @IDX + Scenario: OfficeName + When "OfficeName" exists in the "Member" metadata + Then "OfficeName" MUST be "String" data type + And "OfficeName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Member + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "Member" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + + @Member @IDX + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "Member" metadata + Then "OriginatingSystemID" MUST be "String" data type + And the following synonyms for "OriginatingSystemID" MUST NOT exist in the metadata + | MLSID | + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Member @IDX + Scenario: OriginatingSystemMemberKey + When "OriginatingSystemMemberKey" exists in the "Member" metadata + Then "OriginatingSystemMemberKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemMemberKey" MUST NOT exist in the metadata + | OriginatingSystemAgentkey | + | ProviderKey | + And "OriginatingSystemMemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Member + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "Member" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Member + Scenario: SocialMediaType + When "SocialMediaType" exists in the "Member" metadata + Then "SocialMediaType" MUST be "Single Enumeration" data type + And "SocialMediaType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Blog | Blog | + | Digg | Digg | + | Facebook | Facebook | + | FacebookMessenger | Facebook Messenger | + | Googleplus | GooglePlus | + | iMessage | iMessage | + | Instagram | Instagram | + | Linkedin | LinkedIn | + | Pinterest | Pinterest | + | Reddit | Reddit | + | Slack | Slack | + | Snapchat | Snapchat | + | Stumbleupon | StumbleUpon | + | Tumblr | Tumblr | + | Twitter | Twitter | + | Website | Website | + | Youtube | YouTube | + But "SocialMediaType" MUST NOT contain any similar lookups + + @Member + Scenario: SourceSystemID + When "SourceSystemID" exists in the "Member" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Member @IDX + Scenario: SourceSystemMemberKey + When "SourceSystemMemberKey" exists in the "Member" metadata + Then "SourceSystemMemberKey" MUST be "String" data type + And the following synonyms for "SourceSystemMemberKey" MUST NOT exist in the metadata + | SourceSystemAgentKey | + | ProviderKey | + And "SourceSystemMemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Member + Scenario: SourceSystemName + When "SourceSystemName" exists in the "Member" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Member + Scenario: SyndicateTo + When "SyndicateTo" exists in the "Member" metadata + Then "SyndicateTo" MUST be "Multiple Enumeration" data type + And "SyndicateTo" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | HomesDotCom | Homes.com | + | Listhub | ListHub | + | RealtorDotCom | Realtor.com | + | ZillowTrulia | Zillow/Trulia | + But "SyndicateTo" MUST NOT contain any similar lookups diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/office.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/office.feature new file mode 100644 index 00000000..e15c63be --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/office.feature @@ -0,0 +1,416 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Office + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Office + Scenario: FranchiseAffiliation + When "FranchiseAffiliation" exists in the "Office" metadata + Then "FranchiseAffiliation" MUST be "String" data type + And "FranchiseAffiliation" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Office @IDX + Scenario: IDXOfficeParticipationYN + When "IDXOfficeParticipationYN" exists in the "Office" metadata + Then "IDXOfficeParticipationYN" MUST be "Boolean" data type + + @Office @IDX + Scenario: MainOfficeKey + When "MainOfficeKey" exists in the "Office" metadata + Then "MainOfficeKey" MUST be "String" data type + And "MainOfficeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office @IDX + Scenario: MainOfficeKeyNumeric + When "MainOfficeKeyNumeric" exists in the "Office" metadata + Then "MainOfficeKeyNumeric" MUST be "Integer" data type + + @Office @IDX + Scenario: MainOfficeMlsId + When "MainOfficeMlsId" exists in the "Office" metadata + Then "MainOfficeMlsId" MUST be "String" data type + And "MainOfficeMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Office @IDX + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Office" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @Office + Scenario: OfficeAOR + When "OfficeAOR" exists in the "Office" metadata + Then "OfficeAOR" MUST be "Single Enumeration" data type + + @Office + Scenario: OfficeAORMlsId + When "OfficeAORMlsId" exists in the "Office" metadata + Then "OfficeAORMlsId" MUST be "String" data type + And "OfficeAORMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Office + Scenario: OfficeAORkey + When "OfficeAORkey" exists in the "Office" metadata + Then "OfficeAORkey" MUST be "String" data type + And "OfficeAORkey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office + Scenario: OfficeAORkeyNumeric + When "OfficeAORkeyNumeric" exists in the "Office" metadata + Then "OfficeAORkeyNumeric" MUST be "Integer" data type + + @Office @IDX + Scenario: OfficeAddress1 + When "OfficeAddress1" exists in the "Office" metadata + Then "OfficeAddress1" MUST be "String" data type + And "OfficeAddress1" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Office @IDX + Scenario: OfficeAddress2 + When "OfficeAddress2" exists in the "Office" metadata + Then "OfficeAddress2" MUST be "String" data type + And "OfficeAddress2" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Office + Scenario: OfficeAssociationComments + When "OfficeAssociationComments" exists in the "Office" metadata + Then "OfficeAssociationComments" MUST be "String" data type + And "OfficeAssociationComments" length SHOULD be equal to the RESO Suggested Max Length of 500 + + @Office + Scenario: OfficeBranchType + When "OfficeBranchType" exists in the "Office" metadata + Then "OfficeBranchType" MUST be "Single Enumeration" data type + And "OfficeBranchType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Branch | Branch | + | Main | Main | + | StandAlone | Stand Alone | + But "OfficeBranchType" MUST NOT contain any similar lookups + + @Office @IDX + Scenario: OfficeBrokerKey + When "OfficeBrokerKey" exists in the "Office" metadata + Then "OfficeBrokerKey" MUST be "String" data type + And "OfficeBrokerKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office @IDX + Scenario: OfficeBrokerKeyNumeric + When "OfficeBrokerKeyNumeric" exists in the "Office" metadata + Then "OfficeBrokerKeyNumeric" MUST be "Integer" data type + + @Office + Scenario: OfficeBrokerMlsId + When "OfficeBrokerMlsId" exists in the "Office" metadata + Then "OfficeBrokerMlsId" MUST be "String" data type + And "OfficeBrokerMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Office @IDX + Scenario: OfficeCity + When "OfficeCity" exists in the "Office" metadata + Then "OfficeCity" MUST be "String" data type + And "OfficeCity" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Office + Scenario: OfficeCorporateLicense + When "OfficeCorporateLicense" exists in the "Office" metadata + Then "OfficeCorporateLicense" MUST be "String" data type + And "OfficeCorporateLicense" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Office + Scenario: OfficeCountyOrParish + When "OfficeCountyOrParish" exists in the "Office" metadata + Then "OfficeCountyOrParish" MUST be "Single Enumeration" data type + And the following synonyms for "OfficeCountyOrParish" MUST NOT exist in the metadata + | County | + + @Office + Scenario: OfficeEmail + When "OfficeEmail" exists in the "Office" metadata + Then "OfficeEmail" MUST be "String" data type + And "OfficeEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Office + Scenario: OfficeFax + When "OfficeFax" exists in the "Office" metadata + Then "OfficeFax" MUST be "String" data type + And "OfficeFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Office @IDX + Scenario: OfficeKey + When "OfficeKey" exists in the "Office" metadata + Then "OfficeKey" MUST be "String" data type + And "OfficeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office @IDX + Scenario: OfficeKeyNumeric + When "OfficeKeyNumeric" exists in the "Office" metadata + Then "OfficeKeyNumeric" MUST be "Integer" data type + + @Office + Scenario: OfficeManagerKey + When "OfficeManagerKey" exists in the "Office" metadata + Then "OfficeManagerKey" MUST be "String" data type + And "OfficeManagerKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office + Scenario: OfficeManagerKeyNumeric + When "OfficeManagerKeyNumeric" exists in the "Office" metadata + Then "OfficeManagerKeyNumeric" MUST be "Integer" data type + + @Office + Scenario: OfficeManagerMlsId + When "OfficeManagerMlsId" exists in the "Office" metadata + Then "OfficeManagerMlsId" MUST be "String" data type + And "OfficeManagerMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Office @IDX + Scenario: OfficeMlsId + When "OfficeMlsId" exists in the "Office" metadata + Then "OfficeMlsId" MUST be "String" data type + And "OfficeMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Office @IDX + Scenario: OfficeName + When "OfficeName" exists in the "Office" metadata + Then "OfficeName" MUST be "String" data type + And "OfficeName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office + Scenario: OfficeNationalAssociationId + When "OfficeNationalAssociationId" exists in the "Office" metadata + Then "OfficeNationalAssociationId" MUST be "String" data type + And "OfficeNationalAssociationId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Office @IDX + Scenario: OfficePhone + When "OfficePhone" exists in the "Office" metadata + Then "OfficePhone" MUST be "String" data type + And "OfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Office + Scenario: OfficePhoneExt + When "OfficePhoneExt" exists in the "Office" metadata + Then "OfficePhoneExt" MUST be "String" data type + And "OfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Office @IDX + Scenario: OfficePostalCode + When "OfficePostalCode" exists in the "Office" metadata + Then "OfficePostalCode" MUST be "String" data type + And "OfficePostalCode" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Office @IDX + Scenario: OfficePostalCodePlus4 + When "OfficePostalCodePlus4" exists in the "Office" metadata + Then "OfficePostalCodePlus4" MUST be "String" data type + And "OfficePostalCodePlus4" length SHOULD be equal to the RESO Suggested Max Length of 4 + + @Office @IDX + Scenario: OfficeStateOrProvince + When "OfficeStateOrProvince" exists in the "Office" metadata + Then "OfficeStateOrProvince" MUST be "Single Enumeration" data type + And "OfficeStateOrProvince" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "OfficeStateOrProvince" MUST NOT contain any similar lookups + + @Office @IDX + Scenario: OfficeStatus + When "OfficeStatus" exists in the "Office" metadata + Then "OfficeStatus" MUST be "Single Enumeration" data type + And "OfficeStatus" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Active | Active | + | Inactive | Inactive | + But "OfficeStatus" MUST NOT contain any similar lookups + + @Office + Scenario: OfficeType + When "OfficeType" exists in the "Office" metadata + Then "OfficeType" MUST be "Single Enumeration" data type + And "OfficeType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Affiliate | Affiliate | + | Appraiser | Appraiser | + | Association | Association | + | Mls | MLS | + | MlsOnlyBranch | MLS Only Branch | + | MlsOnlyFirm | MLS Only Firm | + | MlsOnlyOffice | MLS Only Office | + | NonMemberVendor | Non Member/Vendor | + | RealtorBranchOffice | Realtor Branch Office | + | RealtorFirm | Realtor Firm | + | RealtorOffice | Realtor Office | + But "OfficeType" MUST NOT contain any similar lookups + + @Office + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "Office" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + + @Office @IDX + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "Office" metadata + Then "OriginatingSystemID" MUST be "String" data type + And the following synonyms for "OriginatingSystemID" MUST NOT exist in the metadata + | MLSID | + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Office @IDX + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "Office" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office @IDX + Scenario: OriginatingSystemOfficeKey + When "OriginatingSystemOfficeKey" exists in the "Office" metadata + Then "OriginatingSystemOfficeKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemOfficeKey" MUST NOT exist in the metadata + | ProviderKey | + And "OriginatingSystemOfficeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office + Scenario: SocialMediaType + When "SocialMediaType" exists in the "Office" metadata + Then "SocialMediaType" MUST be "Single Enumeration" data type + And "SocialMediaType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Blog | Blog | + | Digg | Digg | + | Facebook | Facebook | + | FacebookMessenger | Facebook Messenger | + | Googleplus | GooglePlus | + | iMessage | iMessage | + | Instagram | Instagram | + | Linkedin | LinkedIn | + | Pinterest | Pinterest | + | Reddit | Reddit | + | Slack | Slack | + | Snapchat | Snapchat | + | Stumbleupon | StumbleUpon | + | Tumblr | Tumblr | + | Twitter | Twitter | + | Website | Website | + | Youtube | YouTube | + But "SocialMediaType" MUST NOT contain any similar lookups + + @Office @IDX + Scenario: SourceSystemID + When "SourceSystemID" exists in the "Office" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Office @IDX + Scenario: SourceSystemName + When "SourceSystemName" exists in the "Office" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office @IDX + Scenario: SourceSystemOfficeKey + When "SourceSystemOfficeKey" exists in the "Office" metadata + Then "SourceSystemOfficeKey" MUST be "String" data type + And the following synonyms for "SourceSystemOfficeKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemOfficeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Office + Scenario: SyndicateAgentOption + When "SyndicateAgentOption" exists in the "Office" metadata + Then "SyndicateAgentOption" MUST be "Single Enumeration" data type + And the following synonyms for "SyndicateAgentOption" MUST NOT exist in the metadata + | SyndicateMemberOption | + + @Office + Scenario: SyndicateTo + When "SyndicateTo" exists in the "Office" metadata + Then "SyndicateTo" MUST be "Multiple Enumeration" data type + And "SyndicateTo" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | HomesDotCom | Homes.com | + | Listhub | ListHub | + | RealtorDotCom | Realtor.com | + | ZillowTrulia | Zillow/Trulia | + But "SyndicateTo" MUST NOT contain any similar lookups diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/openhouse.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/openhouse.feature new file mode 100644 index 00000000..31d6804c --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/openhouse.feature @@ -0,0 +1,231 @@ +# This file was autogenerated on: 20201023121019795 +Feature: OpenHouse + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @OpenHouse + Scenario: AppointmentRequiredYN + When "AppointmentRequiredYN" exists in the "OpenHouse" metadata + Then "AppointmentRequiredYN" MUST be "Boolean" data type + + @OpenHouse @IDX + Scenario: ListingId + When "ListingId" exists in the "OpenHouse" metadata + Then "ListingId" MUST be "String" data type + And the following synonyms for "ListingId" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + And "ListingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OpenHouse @IDX + Scenario: ListingKey + When "ListingKey" exists in the "OpenHouse" metadata + Then "ListingKey" MUST be "String" data type + And the following synonyms for "ListingKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OpenHouse @IDX + Scenario: ListingKeyNumeric + When "ListingKeyNumeric" exists in the "OpenHouse" metadata + Then "ListingKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ListingKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @OpenHouse @IDX + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "OpenHouse" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + And the following synonyms for "ModificationTimestamp" MUST NOT exist in the metadata + | ModificationDateTime | + | DateTimeModified | + | ModDate | + | DateMod | + | UpdateDate | + | UpdateTimestamp | + + @OpenHouse + Scenario: OpenHouseAttendedBy + When "OpenHouseAttendedBy" exists in the "OpenHouse" metadata + Then "OpenHouseAttendedBy" MUST be "Single Enumeration" data type + And "OpenHouseAttendedBy" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Agent | Agent | + | Seller | Seller | + | Unattended | Unattended | + But "OpenHouseAttendedBy" MUST NOT contain any similar lookups + + @OpenHouse @IDX + Scenario: OpenHouseDate + When "OpenHouseDate" exists in the "OpenHouse" metadata + Then "OpenHouseDate" MUST be "Date" data type + + @OpenHouse @IDX + Scenario: OpenHouseEndTime + When "OpenHouseEndTime" exists in the "OpenHouse" metadata + Then "OpenHouseEndTime" MUST be "Timestamp" data type + + @OpenHouse + Scenario: OpenHouseId + When "OpenHouseId" exists in the "OpenHouse" metadata + Then "OpenHouseId" MUST be "String" data type + And "OpenHouseId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OpenHouse @IDX + Scenario: OpenHouseKey + When "OpenHouseKey" exists in the "OpenHouse" metadata + Then "OpenHouseKey" MUST be "String" data type + And "OpenHouseKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OpenHouse @IDX + Scenario: OpenHouseKeyNumeric + When "OpenHouseKeyNumeric" exists in the "OpenHouse" metadata + Then "OpenHouseKeyNumeric" MUST be "Integer" data type + + @OpenHouse @IDX + Scenario: OpenHouseRemarks + When "OpenHouseRemarks" exists in the "OpenHouse" metadata + Then "OpenHouseRemarks" MUST be "String" data type + And "OpenHouseRemarks" length SHOULD be equal to the RESO Suggested Max Length of 500 + + @OpenHouse @IDX + Scenario: OpenHouseStartTime + When "OpenHouseStartTime" exists in the "OpenHouse" metadata + Then "OpenHouseStartTime" MUST be "Timestamp" data type + + @OpenHouse @IDX + Scenario: OpenHouseStatus + When "OpenHouseStatus" exists in the "OpenHouse" metadata + Then "OpenHouseStatus" MUST be "Single Enumeration" data type + And "OpenHouseStatus" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Active | Active | + | Canceled | Canceled | + | Ended | Ended | + But "OpenHouseStatus" MUST NOT contain any similar lookups + + @OpenHouse @IDX + Scenario: OpenHouseType + When "OpenHouseType" exists in the "OpenHouse" metadata + Then "OpenHouseType" MUST be "Single Enumeration" data type + And "OpenHouseType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Broker | Broker | + | Office | Office | + | Public | Public | + But "OpenHouseType" MUST NOT contain any similar lookups + + @OpenHouse @IDX + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "OpenHouse" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + And the following synonyms for "OriginalEntryTimestamp" MUST NOT exist in the metadata + | EntryDate | + | InputDate | + | DateTimeCreated | + | CreatedDate. | + + @OpenHouse @IDX + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "OpenHouse" metadata + Then "OriginatingSystemID" MUST be "String" data type + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @OpenHouse @IDX + Scenario: OriginatingSystemKey + When "OriginatingSystemKey" exists in the "OpenHouse" metadata + Then "OriginatingSystemKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemKey" MUST NOT exist in the metadata + | ProviderKey | + And "OriginatingSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OpenHouse + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "OpenHouse" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OpenHouse @IDX + Scenario: Refreshments + When "Refreshments" exists in the "OpenHouse" metadata + Then "Refreshments" MUST be "String" data type + And "Refreshments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OpenHouse + Scenario: ShowingAgentFirstName + When "ShowingAgentFirstName" exists in the "OpenHouse" metadata + Then "ShowingAgentFirstName" MUST be "String" data type + And the following synonyms for "ShowingAgentFirstName" MUST NOT exist in the metadata + | ShowingMemberFirstName | + And "ShowingAgentFirstName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OpenHouse @IDX + Scenario: ShowingAgentKey + When "ShowingAgentKey" exists in the "OpenHouse" metadata + Then "ShowingAgentKey" MUST be "String" data type + And the following synonyms for "ShowingAgentKey" MUST NOT exist in the metadata + | ShowingMemberKey | + And "ShowingAgentKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OpenHouse @IDX + Scenario: ShowingAgentKeyNumeric + When "ShowingAgentKeyNumeric" exists in the "OpenHouse" metadata + Then "ShowingAgentKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ShowingAgentKeyNumeric" MUST NOT exist in the metadata + | ShowingMemberKeyNumeric | + + @OpenHouse + Scenario: ShowingAgentLastName + When "ShowingAgentLastName" exists in the "OpenHouse" metadata + Then "ShowingAgentLastName" MUST be "String" data type + And the following synonyms for "ShowingAgentLastName" MUST NOT exist in the metadata + | ShowingMemberLastName | + And "ShowingAgentLastName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OpenHouse + Scenario: ShowingAgentMlsID + When "ShowingAgentMlsID" exists in the "OpenHouse" metadata + Then "ShowingAgentMlsID" MUST be "String" data type + And the following synonyms for "ShowingAgentMlsID" MUST NOT exist in the metadata + | ShowingMemberMlslD | + And "ShowingAgentMlsID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @OpenHouse @IDX + Scenario: SourceSystemID + When "SourceSystemID" exists in the "OpenHouse" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @OpenHouse @IDX + Scenario: SourceSystemKey + When "SourceSystemKey" exists in the "OpenHouse" metadata + Then "SourceSystemKey" MUST be "String" data type + And the following synonyms for "SourceSystemKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OpenHouse + Scenario: SourceSystemName + When "SourceSystemName" exists in the "OpenHouse" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/otherphone.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/otherphone.feature new file mode 100644 index 00000000..06905600 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/otherphone.feature @@ -0,0 +1,142 @@ +# This file was autogenerated on: 20201023121019795 +Feature: OtherPhone + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @OtherPhone + Scenario: ClassName + When "ClassName" exists in the "OtherPhone" metadata + Then "ClassName" MUST be "Single Enumeration" data type + And "ClassName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BusinessOpportunity | Business Opportunity | + | CommercialLease | Commercial Lease | + | CommercialSale | Commercial Sale | + | Contacts | Contacts | + | CrossProperty | Cross Property | + | Farm | Farm | + | HistoryTransactional | History Transactional | + | Land | Land | + | ManufacturedInPark | Manufactured In Park | + | Media | Media | + | Member | Member | + | Office | Office | + | OpenHouse | Open House | + | Residential | Residential | + | ResidentialIncome | Residential Income | + | ResidentialLease | Residential Lease | + | SavedSearch | Saved Search | + But "ClassName" MUST NOT contain any similar lookups + + @OtherPhone + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "OtherPhone" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + And the following synonyms for "ModificationTimestamp" MUST NOT exist in the metadata + | ModificationDateTime | + | DateTimeModified | + | ModDate | + | DateMod | + | UpdateDate | + | UpdateTimestamp | + + @OtherPhone + Scenario: OtherPhoneExt + When "OtherPhoneExt" exists in the "OtherPhone" metadata + Then "OtherPhoneExt" MUST be "String" data type + And "OtherPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @OtherPhone + Scenario: OtherPhoneKey + When "OtherPhoneKey" exists in the "OtherPhone" metadata + Then "OtherPhoneKey" MUST be "String" data type + And the following synonyms for "OtherPhoneKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "OtherPhoneKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OtherPhone + Scenario: OtherPhoneKeyNumeric + When "OtherPhoneKeyNumeric" exists in the "OtherPhone" metadata + Then "OtherPhoneKeyNumeric" MUST be "Integer" data type + + @OtherPhone + Scenario: OtherPhoneNumber + When "OtherPhoneNumber" exists in the "OtherPhone" metadata + Then "OtherPhoneNumber" MUST be "String" data type + And "OtherPhoneNumber" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @OtherPhone + Scenario: OtherPhoneType + When "OtherPhoneType" exists in the "OtherPhone" metadata + Then "OtherPhoneType" MUST be "Single Enumeration" data type + And the following synonyms for "OtherPhoneType" MUST NOT exist in the metadata + | PhoneType | + And "OtherPhoneType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Direct | Direct | + | Fax | Fax | + | First | First | + | Home | Home | + | Mobile | Mobile | + | Modem | Modem | + | Office | Office | + | Pager | Pager | + | Preferred | Preferred | + | Second | Second | + | Sms | SMS | + | Third | Third | + | TollFree | Toll Free | + | Voicemail | Voicemail | + But "OtherPhoneType" MUST NOT contain any similar lookups + + @OtherPhone + Scenario: ResourceName + When "ResourceName" exists in the "OtherPhone" metadata + Then "ResourceName" MUST be "Single Enumeration" data type + And "ResourceName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Contacts | Contacts | + | Member | Member | + | Office | Office | + | Property | Property | + But "ResourceName" MUST NOT contain any similar lookups + + @OtherPhone + Scenario: ResourceRecordID + When "ResourceRecordID" exists in the "OtherPhone" metadata + Then "ResourceRecordID" MUST be "String" data type + And the following synonyms for "ResourceRecordID" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + | AgentID | + | OfficeID | + | ContactID | + And "ResourceRecordID" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OtherPhone + Scenario: ResourceRecordKey + When "ResourceRecordKey" exists in the "OtherPhone" metadata + Then "ResourceRecordKey" MUST be "String" data type + And the following synonyms for "ResourceRecordKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ResourceRecordKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OtherPhone + Scenario: ResourceRecordKeyNumeric + When "ResourceRecordKeyNumeric" exists in the "OtherPhone" metadata + Then "ResourceRecordKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ResourceRecordKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/ouid.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/ouid.feature new file mode 100644 index 00000000..95d2515a --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/ouid.feature @@ -0,0 +1,689 @@ +# This file was autogenerated on: 20201023121019795 +Feature: OUID + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @OUID + Scenario: ChangedByMemberID + When "ChangedByMemberID" exists in the "OUID" metadata + Then "ChangedByMemberID" MUST be "String" data type + And the following synonyms for "ChangedByMemberID" MUST NOT exist in the metadata + | ChangedByAgentID | + And "ChangedByMemberID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @OUID + Scenario: ChangedByMemberKey + When "ChangedByMemberKey" exists in the "OUID" metadata + Then "ChangedByMemberKey" MUST be "String" data type + And the following synonyms for "ChangedByMemberKey" MUST NOT exist in the metadata + | ChangedByAgentKey | + And "ChangedByMemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OUID + Scenario: ChangedByMemberKeyNumeric + When "ChangedByMemberKeyNumeric" exists in the "OUID" metadata + Then "ChangedByMemberKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ChangedByMemberKeyNumeric" MUST NOT exist in the metadata + | ChangedByAgentKeyNumeric | + + @OUID + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "OUID" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @OUID + Scenario: OrganizationAOR + When "OrganizationAOR" exists in the "OUID" metadata + Then "OrganizationAOR" MUST be "Single Enumeration" data type + + @OUID + Scenario: OrganizationAddress1 + When "OrganizationAddress1" exists in the "OUID" metadata + Then "OrganizationAddress1" MUST be "String" data type + And "OrganizationAddress1" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OUID + Scenario: OrganizationAddress2 + When "OrganizationAddress2" exists in the "OUID" metadata + Then "OrganizationAddress2" MUST be "String" data type + And "OrganizationAddress2" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OUID + Scenario: OrganizationAorOuid + When "OrganizationAorOuid" exists in the "OUID" metadata + Then "OrganizationAorOuid" MUST be "String" data type + And "OrganizationAorOuid" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @OUID + Scenario: OrganizationAorOuidKey + When "OrganizationAorOuidKey" exists in the "OUID" metadata + Then "OrganizationAorOuidKey" MUST be "String" data type + And "OrganizationAorOuidKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OUID + Scenario: OrganizationAorOuidKeyNumeric + When "OrganizationAorOuidKeyNumeric" exists in the "OUID" metadata + Then "OrganizationAorOuidKeyNumeric" MUST be "Integer" data type + + @OUID + Scenario: OrganizationCarrierRoute + When "OrganizationCarrierRoute" exists in the "OUID" metadata + Then "OrganizationCarrierRoute" MUST be "String" data type + And the following synonyms for "OrganizationCarrierRoute" MUST NOT exist in the metadata + | RR | + | CR | + And "OrganizationCarrierRoute" length SHOULD be equal to the RESO Suggested Max Length of 9 + + @OUID + Scenario: OrganizationCity + When "OrganizationCity" exists in the "OUID" metadata + Then "OrganizationCity" MUST be "String" data type + And "OrganizationCity" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OUID + Scenario: OrganizationComments + When "OrganizationComments" exists in the "OUID" metadata + Then "OrganizationComments" MUST be "String" data type + And "OrganizationComments" length SHOULD be equal to the RESO Suggested Max Length of 500 + + @OUID + Scenario: OrganizationContactEmail + When "OrganizationContactEmail" exists in the "OUID" metadata + Then "OrganizationContactEmail" MUST be "String" data type + And "OrganizationContactEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @OUID + Scenario: OrganizationContactFax + When "OrganizationContactFax" exists in the "OUID" metadata + Then "OrganizationContactFax" MUST be "String" data type + And "OrganizationContactFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @OUID + Scenario: OrganizationContactFirstName + When "OrganizationContactFirstName" exists in the "OUID" metadata + Then "OrganizationContactFirstName" MUST be "String" data type + And "OrganizationContactFirstName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OUID + Scenario: OrganizationContactFullName + When "OrganizationContactFullName" exists in the "OUID" metadata + Then "OrganizationContactFullName" MUST be "String" data type + And "OrganizationContactFullName" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @OUID + Scenario: OrganizationContactJobTitle + When "OrganizationContactJobTitle" exists in the "OUID" metadata + Then "OrganizationContactJobTitle" MUST be "String" data type + And "OrganizationContactJobTitle" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OUID + Scenario: OrganizationContactLastName + When "OrganizationContactLastName" exists in the "OUID" metadata + Then "OrganizationContactLastName" MUST be "String" data type + And "OrganizationContactLastName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OUID + Scenario: OrganizationContactMiddleName + When "OrganizationContactMiddleName" exists in the "OUID" metadata + Then "OrganizationContactMiddleName" MUST be "String" data type + And "OrganizationContactMiddleName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OUID + Scenario: OrganizationContactNamePrefix + When "OrganizationContactNamePrefix" exists in the "OUID" metadata + Then "OrganizationContactNamePrefix" MUST be "String" data type + And the following synonyms for "OrganizationContactNamePrefix" MUST NOT exist in the metadata + | Salutation | + | Title | + And "OrganizationContactNamePrefix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @OUID + Scenario: OrganizationContactNameSuffix + When "OrganizationContactNameSuffix" exists in the "OUID" metadata + Then "OrganizationContactNameSuffix" MUST be "String" data type + And "OrganizationContactNameSuffix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @OUID + Scenario: OrganizationContactPhone + When "OrganizationContactPhone" exists in the "OUID" metadata + Then "OrganizationContactPhone" MUST be "String" data type + And "OrganizationContactPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @OUID + Scenario: OrganizationContactPhoneExt + When "OrganizationContactPhoneExt" exists in the "OUID" metadata + Then "OrganizationContactPhoneExt" MUST be "String" data type + And "OrganizationContactPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @OUID + Scenario: OrganizationCountry + When "OrganizationCountry" exists in the "OUID" metadata + Then "OrganizationCountry" MUST be "Single Enumeration" data type + And "OrganizationCountry" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AD | AD | + | AE | AE | + | AF | AF | + | AG | AG | + | AI | AI | + | AL | AL | + | AM | AM | + | AN | AN | + | AO | AO | + | AQ | AQ | + | AR | AR | + | AS | AS | + | AT | AT | + | AU | AU | + | AW | AW | + | AX | AX | + | AZ | AZ | + | BA | BA | + | BB | BB | + | BD | BD | + | BE | BE | + | BF | BF | + | BG | BG | + | BH | BH | + | BI | BI | + | BJ | BJ | + | BL | BL | + | BM | BM | + | BN | BN | + | BO | BO | + | BR | BR | + | BS | BS | + | BT | BT | + | BV | BV | + | BW | BW | + | BY | BY | + | BZ | BZ | + | CA | CA | + | CC | CC | + | CD | CD | + | CF | CF | + | CG | CG | + | CH | CH | + | CI | CI | + | CK | CK | + | CL | CL | + | CM | CM | + | CN | CN | + | CO | CO | + | CR | CR | + | CU | CU | + | CV | CV | + | CX | CX | + | CY | CY | + | CZ | CZ | + | DE | DE | + | DJ | DJ | + | DK | DK | + | DM | DM | + | DO | DO | + | DZ | DZ | + | EC | EC | + | EE | EE | + | EG | EG | + | EH | EH | + | ER | ER | + | ES | ES | + | ET | ET | + | FI | FI | + | FJ | FJ | + | FK | FK | + | FM | FM | + | FO | FO | + | FR | FR | + | GA | GA | + | GB | GB | + | GD | GD | + | GE | GE | + | GF | GF | + | GG | GG | + | GH | GH | + | GI | GI | + | GL | GL | + | GM | GM | + | GN | GN | + | GP | GP | + | GQ | GQ | + | GR | GR | + | GS | GS | + | GT | GT | + | GU | GU | + | GW | GW | + | GY | GY | + | HK | HK | + | HM | HM | + | HN | HN | + | HR | HR | + | HT | HT | + | HU | HU | + | ID | ID | + | IE | IE | + | IL | IL | + | IM | IM | + | IN | IN | + | IO | IO | + | IQ | IQ | + | IR | IR | + | IS | IS | + | IT | IT | + | JE | JE | + | JM | JM | + | JO | JO | + | JP | JP | + | KE | KE | + | KG | KG | + | KH | KH | + | KI | KI | + | KM | KM | + | KN | KN | + | KP | KP | + | KR | KR | + | KW | KW | + | KY | KY | + | KZ | KZ | + | LA | LA | + | LB | LB | + | LC | LC | + | LI | LI | + | LK | LK | + | LR | LR | + | LS | LS | + | LT | LT | + | LU | LU | + | LV | LV | + | LY | LY | + | MA | MA | + | MC | MC | + | MD | MD | + | ME | ME | + | MF | MF | + | MG | MG | + | MH | MH | + | MK | MK | + | ML | ML | + | MM | MM | + | MN | MN | + | MO | MO | + | MP | MP | + | MQ | MQ | + | MR | MR | + | MS | MS | + | MT | MT | + | MU | MU | + | MV | MV | + | MW | MW | + | MX | MX | + | MY | MY | + | MZ | MZ | + | NA | NA | + | NC | NC | + | NE | NE | + | NF | NF | + | NG | NG | + | NI | NI | + | NL | NL | + | NP | NP | + | NR | NR | + | NU | NU | + | NZ | NZ | + | OM | OM | + | OT | OT | + | PA | PA | + | PE | PE | + | PF | PF | + | PG | PG | + | PH | PH | + | PK | PK | + | PL | PL | + | PM | PM | + | PN | PN | + | PR | PR | + | PS | PS | + | PT | PT | + | PW | PW | + | PY | PY | + | QA | QA | + | RE | RE | + | RO | RO | + | RS | RS | + | RU | RU | + | RW | RW | + | SA | SA | + | SB | SB | + | SC | SC | + | SD | SD | + | SE | SE | + | SG | SG | + | SH | SH | + | SI | SI | + | SJ | SJ | + | SK | SK | + | SL | SL | + | SM | SM | + | SN | SN | + | SO | SO | + | SR | SR | + | ST | ST | + | SV | SV | + | SY | SY | + | SZ | SZ | + | TC | TC | + | TD | TD | + | TF | TF | + | TG | TG | + | TH | TH | + | TJ | TJ | + | TK | TK | + | TL | TL | + | TM | TM | + | TN | TN | + | TO | TO | + | TR | TR | + | TT | TT | + | TV | TV | + | TW | TW | + | TZ | TZ | + | UA | UA | + | UG | UG | + | UM | UM | + | US | US | + | UY | UY | + | UZ | UZ | + | VA | VA | + | VC | VC | + | VE | VE | + | VG | VG | + | VI | VI | + | VN | VN | + | VU | VU | + | WF | WF | + | WS | WS | + | YE | YE | + | YT | YT | + | ZA | ZA | + | ZM | ZM | + | ZW | ZW | + But "OrganizationCountry" MUST NOT contain any similar lookups + + @OUID + Scenario: OrganizationCountyOrParish + When "OrganizationCountyOrParish" exists in the "OUID" metadata + Then "OrganizationCountyOrParish" MUST be "Single Enumeration" data type + And the following synonyms for "OrganizationCountyOrParish" MUST NOT exist in the metadata + | County | + + @OUID + Scenario: OrganizationMemberCount + When "OrganizationMemberCount" exists in the "OUID" metadata + Then "OrganizationMemberCount" MUST be "Integer" data type + And the following synonyms for "OrganizationMemberCount" MUST NOT exist in the metadata + | OrganizationAgentCount | + + @OUID + Scenario: OrganizationMlsCode + When "OrganizationMlsCode" exists in the "OUID" metadata + Then "OrganizationMlsCode" MUST be "String" data type + And "OrganizationMlsCode" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @OUID + Scenario: OrganizationMlsVendorName + When "OrganizationMlsVendorName" exists in the "OUID" metadata + Then "OrganizationMlsVendorName" MUST be "String" data type + And "OrganizationMlsVendorName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OUID + Scenario: OrganizationMlsVendorOuid + When "OrganizationMlsVendorOuid" exists in the "OUID" metadata + Then "OrganizationMlsVendorOuid" MUST be "String" data type + And "OrganizationMlsVendorOuid" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @OUID + Scenario: OrganizationName + When "OrganizationName" exists in the "OUID" metadata + Then "OrganizationName" MUST be "String" data type + And "OrganizationName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OUID + Scenario: OrganizationNationalAssociationId + When "OrganizationNationalAssociationId" exists in the "OUID" metadata + Then "OrganizationNationalAssociationId" MUST be "String" data type + And "OrganizationNationalAssociationId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @OUID + Scenario: OrganizationPostalCode + When "OrganizationPostalCode" exists in the "OUID" metadata + Then "OrganizationPostalCode" MUST be "String" data type + And "OrganizationPostalCode" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @OUID + Scenario: OrganizationPostalCodePlus4 + When "OrganizationPostalCodePlus4" exists in the "OUID" metadata + Then "OrganizationPostalCodePlus4" MUST be "String" data type + And "OrganizationPostalCodePlus4" length SHOULD be equal to the RESO Suggested Max Length of 4 + + @OUID + Scenario: OrganizationSocialMediaType + When "OrganizationSocialMediaType" exists in the "OUID" metadata + Then "OrganizationSocialMediaType" MUST be "Single Enumeration" data type + And "OrganizationSocialMediaType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Blog | Blog | + | Digg | Digg | + | Facebook | Facebook | + | FacebookMessenger | Facebook Messenger | + | Googleplus | GooglePlus | + | iMessage | iMessage | + | Instagram | Instagram | + | Linkedin | LinkedIn | + | Pinterest | Pinterest | + | Reddit | Reddit | + | Slack | Slack | + | Snapchat | Snapchat | + | Stumbleupon | StumbleUpon | + | Tumblr | Tumblr | + | Twitter | Twitter | + | Website | Website | + | Youtube | YouTube | + But "OrganizationSocialMediaType" MUST NOT contain any similar lookups + + @OUID + Scenario: OrganizationStateLicense + When "OrganizationStateLicense" exists in the "OUID" metadata + Then "OrganizationStateLicense" MUST be "String" data type + And "OrganizationStateLicense" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @OUID + Scenario: OrganizationStateLicenseState + When "OrganizationStateLicenseState" exists in the "OUID" metadata + Then "OrganizationStateLicenseState" MUST be "Single Enumeration" data type + And "OrganizationStateLicenseState" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "OrganizationStateLicenseState" MUST NOT contain any similar lookups + + @OUID + Scenario: OrganizationStateOrProvince + When "OrganizationStateOrProvince" exists in the "OUID" metadata + Then "OrganizationStateOrProvince" MUST be "Single Enumeration" data type + And "OrganizationStateOrProvince" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "OrganizationStateOrProvince" MUST NOT contain any similar lookups + + @OUID + Scenario: OrganizationStatus + When "OrganizationStatus" exists in the "OUID" metadata + Then "OrganizationStatus" MUST be "Boolean" data type + + @OUID + Scenario: OrganizationStatusChangeTimestamp + When "OrganizationStatusChangeTimestamp" exists in the "OUID" metadata + Then "OrganizationStatusChangeTimestamp" MUST be "Timestamp" data type + + @OUID + Scenario: OrganizationType + When "OrganizationType" exists in the "OUID" metadata + Then "OrganizationType" MUST be "Single Enumeration" data type + + @OUID + Scenario: OrganizationUniqueId + When "OrganizationUniqueId" exists in the "OUID" metadata + Then "OrganizationUniqueId" MUST be "String" data type + And "OrganizationUniqueId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @OUID + Scenario: OrganizationUniqueIdKey + When "OrganizationUniqueIdKey" exists in the "OUID" metadata + Then "OrganizationUniqueIdKey" MUST be "String" data type + And "OrganizationUniqueIdKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @OUID + Scenario: OrganizationUniqueIdKeyNumeric + When "OrganizationUniqueIdKeyNumeric" exists in the "OUID" metadata + Then "OrganizationUniqueIdKeyNumeric" MUST be "Integer" data type + + @OUID + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "OUID" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/property.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/property.feature new file mode 100644 index 00000000..9767249b --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/property.feature @@ -0,0 +1,6818 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Property + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: AboveGradeFinishedArea + When "AboveGradeFinishedArea" exists in the "Property" metadata + Then "AboveGradeFinishedArea" MUST be "Decimal" data type + And "AboveGradeFinishedArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "AboveGradeFinishedArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: AboveGradeFinishedAreaSource + When "AboveGradeFinishedAreaSource" exists in the "Property" metadata + Then "AboveGradeFinishedAreaSource" MUST be "Single Enumeration" data type + And "AboveGradeFinishedAreaSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appraiser | Appraiser | + | Assessor | Assessor | + | Builder | Builder | + | Estimated | Estimated | + | Other | Other | + | Owner | Owner | + | Plans | Plans | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + But "AboveGradeFinishedAreaSource" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: AboveGradeFinishedAreaUnits + When "AboveGradeFinishedAreaUnits" exists in the "Property" metadata + Then "AboveGradeFinishedAreaUnits" MUST be "Single Enumeration" data type + And "AboveGradeFinishedAreaUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | SquareFeet | Square Feet | + | SquareMeters | Square Meters | + But "AboveGradeFinishedAreaUnits" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: AccessCode + When "AccessCode" exists in the "Property" metadata + Then "AccessCode" MUST be "String" data type + And the following synonyms for "AccessCode" MUST NOT exist in the metadata + | GateCode | + And "AccessCode" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: AccessibilityFeatures + When "AccessibilityFeatures" exists in the "Property" metadata + Then "AccessibilityFeatures" MUST be "Multiple Enumeration" data type + And "AccessibilityFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AccessibleApproachWithRamp | Accessible Approach with Ramp | + | AccessibleBedroom | Accessible Bedroom | + | AccessibleCentralLivingArea | Accessible Central Living Area | + | AccessibleClosets | Accessible Closets | + | AccessibleCommonArea | Accessible Common Area | + | AccessibleDoors | Accessible Doors | + | AccessibleElectricalAndEnvironmentalControls | Accessible Electrical and Environmental Controls | + | AccessibleElevatorInstalled | Accessible Elevator Installed | + | AccessibleEntrance | Accessible Entrance | + | AccessibleForHearingImpairment | Accessible for Hearing-Impairment | + | AccessibleFullBath | Accessible Full Bath | + | AccessibleHallways | Accessible Hallway(s) | + | AccessibleKitchen | Accessible Kitchen | + | AccessibleKitchenAppliances | Accessible Kitchen Appliances | + | AccessibleStairway | Accessible Stairway | + | AccessibleWasherDryer | Accessible Washer/Dryer | + | AdaptableBathroomWalls | Adaptable Bathroom Walls | + | AdaptableForElevator | Adaptable For Elevator | + | CeilingTrack | Ceiling Track | + | CentralLivingArea | Central Living Area | + | CommonArea | Common Area | + | CustomizedWheelchairAccessible | Customized Wheelchair Accessible | + | ElectronicEnvironmentalControls | Electronic Environmental Controls | + | EnhancedAccessible | Enhanced Accessible | + | ExteriorWheelchairLift | Exterior Wheelchair Lift | + | GripAccessibleFeatures | Grip-Accessible Features | + | ReinforcedFloors | Reinforced Floors | + | SafeEmergencyEgressFromHome | Safe Emergency Egress from Home | + | SmartTechnology | Smart Technology | + | StairLift | Stair Lift | + | StandbyGenerator | Standby Generator | + | TherapeuticWhirlpool | Therapeutic Whirlpool | + | Visitable | Visitable | + | VisitorBathroom | Visitor Bathroom | + | WalkerAccessibleStairs | Walker-Accessible Stairs | + But "AccessibilityFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: AdditionalParcelsDescription + When "AdditionalParcelsDescription" exists in the "Property" metadata + Then "AdditionalParcelsDescription" MUST be "String" data type + And "AdditionalParcelsDescription" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: AdditionalParcelsYN + When "AdditionalParcelsYN" exists in the "Property" metadata + Then "AdditionalParcelsYN" MUST be "Boolean" data type + + @Property @COMS @COML + Scenario: AnchorsCoTenants + When "AnchorsCoTenants" exists in the "Property" metadata + Then "AnchorsCoTenants" MUST be "String" data type + And "AnchorsCoTenants" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: Appliances + When "Appliances" exists in the "Property" metadata + Then "Appliances" MUST be "Multiple Enumeration" data type + And "Appliances" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BarFridge | Bar Fridge | + | BuiltInElectricOven | Built-In Electric Oven | + | BuiltInElectricRange | Built-In Electric Range | + | BuiltInFreezer | Built-In Freezer | + | BuiltInGasOven | Built-In Gas Oven | + | BuiltInGasRange | Built-In Gas Range | + | BuiltInRange | Built-In Range | + | BuiltInRefrigerator | Built-In Refrigerator | + | ConvectionOven | Convection Oven | + | Cooktop | Cooktop | + | Dishwasher | Dishwasher | + | Disposal | Disposal | + | DoubleOven | Double Oven | + | DownDraft | Down Draft | + | Dryer | Dryer | + | ElectricCooktop | Electric Cooktop | + | ElectricOven | Electric Oven | + | ElectricRange | Electric Range | + | ElectricWaterHeater | Electric Water Heater | + | EnergyStarQualifiedAppliances | ENERGY STAR Qualified Appliances | + | EnergyStarQualifiedDishwasher | ENERGY STAR Qualified Dishwasher | + | EnergyStarQualifiedDryer | ENERGY STAR Qualified Dryer | + | EnergyStarQualifiedFreezer | ENERGY STAR Qualified Freezer | + | EnergyStarQualifiedRefrigerator | ENERGY STAR Qualified Refrigerator | + | EnergyStarQualifiedWasher | ENERGY STAR Qualified Washer | + | EnergyStarQualifiedWaterHeater | ENERGY STAR Qualified Water Heater | + | ExhaustFan | Exhaust Fan | + | FreeStandingElectricOven | Free-Standing Electric Oven | + | FreeStandingElectricRange | Free-Standing Electric Range | + | FreeStandingFreezer | Free-Standing Freezer | + | FreeStandingGasOven | Free-Standing Gas Oven | + | FreeStandingGasRange | Free-Standing Gas Range | + | FreeStandingRange | Free-Standing Range | + | FreeStandingRefrigerator | Free-Standing Refrigerator | + | Freezer | Freezer | + | GasCooktop | Gas Cooktop | + | GasOven | Gas Oven | + | GasRange | Gas Range | + | GasWaterHeater | Gas Water Heater | + | Humidifier | Humidifier | + | IceMaker | Ice Maker | + | IndoorGrill | Indoor Grill | + | InductionCooktop | Induction Cooktop | + | InstantHotWater | Instant Hot Water | + | Microwave | Microwave | + | None | None | + | Other | Other | + | Oven | Oven | + | PlumbedForIceMaker | Plumbed For Ice Maker | + | PortableDishwasher | Portable Dishwasher | + | PropaneCooktop | Propane Cooktop | + | Range | Range | + | RangeHood | Range Hood | + | Refrigerator | Refrigerator | + | SelfCleaningOven | Self Cleaning Oven | + | SolarHotWater | Solar Hot Water | + | StainlessSteelAppliances | Stainless Steel Appliance(s) | + | TanklessWaterHeater | Tankless Water Heater | + | TrashCompactor | Trash Compactor | + | VentedExhaustFan | Vented Exhaust Fan | + | WarmingDrawer | Warming Drawer | + | Washer | Washer | + | WasherDryer | Washer/Dryer | + | WasherDryerStacked | Washer/Dryer Stacked | + | WaterHeater | Water Heater | + | WaterPurifier | Water Purifier | + | WaterPurifierOwned | Water Purifier Owned | + | WaterPurifierRented | Water Purifier Rented | + | WaterSoftener | Water Softener | + | WaterSoftenerOwned | Water Softener Owned | + | WaterSoftenerRented | Water Softener Rented | + | WineCooler | Wine Cooler | + | WineRefrigerator | Wine Refrigerator | + But "Appliances" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: ArchitecturalStyle + When "ArchitecturalStyle" exists in the "Property" metadata + Then "ArchitecturalStyle" MUST be "Multiple Enumeration" data type + And the following synonyms for "ArchitecturalStyle" MUST NOT exist in the metadata + | Style | + + @Property @RESI @RLSE @RINC @LAND @MOBI @IDX + Scenario: AssociationAmenities + When "AssociationAmenities" exists in the "Property" metadata + Then "AssociationAmenities" MUST be "Multiple Enumeration" data type + And the following synonyms for "AssociationAmenities" MUST NOT exist in the metadata + | AssociationRules | + | AssociationInfo | + | HOAAmenities | + And "AssociationAmenities" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AirportRunway | Airport/Runway | + | Barbecue | Barbecue | + | BasketballCourt | Basketball Court | + | BeachAccess | Beach Access | + | BeachRights | Beach Rights | + | BilliardRoom | Billiard Room | + | BoatDock | Boat Dock | + | Boating | Boating | + | BoatSlip | Boat Slip | + | Cabana | Cabana | + | CableTv | Cable TV | + | CarWashArea | Car Wash Area | + | Clubhouse | Clubhouse | + | CoinLaundry | Coin Laundry | + | Concierge | Concierge | + | DayCare | Day Care | + | DogPark | Dog Park | + | DryDock | Dry Dock | + | Electricity | Electricity | + | Elevators | Elevator(s) | + | ExerciseCourse | Exercise Course | + | FitnessCenter | Fitness Center | + | GameCourtExterior | Game Court Exterior | + | GameCourtInterior | Game Court Interior | + | GameRoom | Game Room | + | Gas | Gas | + | Gated | Gated | + | GolfCourse | Golf Course | + | HotWater | Hot Water | + | IndoorPool | Indoor Pool | + | Insurance | Insurance | + | JoggingPath | Jogging Path | + | Landscaping | Landscaping | + | Laundry | Laundry | + | MaidService | Maid service | + | Maintenance | Maintenance | + | MaintenanceGrounds | Maintenance Grounds | + | MaintenanceStructure | Maintenance Structure | + | Management | Management | + | Marina | Marina | + | MeetingRoom | Meeting Room | + | None | None | + | Other | Other | + | Park | Park | + | Parking | Parking | + | PartyRoom | Party Room | + | PicnicArea | Picnic Area | + | Playground | Playground | + | PondSeasonal | Pond Seasonal | + | PondYearRound | Pond Year Round | + | Pool | Pool | + | PoweredBoatsAllowed | Powered Boats Allowed | + | Racquetball | Racquetball | + | RecreationFacilities | Recreation Facilities | + | RecreationRoom | Recreation Room | + | RoofDeck | Roof Deck | + | RvBoatStorage | RV/Boat Storage | + | RvParking | RV Parking | + | Sauna | Sauna | + | Security | Security | + | ServiceElevators | Service Elevator(s) | + | ShuffleboardCourt | Shuffleboard Court | + | SkiAccessible | Ski Accessible | + | SnowRemoval | Snow Removal | + | SpaHotTub | Spa/Hot Tub | + | SportCourt | Sport Court | + | Stables | Stable(s) | + | Storage | Storage | + | StreamSeasonal | Stream Seasonal | + | StreamYearRound | Stream Year Round | + | Taxes | Taxes | + | TennisCourts | Tennis Court(s) | + | Trails | Trail(s) | + | Trash | Trash | + | Water | Water | + | WorkshopArea | Workshop Area | + But "AssociationAmenities" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @IDX + Scenario: AssociationFee + When "AssociationFee" exists in the "Property" metadata + Then "AssociationFee" MUST be "Decimal" data type + And the following synonyms for "AssociationFee" MUST NOT exist in the metadata + | HOAFee | + | CAMCharge | + | CondoCharge | + And "AssociationFee" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "AssociationFee" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI + Scenario: AssociationFee2 + When "AssociationFee2" exists in the "Property" metadata + Then "AssociationFee2" MUST be "Decimal" data type + And the following synonyms for "AssociationFee2" MUST NOT exist in the metadata + | HOAFee2 | + And "AssociationFee2" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "AssociationFee2" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI + Scenario: AssociationFee2Frequency + When "AssociationFee2Frequency" exists in the "Property" metadata + Then "AssociationFee2Frequency" MUST be "Single Enumeration" data type + And the following synonyms for "AssociationFee2Frequency" MUST NOT exist in the metadata + | HOAFeeFrequency2 | + And "AssociationFee2Frequency" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Annually | Annually | + | BiMonthly | Bi-Monthly | + | BiWeekly | Bi-Weekly | + | Daily | Daily | + | Monthly | Monthly | + | OneTime | One Time | + | Quarterly | Quarterly | + | Seasonal | Seasonal | + | SemiAnnually | Semi-Annually | + | SemiMonthly | Semi-Monthly | + | Weekly | Weekly | + But "AssociationFee2Frequency" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @IDX + Scenario: AssociationFeeFrequency + When "AssociationFeeFrequency" exists in the "Property" metadata + Then "AssociationFeeFrequency" MUST be "Single Enumeration" data type + And the following synonyms for "AssociationFeeFrequency" MUST NOT exist in the metadata + | HOAFeeFrequency | + And "AssociationFeeFrequency" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Annually | Annually | + | BiMonthly | Bi-Monthly | + | BiWeekly | Bi-Weekly | + | Daily | Daily | + | Monthly | Monthly | + | OneTime | One Time | + | Quarterly | Quarterly | + | Seasonal | Seasonal | + | SemiAnnually | Semi-Annually | + | SemiMonthly | Semi-Monthly | + | Weekly | Weekly | + But "AssociationFeeFrequency" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @IDX + Scenario: AssociationFeeIncludes + When "AssociationFeeIncludes" exists in the "Property" metadata + Then "AssociationFeeIncludes" MUST be "Multiple Enumeration" data type + And the following synonyms for "AssociationFeeIncludes" MUST NOT exist in the metadata + | HOAFeeIncludes | + And "AssociationFeeIncludes" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CableTv | Cable TV | + | EarthquakeInsurance | Earthquake Insurance | + | Electricity | Electricity | + | Gas | Gas | + | Insurance | Insurance | + | Internet | Internet | + | MaintenanceGrounds | Maintenance Grounds | + | MaintenanceStructure | Maintenance Structure | + | PestControl | Pest Control | + | Security | Security | + | Sewer | Sewer | + | SnowRemoval | Snow Removal | + | Trash | Trash | + | Utilities | Utilities | + | Water | Water | + But "AssociationFeeIncludes" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI + Scenario: AssociationName + When "AssociationName" exists in the "Property" metadata + Then "AssociationName" MUST be "String" data type + And the following synonyms for "AssociationName" MUST NOT exist in the metadata + | HOAName | + And "AssociationName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI + Scenario: AssociationName2 + When "AssociationName2" exists in the "Property" metadata + Then "AssociationName2" MUST be "String" data type + And the following synonyms for "AssociationName2" MUST NOT exist in the metadata + | HOAName2 | + And "AssociationName2" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI + Scenario: AssociationPhone + When "AssociationPhone" exists in the "Property" metadata + Then "AssociationPhone" MUST be "String" data type + And the following synonyms for "AssociationPhone" MUST NOT exist in the metadata + | HOAPhone | + And "AssociationPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI + Scenario: AssociationPhone2 + When "AssociationPhone2" exists in the "Property" metadata + Then "AssociationPhone2" MUST be "String" data type + And the following synonyms for "AssociationPhone2" MUST NOT exist in the metadata + | HOAPhone2 | + And "AssociationPhone2" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @IDX + Scenario: AssociationYN + When "AssociationYN" exists in the "Property" metadata + Then "AssociationYN" MUST be "Boolean" data type + And the following synonyms for "AssociationYN" MUST NOT exist in the metadata + | HOAYN | + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: AttachedGarageYN + When "AttachedGarageYN" exists in the "Property" metadata + Then "AttachedGarageYN" MUST be "Boolean" data type + + @Property @RLSE @COMS @COML + Scenario: AvailabilityDate + When "AvailabilityDate" exists in the "Property" metadata + Then "AvailabilityDate" MUST be "Date" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: Basement + When "Basement" exists in the "Property" metadata + Then "Basement" MUST be "Multiple Enumeration" data type + And "Basement" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Apartment | Apartment | + | BathStubbed | Bath/Stubbed | + | Block | Block | + | Concrete | Concrete | + | CrawlSpace | Crawl Space | + | Daylight | Daylight | + | DirtFloor | Dirt Floor | + | ExteriorEntry | Exterior Entry | + | Finished | Finished | + | FrenchDrain | French Drain | + | Full | Full | + | InteriorEntry | Interior Entry | + | None | None | + | Other | Other | + | Partial | Partial | + | PartiallyFinished | Partially Finished | + | StorageSpace | Storage Space | + | SumpPump | Sump Pump | + | Unfinished | Unfinished | + | WalkOutAccess | Walk-Out Access | + | WalkUpAccess | Walk-Up Access | + But "Basement" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: BasementYN + When "BasementYN" exists in the "Property" metadata + Then "BasementYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: BathroomsFull + When "BathroomsFull" exists in the "Property" metadata + Then "BathroomsFull" MUST be "Integer" data type + And the following synonyms for "BathroomsFull" MUST NOT exist in the metadata + | FullBaths | + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: BathroomsHalf + When "BathroomsHalf" exists in the "Property" metadata + Then "BathroomsHalf" MUST be "Integer" data type + And the following synonyms for "BathroomsHalf" MUST NOT exist in the metadata + | HalfBaths | + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: BathroomsOneQuarter + When "BathroomsOneQuarter" exists in the "Property" metadata + Then "BathroomsOneQuarter" MUST be "Integer" data type + And the following synonyms for "BathroomsOneQuarter" MUST NOT exist in the metadata + | QuarterBaths | + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: BathroomsPartial + When "BathroomsPartial" exists in the "Property" metadata + Then "BathroomsPartial" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: BathroomsThreeQuarter + When "BathroomsThreeQuarter" exists in the "Property" metadata + Then "BathroomsThreeQuarter" MUST be "Integer" data type + And the following synonyms for "BathroomsThreeQuarter" MUST NOT exist in the metadata + | ThreeQuarterBaths | + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: BathroomsTotalInteger + When "BathroomsTotalInteger" exists in the "Property" metadata + Then "BathroomsTotalInteger" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: BedroomsPossible + When "BedroomsPossible" exists in the "Property" metadata + Then "BedroomsPossible" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: BedroomsTotal + When "BedroomsTotal" exists in the "Property" metadata + Then "BedroomsTotal" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: BelowGradeFinishedArea + When "BelowGradeFinishedArea" exists in the "Property" metadata + Then "BelowGradeFinishedArea" MUST be "Decimal" data type + And "BelowGradeFinishedArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "BelowGradeFinishedArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: BelowGradeFinishedAreaSource + When "BelowGradeFinishedAreaSource" exists in the "Property" metadata + Then "BelowGradeFinishedAreaSource" MUST be "Single Enumeration" data type + And "BelowGradeFinishedAreaSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appraiser | Appraiser | + | Assessor | Assessor | + | Builder | Builder | + | Estimated | Estimated | + | Other | Other | + | Owner | Owner | + | Plans | Plans | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + But "BelowGradeFinishedAreaSource" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: BelowGradeFinishedAreaUnits + When "BelowGradeFinishedAreaUnits" exists in the "Property" metadata + Then "BelowGradeFinishedAreaUnits" MUST be "Single Enumeration" data type + And "BelowGradeFinishedAreaUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | SquareFeet | Square Feet | + | SquareMeters | Square Meters | + But "BelowGradeFinishedAreaUnits" MUST NOT contain any similar lookups + + @Property @MOBI @IDX + Scenario: BodyType + When "BodyType" exists in the "Property" metadata + Then "BodyType" MUST be "Multiple Enumeration" data type + And "BodyType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | DoubleWide | Double Wide | + | Expando | Expando | + | Other | Other | + | QuadWide | Quad Wide | + | SeeRemarks | See Remarks | + | SingleWide | Single Wide | + | TripleWide | Triple Wide | + But "BodyType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @FARM + Scenario: BuilderModel + When "BuilderModel" exists in the "Property" metadata + Then "BuilderModel" MUST be "String" data type + And "BuilderModel" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: BuilderName + When "BuilderName" exists in the "Property" metadata + Then "BuilderName" MUST be "String" data type + And "BuilderName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: BuildingAreaSource + When "BuildingAreaSource" exists in the "Property" metadata + Then "BuildingAreaSource" MUST be "Single Enumeration" data type + And "BuildingAreaSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appraiser | Appraiser | + | Assessor | Assessor | + | Builder | Builder | + | Estimated | Estimated | + | Other | Other | + | Owner | Owner | + | Plans | Plans | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + But "BuildingAreaSource" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: BuildingAreaTotal + When "BuildingAreaTotal" exists in the "Property" metadata + Then "BuildingAreaTotal" MUST be "Decimal" data type + And "BuildingAreaTotal" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "BuildingAreaTotal" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: BuildingAreaUnits + When "BuildingAreaUnits" exists in the "Property" metadata + Then "BuildingAreaUnits" MUST be "Single Enumeration" data type + And "BuildingAreaUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | SquareFeet | Square Feet | + | SquareMeters | Square Meters | + But "BuildingAreaUnits" MUST NOT contain any similar lookups + + @Property @COMS @COML + Scenario: BuildingFeatures + When "BuildingFeatures" exists in the "Property" metadata + Then "BuildingFeatures" MUST be "Multiple Enumeration" data type + + @Property @COMS @COML + Scenario: BuildingName + When "BuildingName" exists in the "Property" metadata + Then "BuildingName" MUST be "String" data type + And "BuildingName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @BUSO + Scenario: BusinessName + When "BusinessName" exists in the "Property" metadata + Then "BusinessName" MUST be "String" data type + And "BusinessName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @COMS @COML @BUSO @IDX + Scenario: BusinessType + When "BusinessType" exists in the "Property" metadata + Then "BusinessType" MUST be "Multiple Enumeration" data type + And "BusinessType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Accounting | Accounting | + | AdministrativeAndSupport | Administrative and Support | + | Advertising | Advertising | + | Agriculture | Agriculture | + | AnimalGrooming | Animal Grooming | + | Appliances | Appliances | + | AquariumSupplies | Aquarium Supplies | + | ArtsAndEntertainment | Arts and Entertainment | + | Athletic | Athletic | + | AutoBody | Auto Body | + | AutoDealer | Auto Dealer | + | AutoGlass | Auto Glass | + | AutoParts | Auto Parts | + | AutoRentLease | Auto Rent/Lease | + | AutoRepairSpecialty | Auto Repair-Specialty | + | AutoService | Auto Service | + | AutoStereoAlarm | Auto Stereo/Alarm | + | AutoTires | Auto Tires | + | AutoWrecking | Auto Wrecking | + | Bakery | Bakery | + | BarberBeauty | Barber/Beauty | + | BarTavernLounge | Bar/Tavern/Lounge | + | BedAndBreakfast | Bed & Breakfast | + | BooksCardsStationary | Books/Cards/Stationary | + | Butcher | Butcher | + | Cabinets | Cabinets | + | CandyCookie | Candy/Cookie | + | CarpetTile | Carpet/Tile | + | CarWash | Car Wash | + | ChildCare | Child Care | + | Church | Church | + | Clothing | Clothing | + | Commercial | Commercial | + | Computer | Computer | + | ConstructionContractor | Construction/Contractor | + | Convalescent | Convalescent | + | ConvenienceStore | Convenience Store | + | DanceStudio | Dance Studio | + | Decorator | Decorator | + | DeliCatering | Deli/Catering | + | Dental | Dental | + | Distribution | Distribution | + | Doughnut | Doughnut | + | Drugstore | Drugstore | + | DryCleaner | Dry Cleaner | + | EducationSchool | Education/School | + | Electronics | Electronics | + | Employment | Employment | + | Farm | Farm | + | FastFood | Fast Food | + | Financial | Financial | + | Fitness | Fitness | + | FloristNursery | Florist/Nursery | + | FoodAndBeverage | Food & Beverage | + | ForestReserve | Forest Reserve | + | Franchise | Franchise | + | Furniture | Furniture | + | GasStation | Gas Station | + | GiftShop | Gift Shop | + | Grocery | Grocery | + | Hardware | Hardware | + | HealthFood | Health Food | + | HealthServices | Health Services | + | Hobby | Hobby | + | HomeCleaner | Home Cleaner | + | Hospitality | Hospitality | + | HotelMotel | Hotel/Motel | + | IceCreamFrozenYogurt | Ice Cream/Frozen Yogurt | + | Industrial | Industrial | + | Jewelry | Jewelry | + | Landscaping | Landscaping | + | Laundromat | Laundromat | + | LiquorStore | Liquor Store | + | Locksmith | Locksmith | + | Manufacturing | Manufacturing | + | Medical | Medical | + | Mixed | Mixed | + | MobileTrailerPark | Mobile/Trailer Park | + | Music | Music | + | NursingHome | Nursing Home | + | OfficeSupply | Office Supply | + | Other | Other | + | Paints | Paints | + | Parking | Parking | + | PetStore | Pet Store | + | Photographer | Photographer | + | Pizza | Pizza | + | Printing | Printing | + | ProfessionalOffice | Professional/Office | + | ProfessionalService | Professional Service | + | RealEstate | Real Estate | + | Recreation | Recreation | + | Rental | Rental | + | Residential | Residential | + | Restaurant | Restaurant | + | Retail | Retail | + | SaddleryHarness | Saddlery/Harness | + | SportingGoods | Sporting Goods | + | Storage | Storage | + | Toys | Toys | + | Transportation | Transportation | + | Travel | Travel | + | Upholstery | Upholstery | + | Utility | Utility | + | Variety | Variety | + | Video | Video | + | Wallpaper | Wallpaper | + | Warehouse | Warehouse | + | Wholesale | Wholesale | + But "BusinessType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgencyCompensation + When "BuyerAgencyCompensation" exists in the "Property" metadata + Then "BuyerAgencyCompensation" MUST be "String" data type + And the following synonyms for "BuyerAgencyCompensation" MUST NOT exist in the metadata + | SOComp | + | SellingOfficeCompensation | + | BuyerBrokerCompensation | + | SOC | + | Commission | + And "BuyerAgencyCompensation" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgencyCompensationType + When "BuyerAgencyCompensationType" exists in the "Property" metadata + Then "BuyerAgencyCompensationType" MUST be "Single Enumeration" data type + And the following synonyms for "BuyerAgencyCompensationType" MUST NOT exist in the metadata + | SOCompType | + | SellingOfficeCompensationType | + | BuyerBrokerCompensationType | + | SOCType | + | CommissionType | + And "BuyerAgencyCompensationType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Dollars | $ | + | Other | Other | + | Percent | % | + | SeeRemarks | See Remarks | + But "BuyerAgencyCompensationType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentAOR + When "BuyerAgentAOR" exists in the "Property" metadata + Then "BuyerAgentAOR" MUST be "Single Enumeration" data type + And the following synonyms for "BuyerAgentAOR" MUST NOT exist in the metadata + | BuyerMemberAOR | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentDesignation + When "BuyerAgentDesignation" exists in the "Property" metadata + Then "BuyerAgentDesignation" MUST be "Multiple Enumeration" data type + And the following synonyms for "BuyerAgentDesignation" MUST NOT exist in the metadata + | BuyerMemberDesignation | + And "BuyerAgentDesignation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AccreditedBuyersRepresentative | Accredited Buyer's Representative / ABR | + | AccreditedLandConsultant | Accredited Land Consultant / ALC | + | AtHomeWithDiversity | At Home With Diversity / AHWD | + | CertifiedCommercialInvestmentMember | Certified Commercial Investment Member / CCIM | + | CertifiedDistressedPropertyExpert | Certified Distressed Property Expert / CDPE | + | CertifiedInternationalPropertySpecialist | Certified International Property Specialist / CIPS | + | CertifiedPropertyManager | Certified Property Manager / CPM | + | CertifiedRealEstateBrokerageManager | Certified Real Estate Brokerage Manager / CRB | + | CertifiedRealEstateTeamSpecialist | Certified Real Estate Team Specialist / C-RETS | + | CertifiedResidentialSpecialist | Certified Residential Specialist / CRS | + | CounselorOfRealEstate | Counselor of Real Estate / CRE | + | ePRO | e-PRO | + | GeneralAccreditedAppraiser | General Accredited Appraiser / GAA | + | GraduateRealtorInstitute | Graduate, REALTOR Institute / GRI | + | MilitaryRelocationProfessional | Military Relocation Professional / MRP | + | NARsGreenDesignation | NAR's Green Designation / GREEN | + | PerformanceManagementNetwork | Performance Management Network / PMN | + | PricingStrategyAdvisor | Pricing Strategy Advisor / PSA | + | RealEstateNegotiationExpert | Real Estate Negotiation Expert / RENE | + | RealtorAssociationCertifiedExecutive | REALTOR Association Certified Executive / RCE | + | ResidentialAccreditedAppraiser | Residential Accredited Appraiser / RAA | + | ResortAndSecondHomePropertySpecialist | Resort & Second-Home Property Specialist / RSPS | + | SellerRepresentativeSpecialist | Seller Representative Specialist / SRS | + | SeniorsRealEstateSpecialist | Seniors Real Estate Specialist / SRES | + | ShortSalesAndForeclosureResource | Short Sales & Foreclosure Resource / SFR | + | SocietyOfIndustrialAndOfficeRealtors | Society of Industrial and Office REALTORS / SIOR | + | TransnationalReferralCertification | Transnational Referral Certification / TRC | + But "BuyerAgentDesignation" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentDirectPhone + When "BuyerAgentDirectPhone" exists in the "Property" metadata + Then "BuyerAgentDirectPhone" MUST be "String" data type + And the following synonyms for "BuyerAgentDirectPhone" MUST NOT exist in the metadata + | BuyerMemberDirectPhone | + And "BuyerAgentDirectPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentEmail + When "BuyerAgentEmail" exists in the "Property" metadata + Then "BuyerAgentEmail" MUST be "String" data type + And the following synonyms for "BuyerAgentEmail" MUST NOT exist in the metadata + | BuyerMemberEmail | + And "BuyerAgentEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentFax + When "BuyerAgentFax" exists in the "Property" metadata + Then "BuyerAgentFax" MUST be "String" data type + And the following synonyms for "BuyerAgentFax" MUST NOT exist in the metadata + | BuyerMemberFax | + And "BuyerAgentFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: BuyerAgentFirstName + When "BuyerAgentFirstName" exists in the "Property" metadata + Then "BuyerAgentFirstName" MUST be "String" data type + And the following synonyms for "BuyerAgentFirstName" MUST NOT exist in the metadata + | BuyerMemberFirstName | + And "BuyerAgentFirstName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: BuyerAgentFullName + When "BuyerAgentFullName" exists in the "Property" metadata + Then "BuyerAgentFullName" MUST be "String" data type + And the following synonyms for "BuyerAgentFullName" MUST NOT exist in the metadata + | BuyerMemberFullName | + And "BuyerAgentFullName" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentHomePhone + When "BuyerAgentHomePhone" exists in the "Property" metadata + Then "BuyerAgentHomePhone" MUST be "String" data type + And the following synonyms for "BuyerAgentHomePhone" MUST NOT exist in the metadata + | BuyerMemberHomePhone | + And "BuyerAgentHomePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentKey + When "BuyerAgentKey" exists in the "Property" metadata + Then "BuyerAgentKey" MUST be "String" data type + And the following synonyms for "BuyerAgentKey" MUST NOT exist in the metadata + | BuyerMemberKey | + And "BuyerAgentKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentKeyNumeric + When "BuyerAgentKeyNumeric" exists in the "Property" metadata + Then "BuyerAgentKeyNumeric" MUST be "Integer" data type + And the following synonyms for "BuyerAgentKeyNumeric" MUST NOT exist in the metadata + | BuyerMemberKeyNumeric | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: BuyerAgentLastName + When "BuyerAgentLastName" exists in the "Property" metadata + Then "BuyerAgentLastName" MUST be "String" data type + And the following synonyms for "BuyerAgentLastName" MUST NOT exist in the metadata + | BuyerMemberLastName | + And "BuyerAgentLastName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentMiddleName + When "BuyerAgentMiddleName" exists in the "Property" metadata + Then "BuyerAgentMiddleName" MUST be "String" data type + And the following synonyms for "BuyerAgentMiddleName" MUST NOT exist in the metadata + | BuyerMemberMiddleName | + And "BuyerAgentMiddleName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: BuyerAgentMlsId + When "BuyerAgentMlsId" exists in the "Property" metadata + Then "BuyerAgentMlsId" MUST be "String" data type + And the following synonyms for "BuyerAgentMlsId" MUST NOT exist in the metadata + | BuyerMemberMlsId | + And "BuyerAgentMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentMobilePhone + When "BuyerAgentMobilePhone" exists in the "Property" metadata + Then "BuyerAgentMobilePhone" MUST be "String" data type + And the following synonyms for "BuyerAgentMobilePhone" MUST NOT exist in the metadata + | BuyerMemberMobilePhone | + And "BuyerAgentMobilePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentNamePrefix + When "BuyerAgentNamePrefix" exists in the "Property" metadata + Then "BuyerAgentNamePrefix" MUST be "String" data type + And the following synonyms for "BuyerAgentNamePrefix" MUST NOT exist in the metadata + | BuyerMemberNamePrefix | + And "BuyerAgentNamePrefix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentNameSuffix + When "BuyerAgentNameSuffix" exists in the "Property" metadata + Then "BuyerAgentNameSuffix" MUST be "String" data type + And the following synonyms for "BuyerAgentNameSuffix" MUST NOT exist in the metadata + | BuyerMemberNameSuffix | + And "BuyerAgentNameSuffix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentOfficePhone + When "BuyerAgentOfficePhone" exists in the "Property" metadata + Then "BuyerAgentOfficePhone" MUST be "String" data type + And the following synonyms for "BuyerAgentOfficePhone" MUST NOT exist in the metadata + | BuyerMemberOfficePhone | + And "BuyerAgentOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentOfficePhoneExt + When "BuyerAgentOfficePhoneExt" exists in the "Property" metadata + Then "BuyerAgentOfficePhoneExt" MUST be "String" data type + And the following synonyms for "BuyerAgentOfficePhoneExt" MUST NOT exist in the metadata + | BuyerMemberOfficePhoneExt | + And "BuyerAgentOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentPager + When "BuyerAgentPager" exists in the "Property" metadata + Then "BuyerAgentPager" MUST be "String" data type + And the following synonyms for "BuyerAgentPager" MUST NOT exist in the metadata + | BuyerMemberPager | + And "BuyerAgentPager" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentPreferredPhone + When "BuyerAgentPreferredPhone" exists in the "Property" metadata + Then "BuyerAgentPreferredPhone" MUST be "String" data type + And the following synonyms for "BuyerAgentPreferredPhone" MUST NOT exist in the metadata + | BuyerMemberPreferredPhone | + And "BuyerAgentPreferredPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentPreferredPhoneExt + When "BuyerAgentPreferredPhoneExt" exists in the "Property" metadata + Then "BuyerAgentPreferredPhoneExt" MUST be "String" data type + And the following synonyms for "BuyerAgentPreferredPhoneExt" MUST NOT exist in the metadata + | BuyerMemberPreferredPhoneExt | + And "BuyerAgentPreferredPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentStateLicense + When "BuyerAgentStateLicense" exists in the "Property" metadata + Then "BuyerAgentStateLicense" MUST be "String" data type + And the following synonyms for "BuyerAgentStateLicense" MUST NOT exist in the metadata + | BuyerMemberStateLicense | + And "BuyerAgentStateLicense" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentTollFreePhone + When "BuyerAgentTollFreePhone" exists in the "Property" metadata + Then "BuyerAgentTollFreePhone" MUST be "String" data type + And the following synonyms for "BuyerAgentTollFreePhone" MUST NOT exist in the metadata + | BuyerMemberTollFreePhone | + And "BuyerAgentTollFreePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentURL + When "BuyerAgentURL" exists in the "Property" metadata + Then "BuyerAgentURL" MUST be "String" data type + And the following synonyms for "BuyerAgentURL" MUST NOT exist in the metadata + | BuyerMemberURL | + And "BuyerAgentURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentVoiceMail + When "BuyerAgentVoiceMail" exists in the "Property" metadata + Then "BuyerAgentVoiceMail" MUST be "String" data type + And the following synonyms for "BuyerAgentVoiceMail" MUST NOT exist in the metadata + | BuyerMembervoiceMail | + And "BuyerAgentVoiceMail" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerAgentVoiceMailExt + When "BuyerAgentVoiceMailExt" exists in the "Property" metadata + Then "BuyerAgentVoiceMailExt" MUST be "String" data type + And the following synonyms for "BuyerAgentVoiceMailExt" MUST NOT exist in the metadata + | BuyerMemberVoiceMailExt | + And "BuyerAgentVoiceMailExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerFinancing + When "BuyerFinancing" exists in the "Property" metadata + Then "BuyerFinancing" MUST be "Multiple Enumeration" data type + And "BuyerFinancing" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Assumed | Assumed | + | Cash | Cash | + | Contract | Contract | + | Conventional | Conventional | + | FHA | FHA | + | FHA203b | FHA 203(b) | + | FHA203k | FHA 203(k) | + | Other | Other | + | Private | Private | + | SellerFinancing | Seller Financing | + | TrustDeed | Trust Deed | + | USDA | USDA | + | VA | VA | + But "BuyerFinancing" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerOfficeAOR + When "BuyerOfficeAOR" exists in the "Property" metadata + Then "BuyerOfficeAOR" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerOfficeEmail + When "BuyerOfficeEmail" exists in the "Property" metadata + Then "BuyerOfficeEmail" MUST be "String" data type + And "BuyerOfficeEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerOfficeFax + When "BuyerOfficeFax" exists in the "Property" metadata + Then "BuyerOfficeFax" MUST be "String" data type + And "BuyerOfficeFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerOfficeKey + When "BuyerOfficeKey" exists in the "Property" metadata + Then "BuyerOfficeKey" MUST be "String" data type + And "BuyerOfficeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerOfficeKeyNumeric + When "BuyerOfficeKeyNumeric" exists in the "Property" metadata + Then "BuyerOfficeKeyNumeric" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: BuyerOfficeMlsId + When "BuyerOfficeMlsId" exists in the "Property" metadata + Then "BuyerOfficeMlsId" MUST be "String" data type + And "BuyerOfficeMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: BuyerOfficeName + When "BuyerOfficeName" exists in the "Property" metadata + Then "BuyerOfficeName" MUST be "String" data type + And "BuyerOfficeName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerOfficePhone + When "BuyerOfficePhone" exists in the "Property" metadata + Then "BuyerOfficePhone" MUST be "String" data type + And "BuyerOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerOfficePhoneExt + When "BuyerOfficePhoneExt" exists in the "Property" metadata + Then "BuyerOfficePhoneExt" MUST be "String" data type + And "BuyerOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerOfficeURL + When "BuyerOfficeURL" exists in the "Property" metadata + Then "BuyerOfficeURL" MUST be "String" data type + And "BuyerOfficeURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerTeamKey + When "BuyerTeamKey" exists in the "Property" metadata + Then "BuyerTeamKey" MUST be "String" data type + And "BuyerTeamKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerTeamKeyNumeric + When "BuyerTeamKeyNumeric" exists in the "Property" metadata + Then "BuyerTeamKeyNumeric" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: BuyerTeamName + When "BuyerTeamName" exists in the "Property" metadata + Then "BuyerTeamName" MUST be "String" data type + And "BuyerTeamName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RINC + Scenario: CableTvExpense + When "CableTvExpense" exists in the "Property" metadata + Then "CableTvExpense" MUST be "Decimal" data type + And "CableTvExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "CableTvExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CancellationDate + When "CancellationDate" exists in the "Property" metadata + Then "CancellationDate" MUST be "Date" data type + + @Property @RINC @COMS @COML + Scenario: CapRate + When "CapRate" exists in the "Property" metadata + Then "CapRate" MUST be "Decimal" data type + And the following synonyms for "CapRate" MUST NOT exist in the metadata + | CapitalizationRate | + And "CapRate" precision SHOULD be equal to the RESO Suggested Max Precision of 5 + And "CapRate" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: CarportSpaces + When "CarportSpaces" exists in the "Property" metadata + Then "CarportSpaces" MUST be "Decimal" data type + And "CarportSpaces" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "CarportSpaces" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: CarportYN + When "CarportYN" exists in the "Property" metadata + Then "CarportYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CarrierRoute + When "CarrierRoute" exists in the "Property" metadata + Then "CarrierRoute" MUST be "String" data type + And the following synonyms for "CarrierRoute" MUST NOT exist in the metadata + | RR | + | CR | + And "CarrierRoute" length SHOULD be equal to the RESO Suggested Max Length of 9 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: City + When "City" exists in the "Property" metadata + Then "City" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CityRegion + When "CityRegion" exists in the "Property" metadata + Then "CityRegion" MUST be "String" data type + And "CityRegion" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CloseDate + When "CloseDate" exists in the "Property" metadata + Then "CloseDate" MUST be "Date" data type + And the following synonyms for "CloseDate" MUST NOT exist in the metadata + | SoldDate | + | DateSold | + | COE | + | COEDate | + | DateLeased | + | DateRented | + | DateLeaseBegins | + | EffectiveLeaseDate | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ClosePrice + When "ClosePrice" exists in the "Property" metadata + Then "ClosePrice" MUST be "Decimal" data type + And the following synonyms for "ClosePrice" MUST NOT exist in the metadata + | SellingPrice | + | SoldPrice | + | SalePrice | + | PriceSold | + | LeasePrice | + | RentalPrice | + | PurchasePrice | + | CurrentPrice | + And "ClosePrice" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "ClosePrice" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentAOR + When "CoBuyerAgentAOR" exists in the "Property" metadata + Then "CoBuyerAgentAOR" MUST be "Single Enumeration" data type + And the following synonyms for "CoBuyerAgentAOR" MUST NOT exist in the metadata + | CoBuyerMemberAOR | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentDesignation + When "CoBuyerAgentDesignation" exists in the "Property" metadata + Then "CoBuyerAgentDesignation" MUST be "Multiple Enumeration" data type + And the following synonyms for "CoBuyerAgentDesignation" MUST NOT exist in the metadata + | CoBuyerMemberDesignation | + And "CoBuyerAgentDesignation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AccreditedBuyersRepresentative | Accredited Buyer's Representative / ABR | + | AccreditedLandConsultant | Accredited Land Consultant / ALC | + | AtHomeWithDiversity | At Home With Diversity / AHWD | + | CertifiedCommercialInvestmentMember | Certified Commercial Investment Member / CCIM | + | CertifiedDistressedPropertyExpert | Certified Distressed Property Expert / CDPE | + | CertifiedInternationalPropertySpecialist | Certified International Property Specialist / CIPS | + | CertifiedPropertyManager | Certified Property Manager / CPM | + | CertifiedRealEstateBrokerageManager | Certified Real Estate Brokerage Manager / CRB | + | CertifiedRealEstateTeamSpecialist | Certified Real Estate Team Specialist / C-RETS | + | CertifiedResidentialSpecialist | Certified Residential Specialist / CRS | + | CounselorOfRealEstate | Counselor of Real Estate / CRE | + | ePRO | e-PRO | + | GeneralAccreditedAppraiser | General Accredited Appraiser / GAA | + | GraduateRealtorInstitute | Graduate, REALTOR Institute / GRI | + | MilitaryRelocationProfessional | Military Relocation Professional / MRP | + | NARsGreenDesignation | NAR's Green Designation / GREEN | + | PerformanceManagementNetwork | Performance Management Network / PMN | + | PricingStrategyAdvisor | Pricing Strategy Advisor / PSA | + | RealEstateNegotiationExpert | Real Estate Negotiation Expert / RENE | + | RealtorAssociationCertifiedExecutive | REALTOR Association Certified Executive / RCE | + | ResidentialAccreditedAppraiser | Residential Accredited Appraiser / RAA | + | ResortAndSecondHomePropertySpecialist | Resort & Second-Home Property Specialist / RSPS | + | SellerRepresentativeSpecialist | Seller Representative Specialist / SRS | + | SeniorsRealEstateSpecialist | Seniors Real Estate Specialist / SRES | + | ShortSalesAndForeclosureResource | Short Sales & Foreclosure Resource / SFR | + | SocietyOfIndustrialAndOfficeRealtors | Society of Industrial and Office REALTORS / SIOR | + | TransnationalReferralCertification | Transnational Referral Certification / TRC | + But "CoBuyerAgentDesignation" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentDirectPhone + When "CoBuyerAgentDirectPhone" exists in the "Property" metadata + Then "CoBuyerAgentDirectPhone" MUST be "String" data type + And the following synonyms for "CoBuyerAgentDirectPhone" MUST NOT exist in the metadata + | CoBuyerMemberDirectPhone | + And "CoBuyerAgentDirectPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentEmail + When "CoBuyerAgentEmail" exists in the "Property" metadata + Then "CoBuyerAgentEmail" MUST be "String" data type + And the following synonyms for "CoBuyerAgentEmail" MUST NOT exist in the metadata + | CoBuyerMemberEmail | + And "CoBuyerAgentEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentFax + When "CoBuyerAgentFax" exists in the "Property" metadata + Then "CoBuyerAgentFax" MUST be "String" data type + And the following synonyms for "CoBuyerAgentFax" MUST NOT exist in the metadata + | CoBuyerMemberFax | + And "CoBuyerAgentFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoBuyerAgentFirstName + When "CoBuyerAgentFirstName" exists in the "Property" metadata + Then "CoBuyerAgentFirstName" MUST be "String" data type + And the following synonyms for "CoBuyerAgentFirstName" MUST NOT exist in the metadata + | CoBuyerMemberFirstName | + And "CoBuyerAgentFirstName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoBuyerAgentFullName + When "CoBuyerAgentFullName" exists in the "Property" metadata + Then "CoBuyerAgentFullName" MUST be "String" data type + And the following synonyms for "CoBuyerAgentFullName" MUST NOT exist in the metadata + | CoBuyerMemberFullName | + And "CoBuyerAgentFullName" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentHomePhone + When "CoBuyerAgentHomePhone" exists in the "Property" metadata + Then "CoBuyerAgentHomePhone" MUST be "String" data type + And the following synonyms for "CoBuyerAgentHomePhone" MUST NOT exist in the metadata + | CoBuyerMemberHomePhone | + And "CoBuyerAgentHomePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentKey + When "CoBuyerAgentKey" exists in the "Property" metadata + Then "CoBuyerAgentKey" MUST be "String" data type + And the following synonyms for "CoBuyerAgentKey" MUST NOT exist in the metadata + | CoBuyerMemberKey | + And "CoBuyerAgentKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentKeyNumeric + When "CoBuyerAgentKeyNumeric" exists in the "Property" metadata + Then "CoBuyerAgentKeyNumeric" MUST be "Integer" data type + And the following synonyms for "CoBuyerAgentKeyNumeric" MUST NOT exist in the metadata + | CoBuyerMemberKeyNumeric | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoBuyerAgentLastName + When "CoBuyerAgentLastName" exists in the "Property" metadata + Then "CoBuyerAgentLastName" MUST be "String" data type + And the following synonyms for "CoBuyerAgentLastName" MUST NOT exist in the metadata + | CoBuyerMemberLastName | + And "CoBuyerAgentLastName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentMiddleName + When "CoBuyerAgentMiddleName" exists in the "Property" metadata + Then "CoBuyerAgentMiddleName" MUST be "String" data type + And the following synonyms for "CoBuyerAgentMiddleName" MUST NOT exist in the metadata + | CoBuyerMemberMiddleName | + And "CoBuyerAgentMiddleName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoBuyerAgentMlsId + When "CoBuyerAgentMlsId" exists in the "Property" metadata + Then "CoBuyerAgentMlsId" MUST be "String" data type + And the following synonyms for "CoBuyerAgentMlsId" MUST NOT exist in the metadata + | CoBuyerMemberMlsId | + And "CoBuyerAgentMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentMobilePhone + When "CoBuyerAgentMobilePhone" exists in the "Property" metadata + Then "CoBuyerAgentMobilePhone" MUST be "String" data type + And the following synonyms for "CoBuyerAgentMobilePhone" MUST NOT exist in the metadata + | CoBuyerMemberMobilePhone | + And "CoBuyerAgentMobilePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentNamePrefix + When "CoBuyerAgentNamePrefix" exists in the "Property" metadata + Then "CoBuyerAgentNamePrefix" MUST be "String" data type + And the following synonyms for "CoBuyerAgentNamePrefix" MUST NOT exist in the metadata + | CoBuyerMemberNamePrefix | + And "CoBuyerAgentNamePrefix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentNameSuffix + When "CoBuyerAgentNameSuffix" exists in the "Property" metadata + Then "CoBuyerAgentNameSuffix" MUST be "String" data type + And the following synonyms for "CoBuyerAgentNameSuffix" MUST NOT exist in the metadata + | CoBuyerMemberNameSuffix | + And "CoBuyerAgentNameSuffix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentOfficePhone + When "CoBuyerAgentOfficePhone" exists in the "Property" metadata + Then "CoBuyerAgentOfficePhone" MUST be "String" data type + And the following synonyms for "CoBuyerAgentOfficePhone" MUST NOT exist in the metadata + | CoBuyerMemberOfficePhone | + And "CoBuyerAgentOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentOfficePhoneExt + When "CoBuyerAgentOfficePhoneExt" exists in the "Property" metadata + Then "CoBuyerAgentOfficePhoneExt" MUST be "String" data type + And the following synonyms for "CoBuyerAgentOfficePhoneExt" MUST NOT exist in the metadata + | CoBuyerMemberOfficePhoneExt | + And "CoBuyerAgentOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentPager + When "CoBuyerAgentPager" exists in the "Property" metadata + Then "CoBuyerAgentPager" MUST be "String" data type + And the following synonyms for "CoBuyerAgentPager" MUST NOT exist in the metadata + | CoBuyerMemberPager | + And "CoBuyerAgentPager" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentPreferredPhone + When "CoBuyerAgentPreferredPhone" exists in the "Property" metadata + Then "CoBuyerAgentPreferredPhone" MUST be "String" data type + And the following synonyms for "CoBuyerAgentPreferredPhone" MUST NOT exist in the metadata + | CoBuyerMemberPreferredPhone | + And "CoBuyerAgentPreferredPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentPreferredPhoneExt + When "CoBuyerAgentPreferredPhoneExt" exists in the "Property" metadata + Then "CoBuyerAgentPreferredPhoneExt" MUST be "String" data type + And the following synonyms for "CoBuyerAgentPreferredPhoneExt" MUST NOT exist in the metadata + | CoBuyerMemberPreferredPhoneExt | + And "CoBuyerAgentPreferredPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentStateLicense + When "CoBuyerAgentStateLicense" exists in the "Property" metadata + Then "CoBuyerAgentStateLicense" MUST be "String" data type + And the following synonyms for "CoBuyerAgentStateLicense" MUST NOT exist in the metadata + | CoBuyerMemberStateLicense | + And "CoBuyerAgentStateLicense" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentTollFreePhone + When "CoBuyerAgentTollFreePhone" exists in the "Property" metadata + Then "CoBuyerAgentTollFreePhone" MUST be "String" data type + And the following synonyms for "CoBuyerAgentTollFreePhone" MUST NOT exist in the metadata + | CoBuyerMemberTollFreePhone | + And "CoBuyerAgentTollFreePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentURL + When "CoBuyerAgentURL" exists in the "Property" metadata + Then "CoBuyerAgentURL" MUST be "String" data type + And the following synonyms for "CoBuyerAgentURL" MUST NOT exist in the metadata + | CoBuyerMemberURL | + And "CoBuyerAgentURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentVoiceMail + When "CoBuyerAgentVoiceMail" exists in the "Property" metadata + Then "CoBuyerAgentVoiceMail" MUST be "String" data type + And the following synonyms for "CoBuyerAgentVoiceMail" MUST NOT exist in the metadata + | CoBuyerMemberVoiceMail | + And "CoBuyerAgentVoiceMail" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerAgentVoiceMailExt + When "CoBuyerAgentVoiceMailExt" exists in the "Property" metadata + Then "CoBuyerAgentVoiceMailExt" MUST be "String" data type + And the following synonyms for "CoBuyerAgentVoiceMailExt" MUST NOT exist in the metadata + | CoBuyerMemberVoiceMailExt | + And "CoBuyerAgentVoiceMailExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerOfficeAOR + When "CoBuyerOfficeAOR" exists in the "Property" metadata + Then "CoBuyerOfficeAOR" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerOfficeEmail + When "CoBuyerOfficeEmail" exists in the "Property" metadata + Then "CoBuyerOfficeEmail" MUST be "String" data type + And "CoBuyerOfficeEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerOfficeFax + When "CoBuyerOfficeFax" exists in the "Property" metadata + Then "CoBuyerOfficeFax" MUST be "String" data type + And "CoBuyerOfficeFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerOfficeKey + When "CoBuyerOfficeKey" exists in the "Property" metadata + Then "CoBuyerOfficeKey" MUST be "String" data type + And "CoBuyerOfficeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerOfficeKeyNumeric + When "CoBuyerOfficeKeyNumeric" exists in the "Property" metadata + Then "CoBuyerOfficeKeyNumeric" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoBuyerOfficeMlsId + When "CoBuyerOfficeMlsId" exists in the "Property" metadata + Then "CoBuyerOfficeMlsId" MUST be "String" data type + And "CoBuyerOfficeMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoBuyerOfficeName + When "CoBuyerOfficeName" exists in the "Property" metadata + Then "CoBuyerOfficeName" MUST be "String" data type + And "CoBuyerOfficeName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerOfficePhone + When "CoBuyerOfficePhone" exists in the "Property" metadata + Then "CoBuyerOfficePhone" MUST be "String" data type + And "CoBuyerOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerOfficePhoneExt + When "CoBuyerOfficePhoneExt" exists in the "Property" metadata + Then "CoBuyerOfficePhoneExt" MUST be "String" data type + And "CoBuyerOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoBuyerOfficeURL + When "CoBuyerOfficeURL" exists in the "Property" metadata + Then "CoBuyerOfficeURL" MUST be "String" data type + And "CoBuyerOfficeURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentAOR + When "CoListAgentAOR" exists in the "Property" metadata + Then "CoListAgentAOR" MUST be "Single Enumeration" data type + And the following synonyms for "CoListAgentAOR" MUST NOT exist in the metadata + | CoListMemberAOR | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentDesignation + When "CoListAgentDesignation" exists in the "Property" metadata + Then "CoListAgentDesignation" MUST be "Multiple Enumeration" data type + And the following synonyms for "CoListAgentDesignation" MUST NOT exist in the metadata + | CoListMemberDesignation | + And "CoListAgentDesignation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AccreditedBuyersRepresentative | Accredited Buyer's Representative / ABR | + | AccreditedLandConsultant | Accredited Land Consultant / ALC | + | AtHomeWithDiversity | At Home With Diversity / AHWD | + | CertifiedCommercialInvestmentMember | Certified Commercial Investment Member / CCIM | + | CertifiedDistressedPropertyExpert | Certified Distressed Property Expert / CDPE | + | CertifiedInternationalPropertySpecialist | Certified International Property Specialist / CIPS | + | CertifiedPropertyManager | Certified Property Manager / CPM | + | CertifiedRealEstateBrokerageManager | Certified Real Estate Brokerage Manager / CRB | + | CertifiedRealEstateTeamSpecialist | Certified Real Estate Team Specialist / C-RETS | + | CertifiedResidentialSpecialist | Certified Residential Specialist / CRS | + | CounselorOfRealEstate | Counselor of Real Estate / CRE | + | ePRO | e-PRO | + | GeneralAccreditedAppraiser | General Accredited Appraiser / GAA | + | GraduateRealtorInstitute | Graduate, REALTOR Institute / GRI | + | MilitaryRelocationProfessional | Military Relocation Professional / MRP | + | NARsGreenDesignation | NAR's Green Designation / GREEN | + | PerformanceManagementNetwork | Performance Management Network / PMN | + | PricingStrategyAdvisor | Pricing Strategy Advisor / PSA | + | RealEstateNegotiationExpert | Real Estate Negotiation Expert / RENE | + | RealtorAssociationCertifiedExecutive | REALTOR Association Certified Executive / RCE | + | ResidentialAccreditedAppraiser | Residential Accredited Appraiser / RAA | + | ResortAndSecondHomePropertySpecialist | Resort & Second-Home Property Specialist / RSPS | + | SellerRepresentativeSpecialist | Seller Representative Specialist / SRS | + | SeniorsRealEstateSpecialist | Seniors Real Estate Specialist / SRES | + | ShortSalesAndForeclosureResource | Short Sales & Foreclosure Resource / SFR | + | SocietyOfIndustrialAndOfficeRealtors | Society of Industrial and Office REALTORS / SIOR | + | TransnationalReferralCertification | Transnational Referral Certification / TRC | + But "CoListAgentDesignation" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentDirectPhone + When "CoListAgentDirectPhone" exists in the "Property" metadata + Then "CoListAgentDirectPhone" MUST be "String" data type + And the following synonyms for "CoListAgentDirectPhone" MUST NOT exist in the metadata + | CoListMemberDirectPhone | + And "CoListAgentDirectPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentEmail + When "CoListAgentEmail" exists in the "Property" metadata + Then "CoListAgentEmail" MUST be "String" data type + And the following synonyms for "CoListAgentEmail" MUST NOT exist in the metadata + | CoListMemberEmail | + And "CoListAgentEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentFax + When "CoListAgentFax" exists in the "Property" metadata + Then "CoListAgentFax" MUST be "String" data type + And the following synonyms for "CoListAgentFax" MUST NOT exist in the metadata + | CoListMemberFax | + And "CoListAgentFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoListAgentFirstName + When "CoListAgentFirstName" exists in the "Property" metadata + Then "CoListAgentFirstName" MUST be "String" data type + And the following synonyms for "CoListAgentFirstName" MUST NOT exist in the metadata + | CoListMemberFirstName | + And "CoListAgentFirstName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoListAgentFullName + When "CoListAgentFullName" exists in the "Property" metadata + Then "CoListAgentFullName" MUST be "String" data type + And the following synonyms for "CoListAgentFullName" MUST NOT exist in the metadata + | CoListMemberFullName | + And "CoListAgentFullName" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentHomePhone + When "CoListAgentHomePhone" exists in the "Property" metadata + Then "CoListAgentHomePhone" MUST be "String" data type + And the following synonyms for "CoListAgentHomePhone" MUST NOT exist in the metadata + | CoListMemberHomePhone | + And "CoListAgentHomePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentKey + When "CoListAgentKey" exists in the "Property" metadata + Then "CoListAgentKey" MUST be "String" data type + And the following synonyms for "CoListAgentKey" MUST NOT exist in the metadata + | CoListMemberKey | + And "CoListAgentKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentKeyNumeric + When "CoListAgentKeyNumeric" exists in the "Property" metadata + Then "CoListAgentKeyNumeric" MUST be "Integer" data type + And the following synonyms for "CoListAgentKeyNumeric" MUST NOT exist in the metadata + | CoListMemberKey | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoListAgentLastName + When "CoListAgentLastName" exists in the "Property" metadata + Then "CoListAgentLastName" MUST be "String" data type + And the following synonyms for "CoListAgentLastName" MUST NOT exist in the metadata + | CoListMemberLastName | + And "CoListAgentLastName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentMiddleName + When "CoListAgentMiddleName" exists in the "Property" metadata + Then "CoListAgentMiddleName" MUST be "String" data type + And the following synonyms for "CoListAgentMiddleName" MUST NOT exist in the metadata + | CoListMemberMiddleName | + And "CoListAgentMiddleName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoListAgentMlsId + When "CoListAgentMlsId" exists in the "Property" metadata + Then "CoListAgentMlsId" MUST be "String" data type + And the following synonyms for "CoListAgentMlsId" MUST NOT exist in the metadata + | CoListMemberMlsld | + And "CoListAgentMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentMobilePhone + When "CoListAgentMobilePhone" exists in the "Property" metadata + Then "CoListAgentMobilePhone" MUST be "String" data type + And the following synonyms for "CoListAgentMobilePhone" MUST NOT exist in the metadata + | CoListMemberMobilePhone | + And "CoListAgentMobilePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentNamePrefix + When "CoListAgentNamePrefix" exists in the "Property" metadata + Then "CoListAgentNamePrefix" MUST be "String" data type + And the following synonyms for "CoListAgentNamePrefix" MUST NOT exist in the metadata + | CoListMemberNamePrefix | + And "CoListAgentNamePrefix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentNameSuffix + When "CoListAgentNameSuffix" exists in the "Property" metadata + Then "CoListAgentNameSuffix" MUST be "String" data type + And the following synonyms for "CoListAgentNameSuffix" MUST NOT exist in the metadata + | CoListMemberNameSuffix | + And "CoListAgentNameSuffix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentOfficePhone + When "CoListAgentOfficePhone" exists in the "Property" metadata + Then "CoListAgentOfficePhone" MUST be "String" data type + And the following synonyms for "CoListAgentOfficePhone" MUST NOT exist in the metadata + | CoListMemberOfficePhone | + And "CoListAgentOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentOfficePhoneExt + When "CoListAgentOfficePhoneExt" exists in the "Property" metadata + Then "CoListAgentOfficePhoneExt" MUST be "String" data type + And the following synonyms for "CoListAgentOfficePhoneExt" MUST NOT exist in the metadata + | CoListMemberOfficePhoneExt | + And "CoListAgentOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentPager + When "CoListAgentPager" exists in the "Property" metadata + Then "CoListAgentPager" MUST be "String" data type + And the following synonyms for "CoListAgentPager" MUST NOT exist in the metadata + | CoListMemberPager | + And "CoListAgentPager" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentPreferredPhone + When "CoListAgentPreferredPhone" exists in the "Property" metadata + Then "CoListAgentPreferredPhone" MUST be "String" data type + And the following synonyms for "CoListAgentPreferredPhone" MUST NOT exist in the metadata + | CoListMemberPreferredPhone | + And "CoListAgentPreferredPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentPreferredPhoneExt + When "CoListAgentPreferredPhoneExt" exists in the "Property" metadata + Then "CoListAgentPreferredPhoneExt" MUST be "String" data type + And the following synonyms for "CoListAgentPreferredPhoneExt" MUST NOT exist in the metadata + | CoListMemberPreferredPhoneExt | + And "CoListAgentPreferredPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentStateLicense + When "CoListAgentStateLicense" exists in the "Property" metadata + Then "CoListAgentStateLicense" MUST be "String" data type + And the following synonyms for "CoListAgentStateLicense" MUST NOT exist in the metadata + | CoListMemberStateLicense | + And "CoListAgentStateLicense" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentTollFreePhone + When "CoListAgentTollFreePhone" exists in the "Property" metadata + Then "CoListAgentTollFreePhone" MUST be "String" data type + And the following synonyms for "CoListAgentTollFreePhone" MUST NOT exist in the metadata + | CoListMemberTollFreePhone | + And "CoListAgentTollFreePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentURL + When "CoListAgentURL" exists in the "Property" metadata + Then "CoListAgentURL" MUST be "String" data type + And the following synonyms for "CoListAgentURL" MUST NOT exist in the metadata + | CoListMemberURL | + And "CoListAgentURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentVoiceMail + When "CoListAgentVoiceMail" exists in the "Property" metadata + Then "CoListAgentVoiceMail" MUST be "String" data type + And the following synonyms for "CoListAgentVoiceMail" MUST NOT exist in the metadata + | CoListMemberVoiceMail | + And "CoListAgentVoiceMail" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListAgentVoiceMailExt + When "CoListAgentVoiceMailExt" exists in the "Property" metadata + Then "CoListAgentVoiceMailExt" MUST be "String" data type + And the following synonyms for "CoListAgentVoiceMailExt" MUST NOT exist in the metadata + | CoListMemberVoiceMailExt | + And "CoListAgentVoiceMailExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListOfficeAOR + When "CoListOfficeAOR" exists in the "Property" metadata + Then "CoListOfficeAOR" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListOfficeEmail + When "CoListOfficeEmail" exists in the "Property" metadata + Then "CoListOfficeEmail" MUST be "String" data type + And "CoListOfficeEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListOfficeFax + When "CoListOfficeFax" exists in the "Property" metadata + Then "CoListOfficeFax" MUST be "String" data type + And "CoListOfficeFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListOfficeKey + When "CoListOfficeKey" exists in the "Property" metadata + Then "CoListOfficeKey" MUST be "String" data type + And "CoListOfficeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListOfficeKeyNumeric + When "CoListOfficeKeyNumeric" exists in the "Property" metadata + Then "CoListOfficeKeyNumeric" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoListOfficeMlsId + When "CoListOfficeMlsId" exists in the "Property" metadata + Then "CoListOfficeMlsId" MUST be "String" data type + And "CoListOfficeMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CoListOfficeName + When "CoListOfficeName" exists in the "Property" metadata + Then "CoListOfficeName" MUST be "String" data type + And "CoListOfficeName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListOfficePhone + When "CoListOfficePhone" exists in the "Property" metadata + Then "CoListOfficePhone" MUST be "String" data type + And "CoListOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListOfficePhoneExt + When "CoListOfficePhoneExt" exists in the "Property" metadata + Then "CoListOfficePhoneExt" MUST be "String" data type + And "CoListOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CoListOfficeURL + When "CoListOfficeURL" exists in the "Property" metadata + Then "CoListOfficeURL" MUST be "String" data type + And "CoListOfficeURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: CommonInterest + When "CommonInterest" exists in the "Property" metadata + Then "CommonInterest" MUST be "Single Enumeration" data type + And "CommonInterest" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CommunityApartment | Community Apartment | + | Condominium | Condominium | + | None | None | + | PlannedDevelopment | Planned Development | + | StockCooperative | Stock Cooperative | + | Timeshare | Timeshare | + But "CommonInterest" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: CommonWalls + When "CommonWalls" exists in the "Property" metadata + Then "CommonWalls" MUST be "Multiple Enumeration" data type + And "CommonWalls" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | EndUnit | End Unit | + | NoCommonWalls | No Common Walls | + | NoOneAbove | No One Above | + | NoOneBelow | No One Below | + | OneCommonWall | 1 Common Wall | + | TwoOrMoreCommonWalls | 2+ Common Walls | + But "CommonWalls" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: CommunityFeatures + When "CommunityFeatures" exists in the "Property" metadata + Then "CommunityFeatures" MUST be "Multiple Enumeration" data type + And "CommunityFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AirportRunway | Airport/Runway | + | Clubhouse | Clubhouse | + | Curbs | Curbs | + | Fishing | Fishing | + | FitnessCenter | Fitness Center | + | Gated | Gated | + | Golf | Golf | + | Lake | Lake | + | None | None | + | Other | Other | + | Park | Park | + | Playground | Playground | + | Pool | Pool | + | Racquetball | Racquetball | + | Restaurant | Restaurant | + | Sidewalks | Sidewalks | + | Stables | Stable(s) | + | StreetLights | Street Lights | + | Suburban | Suburban | + | TennisCourts | Tennis Court(s) | + But "CommunityFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Concessions + When "Concessions" exists in the "Property" metadata + Then "Concessions" MUST be "Single Enumeration" data type + And "Concessions" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CallListingAgent | Call Listing Agent | + | No | No | + | Yes | Yes | + But "Concessions" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ConcessionsAmount + When "ConcessionsAmount" exists in the "Property" metadata + Then "ConcessionsAmount" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ConcessionsComments + When "ConcessionsComments" exists in the "Property" metadata + Then "ConcessionsComments" MUST be "String" data type + And "ConcessionsComments" length SHOULD be equal to the RESO Suggested Max Length of 200 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: ConstructionMaterials + When "ConstructionMaterials" exists in the "Property" metadata + Then "ConstructionMaterials" MUST be "Multiple Enumeration" data type + And "ConstructionMaterials" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Adobe | Adobe | + | AluminumSiding | Aluminum Siding | + | Asbestos | Asbestos | + | Asphalt | Asphalt | + | AtticCrawlHatchwaysInsulated | Attic/Crawl Hatchway(s) Insulated | + | BattsInsulation | Batts Insulation | + | Block | Block | + | BlownInInsulation | Blown-In Insulation | + | BoardAndBattenSiding | Board & Batten Siding | + | Brick | Brick | + | BrickVeneer | Brick Veneer | + | Cedar | Cedar | + | CementSiding | Cement Siding | + | Clapboard | Clapboard | + | Concrete | Concrete | + | DuctsProfessionallyAirSealed | Ducts Professionally Air-Sealed | + | ExteriorDuctWorkIsInsulated | Exterior Duct-Work is Insulated | + | FiberCement | Fiber Cement | + | FiberglassSiding | Fiberglass Siding | + | FoamInsulation | Foam Insulation | + | Frame | Frame | + | Glass | Glass | + | HardiplankType | HardiPlank Type | + | IcatRecessedLighting | ICAT Recessed Lighting | + | InsulatedConcreteForms | ICFs (Insulated Concrete Forms) | + | LapSiding | Lap Siding | + | Log | Log | + | LogSiding | Log Siding | + | LowVocInsulation | Low VOC Insulation | + | Masonite | Masonite | + | MetalSiding | Metal Siding | + | NaturalBuilding | Natural Building | + | Other | Other | + | Plaster | Plaster | + | RadiantBarrier | Radiant Barrier | + | RammedEarth | Rammed Earth | + | RecycledBioBasedInsulation | Recycled/Bio-Based Insulation | + | RedwoodSiding | Redwood Siding | + | SeeRemarks | See Remarks | + | ShakeSiding | Shake Siding | + | ShingleSiding | Shingle Siding | + | SlumpBlock | Slump Block | + | SprayFoamInsulation | Spray Foam Insulation | + | SteelSiding | Steel Siding | + | Stone | Stone | + | StoneVeneer | Stone Veneer | + | Straw | Straw | + | Stucco | Stucco | + | SyntheticStucco | Synthetic Stucco | + | Unknown | Unknown | + | VerticalSiding | Vertical Siding | + | VinylSiding | Vinyl Siding | + | WoodSiding | Wood Siding | + But "ConstructionMaterials" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ContinentRegion + When "ContinentRegion" exists in the "Property" metadata + Then "ContinentRegion" MUST be "String" data type + And "ContinentRegion" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Contingency + When "Contingency" exists in the "Property" metadata + Then "Contingency" MUST be "String" data type + And the following synonyms for "Contingency" MUST NOT exist in the metadata + | Contingencies | + And "Contingency" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: ContingentDate + When "ContingentDate" exists in the "Property" metadata + Then "ContingentDate" MUST be "Date" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ContractStatusChangeDate + When "ContractStatusChangeDate" exists in the "Property" metadata + Then "ContractStatusChangeDate" MUST be "Date" data type + And the following synonyms for "ContractStatusChangeDate" MUST NOT exist in the metadata + | StatusDate | + | StatusChange | + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: Cooling + When "Cooling" exists in the "Property" metadata + Then "Cooling" MUST be "Multiple Enumeration" data type + And "Cooling" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AtticFan | Attic Fan | + | CeilingFans | Ceiling Fan(s) | + | CentralAir | Central Air | + | Dual | Dual | + | Ductless | Ductless | + | Electric | Electric | + | EnergyStarQualifiedEquipment | ENERGY STAR Qualified Equipment | + | EvaporativeCooling | Evaporative Cooling | + | ExhaustFan | Exhaust Fan | + | Gas | Gas | + | Geothermal | Geothermal | + | HeatPump | Heat Pump | + | HumidityControl | Humidity Control | + | MultiUnits | Multi Units | + | None | None | + | Other | Other | + | RoofTurbines | Roof Turbine(s) | + | SeparateMeters | Separate Meters | + | VariesByUnit | Varies by Unit | + | WallUnits | Wall Unit(s) | + | WallWindowUnits | Wall/Window Unit(s) | + | WholeHouseFan | Whole House Fan | + | WindowUnits | Window Unit(s) | + | Zoned | Zoned | + But "Cooling" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @IDX + Scenario: CoolingYN + When "CoolingYN" exists in the "Property" metadata + Then "CoolingYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CopyrightNotice + When "CopyrightNotice" exists in the "Property" metadata + Then "CopyrightNotice" MUST be "String" data type + And the following synonyms for "CopyrightNotice" MUST NOT exist in the metadata + | Copyright | + And "CopyrightNotice" length SHOULD be equal to the RESO Suggested Max Length of 500 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Country + When "Country" exists in the "Property" metadata + Then "Country" MUST be "Single Enumeration" data type + And "Country" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AD | AD | + | AE | AE | + | AF | AF | + | AG | AG | + | AI | AI | + | AL | AL | + | AM | AM | + | AN | AN | + | AO | AO | + | AQ | AQ | + | AR | AR | + | AS | AS | + | AT | AT | + | AU | AU | + | AW | AW | + | AX | AX | + | AZ | AZ | + | BA | BA | + | BB | BB | + | BD | BD | + | BE | BE | + | BF | BF | + | BG | BG | + | BH | BH | + | BI | BI | + | BJ | BJ | + | BL | BL | + | BM | BM | + | BN | BN | + | BO | BO | + | BR | BR | + | BS | BS | + | BT | BT | + | BV | BV | + | BW | BW | + | BY | BY | + | BZ | BZ | + | CA | CA | + | CC | CC | + | CD | CD | + | CF | CF | + | CG | CG | + | CH | CH | + | CI | CI | + | CK | CK | + | CL | CL | + | CM | CM | + | CN | CN | + | CO | CO | + | CR | CR | + | CU | CU | + | CV | CV | + | CX | CX | + | CY | CY | + | CZ | CZ | + | DE | DE | + | DJ | DJ | + | DK | DK | + | DM | DM | + | DO | DO | + | DZ | DZ | + | EC | EC | + | EE | EE | + | EG | EG | + | EH | EH | + | ER | ER | + | ES | ES | + | ET | ET | + | FI | FI | + | FJ | FJ | + | FK | FK | + | FM | FM | + | FO | FO | + | FR | FR | + | GA | GA | + | GB | GB | + | GD | GD | + | GE | GE | + | GF | GF | + | GG | GG | + | GH | GH | + | GI | GI | + | GL | GL | + | GM | GM | + | GN | GN | + | GP | GP | + | GQ | GQ | + | GR | GR | + | GS | GS | + | GT | GT | + | GU | GU | + | GW | GW | + | GY | GY | + | HK | HK | + | HM | HM | + | HN | HN | + | HR | HR | + | HT | HT | + | HU | HU | + | ID | ID | + | IE | IE | + | IL | IL | + | IM | IM | + | IN | IN | + | IO | IO | + | IQ | IQ | + | IR | IR | + | IS | IS | + | IT | IT | + | JE | JE | + | JM | JM | + | JO | JO | + | JP | JP | + | KE | KE | + | KG | KG | + | KH | KH | + | KI | KI | + | KM | KM | + | KN | KN | + | KP | KP | + | KR | KR | + | KW | KW | + | KY | KY | + | KZ | KZ | + | LA | LA | + | LB | LB | + | LC | LC | + | LI | LI | + | LK | LK | + | LR | LR | + | LS | LS | + | LT | LT | + | LU | LU | + | LV | LV | + | LY | LY | + | MA | MA | + | MC | MC | + | MD | MD | + | ME | ME | + | MF | MF | + | MG | MG | + | MH | MH | + | MK | MK | + | ML | ML | + | MM | MM | + | MN | MN | + | MO | MO | + | MP | MP | + | MQ | MQ | + | MR | MR | + | MS | MS | + | MT | MT | + | MU | MU | + | MV | MV | + | MW | MW | + | MX | MX | + | MY | MY | + | MZ | MZ | + | NA | NA | + | NC | NC | + | NE | NE | + | NF | NF | + | NG | NG | + | NI | NI | + | NL | NL | + | NP | NP | + | NR | NR | + | NU | NU | + | NZ | NZ | + | OM | OM | + | OT | OT | + | PA | PA | + | PE | PE | + | PF | PF | + | PG | PG | + | PH | PH | + | PK | PK | + | PL | PL | + | PM | PM | + | PN | PN | + | PR | PR | + | PS | PS | + | PT | PT | + | PW | PW | + | PY | PY | + | QA | QA | + | RE | RE | + | RO | RO | + | RS | RS | + | RU | RU | + | RW | RW | + | SA | SA | + | SB | SB | + | SC | SC | + | SD | SD | + | SE | SE | + | SG | SG | + | SH | SH | + | SI | SI | + | SJ | SJ | + | SK | SK | + | SL | SL | + | SM | SM | + | SN | SN | + | SO | SO | + | SR | SR | + | ST | ST | + | SV | SV | + | SY | SY | + | SZ | SZ | + | TC | TC | + | TD | TD | + | TF | TF | + | TG | TG | + | TH | TH | + | TJ | TJ | + | TK | TK | + | TL | TL | + | TM | TM | + | TN | TN | + | TO | TO | + | TR | TR | + | TT | TT | + | TV | TV | + | TW | TW | + | TZ | TZ | + | UA | UA | + | UG | UG | + | UM | UM | + | US | US | + | UY | UY | + | UZ | UZ | + | VA | VA | + | VC | VC | + | VE | VE | + | VG | VG | + | VI | VI | + | VN | VN | + | VU | VU | + | WF | WF | + | WS | WS | + | YE | YE | + | YT | YT | + | ZA | ZA | + | ZM | ZM | + | ZW | ZW | + But "Country" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CountryRegion + When "CountryRegion" exists in the "Property" metadata + Then "CountryRegion" MUST be "String" data type + And "CountryRegion" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: CountyOrParish + When "CountyOrParish" exists in the "Property" metadata + Then "CountyOrParish" MUST be "Single Enumeration" data type + And the following synonyms for "CountyOrParish" MUST NOT exist in the metadata + | County | + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: CoveredSpaces + When "CoveredSpaces" exists in the "Property" metadata + Then "CoveredSpaces" MUST be "Decimal" data type + And "CoveredSpaces" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "CoveredSpaces" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @FARM + Scenario: CropsIncludedYN + When "CropsIncludedYN" exists in the "Property" metadata + Then "CropsIncludedYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CrossStreet + When "CrossStreet" exists in the "Property" metadata + Then "CrossStreet" MUST be "String" data type + And "CrossStreet" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @FARM + Scenario: CultivatedArea + When "CultivatedArea" exists in the "Property" metadata + Then "CultivatedArea" MUST be "Decimal" data type + And "CultivatedArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "CultivatedArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CumulativeDaysOnMarket + When "CumulativeDaysOnMarket" exists in the "Property" metadata + Then "CumulativeDaysOnMarket" MUST be "Integer" data type + And the following synonyms for "CumulativeDaysOnMarket" MUST NOT exist in the metadata + | CDOM | + | PropertyDaysOnMarket | + | DOMP | + | PDOM | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: CurrentFinancing + When "CurrentFinancing" exists in the "Property" metadata + Then "CurrentFinancing" MUST be "Multiple Enumeration" data type + And "CurrentFinancing" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Assumable | Assumable | + | Contract | Contract | + | Conventional | Conventional | + | FHA | FHA | + | FHA203b | FHA 203(b) | + | FHA203k | FHA 203(k) | + | LeasedRenewables | Leased Renewables | + | None | None | + | Other | Other | + | PowerPurchaseAgreement | Power Purchase Agreement | + | Private | Private | + | PropertyAssessedCleanEnergy | Property-Assessed Clean Energy | + | TrustDeed | Trust Deed | + | USDA | USDA | + | VA | VA | + But "CurrentFinancing" MUST NOT contain any similar lookups + + @Property @LAND @IDX + Scenario: CurrentUse + When "CurrentUse" exists in the "Property" metadata + Then "CurrentUse" MUST be "Multiple Enumeration" data type + And "CurrentUse" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Agricultural | Agricultural | + | Automotive | Automotive | + | Cattle | Cattle | + | Commercial | Commercial | + | Dairy | Dairy | + | Farm | Farm | + | Fishery | Fishery | + | Grazing | Grazing | + | HighwayTouristService | Highway/Tourist Service | + | Horses | Horses | + | Hunting | Hunting | + | Industrial | Industrial | + | Investment | Investment | + | Livestock | Livestock | + | ManufacturedHome | Manufactured Home | + | MedicalDental | Medical/Dental | + | MiniStorage | Mini-Storage | + | MixedUse | Mixed Use | + | MultiFamily | Multi-Family | + | Nursery | Nursery | + | Office | Office | + | Orchard | Orchard | + | Other | Other | + | Pasture | Pasture | + | PlaceOfWorship | Place of Worship | + | Plantable | Plantable | + | Poultry | Poultry | + | Ranch | Ranch | + | Recreational | Recreational | + | Residential | Residential | + | Retail | Retail | + | RowCrops | Row Crops | + | SeeRemarks | See Remarks | + | SingleFamily | Single Family | + | Subdivision | Subdivision | + | Timber | Timber | + | TreeFarm | Tree Farm | + | Unimproved | Unimproved | + | Vacant | Vacant | + | Vineyard | Vineyard | + | Warehouse | Warehouse | + But "CurrentUse" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @MOBI + Scenario: DOH1 + When "DOH1" exists in the "Property" metadata + Then "DOH1" MUST be "String" data type + And the following synonyms for "DOH1" MUST NOT exist in the metadata + | Unit1HCDHUDDECAL | + And "DOH1" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @MOBI + Scenario: DOH2 + When "DOH2" exists in the "Property" metadata + Then "DOH2" MUST be "String" data type + And the following synonyms for "DOH2" MUST NOT exist in the metadata + | Unit2HCDHUDDECAL | + And "DOH2" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @MOBI + Scenario: DOH3 + When "DOH3" exists in the "Property" metadata + Then "DOH3" MUST be "String" data type + And the following synonyms for "DOH3" MUST NOT exist in the metadata + | Unit3HCDHUDDECAL | + And "DOH3" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: DaysOnMarket + When "DaysOnMarket" exists in the "Property" metadata + Then "DaysOnMarket" MUST be "Integer" data type + And the following synonyms for "DaysOnMarket" MUST NOT exist in the metadata + | DOM | + | ListingDaysOnMarket | + | DOML | + | LDOM | + | ADOM | + | ActiveDaysOnMarket | + | AgentDaysOnMarket | + + @Property @LAND + Scenario: DevelopmentStatus + When "DevelopmentStatus" exists in the "Property" metadata + Then "DevelopmentStatus" MUST be "Multiple Enumeration" data type + And "DevelopmentStatus" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Completed | Completed | + | FinishedLots | Finished Lot(s) | + | Other | Other | + | Proposed | Proposed | + | RawLand | Raw Land | + | RoughGrade | Rough Grade | + | SeeRemarks | See Remarks | + | SitePlanApproved | Site Plan Approved | + | SitePlanFiled | Site Plan Filed | + | UnderConstruction | Under Construction | + But "DevelopmentStatus" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: DirectionFaces + When "DirectionFaces" exists in the "Property" metadata + Then "DirectionFaces" MUST be "Single Enumeration" data type + And the following synonyms for "DirectionFaces" MUST NOT exist in the metadata + | BuildingExposure | + And "DirectionFaces" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | East | East | + | North | North | + | Northeast | Northeast | + | Northwest | Northwest | + | South | South | + | Southeast | Southeast | + | Southwest | Southwest | + | West | West | + But "DirectionFaces" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: Directions + When "Directions" exists in the "Property" metadata + Then "Directions" MUST be "String" data type + And "Directions" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Disclaimer + When "Disclaimer" exists in the "Property" metadata + Then "Disclaimer" MUST be "String" data type + And "Disclaimer" length SHOULD be equal to the RESO Suggested Max Length of 500 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Disclosures + When "Disclosures" exists in the "Property" metadata + Then "Disclosures" MUST be "Multiple Enumeration" data type + And the following synonyms for "Disclosures" MUST NOT exist in the metadata + | Legal | + | LegalDisclosures | + + @Property @LAND @FARM + Scenario: DistanceToBusComments + When "DistanceToBusComments" exists in the "Property" metadata + Then "DistanceToBusComments" MUST be "String" data type + And "DistanceToBusComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToBusNumeric + When "DistanceToBusNumeric" exists in the "Property" metadata + Then "DistanceToBusNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToBusUnits + When "DistanceToBusUnits" exists in the "Property" metadata + Then "DistanceToBusUnits" MUST be "Single Enumeration" data type + And "DistanceToBusUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToBusUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToElectricComments + When "DistanceToElectricComments" exists in the "Property" metadata + Then "DistanceToElectricComments" MUST be "String" data type + And "DistanceToElectricComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToElectricNumeric + When "DistanceToElectricNumeric" exists in the "Property" metadata + Then "DistanceToElectricNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToElectricUnits + When "DistanceToElectricUnits" exists in the "Property" metadata + Then "DistanceToElectricUnits" MUST be "Single Enumeration" data type + And "DistanceToElectricUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToElectricUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToFreewayComments + When "DistanceToFreewayComments" exists in the "Property" metadata + Then "DistanceToFreewayComments" MUST be "String" data type + And "DistanceToFreewayComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToFreewayNumeric + When "DistanceToFreewayNumeric" exists in the "Property" metadata + Then "DistanceToFreewayNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToFreewayUnits + When "DistanceToFreewayUnits" exists in the "Property" metadata + Then "DistanceToFreewayUnits" MUST be "Single Enumeration" data type + And "DistanceToFreewayUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToFreewayUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToGasComments + When "DistanceToGasComments" exists in the "Property" metadata + Then "DistanceToGasComments" MUST be "String" data type + And "DistanceToGasComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToGasNumeric + When "DistanceToGasNumeric" exists in the "Property" metadata + Then "DistanceToGasNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToGasUnits + When "DistanceToGasUnits" exists in the "Property" metadata + Then "DistanceToGasUnits" MUST be "Single Enumeration" data type + And "DistanceToGasUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToGasUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToPhoneServiceComments + When "DistanceToPhoneServiceComments" exists in the "Property" metadata + Then "DistanceToPhoneServiceComments" MUST be "String" data type + And "DistanceToPhoneServiceComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM @IDX + Scenario: DistanceToPhoneServiceNumeric + When "DistanceToPhoneServiceNumeric" exists in the "Property" metadata + Then "DistanceToPhoneServiceNumeric" MUST be "Integer" data type + + @Property @LAND @FARM @IDX + Scenario: DistanceToPhoneServiceUnits + When "DistanceToPhoneServiceUnits" exists in the "Property" metadata + Then "DistanceToPhoneServiceUnits" MUST be "Single Enumeration" data type + And "DistanceToPhoneServiceUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToPhoneServiceUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToPlaceofWorshipComments + When "DistanceToPlaceofWorshipComments" exists in the "Property" metadata + Then "DistanceToPlaceofWorshipComments" MUST be "String" data type + And "DistanceToPlaceofWorshipComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToPlaceofWorshipNumeric + When "DistanceToPlaceofWorshipNumeric" exists in the "Property" metadata + Then "DistanceToPlaceofWorshipNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToPlaceofWorshipUnits + When "DistanceToPlaceofWorshipUnits" exists in the "Property" metadata + Then "DistanceToPlaceofWorshipUnits" MUST be "Single Enumeration" data type + And "DistanceToPlaceofWorshipUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToPlaceofWorshipUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToSchoolBusComments + When "DistanceToSchoolBusComments" exists in the "Property" metadata + Then "DistanceToSchoolBusComments" MUST be "String" data type + And "DistanceToSchoolBusComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToSchoolBusNumeric + When "DistanceToSchoolBusNumeric" exists in the "Property" metadata + Then "DistanceToSchoolBusNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToSchoolBusUnits + When "DistanceToSchoolBusUnits" exists in the "Property" metadata + Then "DistanceToSchoolBusUnits" MUST be "Single Enumeration" data type + And "DistanceToSchoolBusUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToSchoolBusUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToSchoolsComments + When "DistanceToSchoolsComments" exists in the "Property" metadata + Then "DistanceToSchoolsComments" MUST be "String" data type + And "DistanceToSchoolsComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToSchoolsNumeric + When "DistanceToSchoolsNumeric" exists in the "Property" metadata + Then "DistanceToSchoolsNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToSchoolsUnits + When "DistanceToSchoolsUnits" exists in the "Property" metadata + Then "DistanceToSchoolsUnits" MUST be "Single Enumeration" data type + And "DistanceToSchoolsUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToSchoolsUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToSewerComments + When "DistanceToSewerComments" exists in the "Property" metadata + Then "DistanceToSewerComments" MUST be "String" data type + And "DistanceToSewerComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToSewerNumeric + When "DistanceToSewerNumeric" exists in the "Property" metadata + Then "DistanceToSewerNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToSewerUnits + When "DistanceToSewerUnits" exists in the "Property" metadata + Then "DistanceToSewerUnits" MUST be "Single Enumeration" data type + And "DistanceToSewerUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToSewerUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToShoppingComments + When "DistanceToShoppingComments" exists in the "Property" metadata + Then "DistanceToShoppingComments" MUST be "String" data type + And "DistanceToShoppingComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToShoppingNumeric + When "DistanceToShoppingNumeric" exists in the "Property" metadata + Then "DistanceToShoppingNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToShoppingUnits + When "DistanceToShoppingUnits" exists in the "Property" metadata + Then "DistanceToShoppingUnits" MUST be "Single Enumeration" data type + And "DistanceToShoppingUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToShoppingUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToStreetComments + When "DistanceToStreetComments" exists in the "Property" metadata + Then "DistanceToStreetComments" MUST be "String" data type + And "DistanceToStreetComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToStreetNumeric + When "DistanceToStreetNumeric" exists in the "Property" metadata + Then "DistanceToStreetNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToStreetUnits + When "DistanceToStreetUnits" exists in the "Property" metadata + Then "DistanceToStreetUnits" MUST be "Single Enumeration" data type + And "DistanceToStreetUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToStreetUnits" MUST NOT contain any similar lookups + + @Property @LAND @FARM + Scenario: DistanceToWaterComments + When "DistanceToWaterComments" exists in the "Property" metadata + Then "DistanceToWaterComments" MUST be "String" data type + And "DistanceToWaterComments" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @LAND @FARM + Scenario: DistanceToWaterNumeric + When "DistanceToWaterNumeric" exists in the "Property" metadata + Then "DistanceToWaterNumeric" MUST be "Integer" data type + + @Property @LAND @FARM + Scenario: DistanceToWaterUnits + When "DistanceToWaterUnits" exists in the "Property" metadata + Then "DistanceToWaterUnits" MUST be "Single Enumeration" data type + And "DistanceToWaterUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "DistanceToWaterUnits" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @BUSO + Scenario: DocumentsAvailable + When "DocumentsAvailable" exists in the "Property" metadata + Then "DocumentsAvailable" MUST be "Multiple Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: DocumentsChangeTimestamp + When "DocumentsChangeTimestamp" exists in the "Property" metadata + Then "DocumentsChangeTimestamp" MUST be "Timestamp" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: DocumentsCount + When "DocumentsCount" exists in the "Property" metadata + Then "DocumentsCount" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: DoorFeatures + When "DoorFeatures" exists in the "Property" metadata + Then "DoorFeatures" MUST be "Multiple Enumeration" data type + And "DoorFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | EnergyStarQualifiedDoors | ENERGY STAR Qualified Doors | + | FrenchDoors | French Doors | + | MirroredClosetDoors | Mirrored Closet Door(s) | + | SlidingDoors | Sliding Doors | + | StormDoors | Storm Door(s) | + But "DoorFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: DualVariableCompensationYN + When "DualVariableCompensationYN" exists in the "Property" metadata + Then "DualVariableCompensationYN" MUST be "Boolean" data type + And the following synonyms for "DualVariableCompensationYN" MUST NOT exist in the metadata + | DualVariableCompensation | + | DualVariableRateCompensation | + | VariableCompensation | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @IDX + Scenario: Electric + When "Electric" exists in the "Property" metadata + Then "Electric" MUST be "Multiple Enumeration" data type + And "Electric" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Amps100 | 100 Amp Service | + | Amps150 | 150 Amp Service | + | Amps200OrMore | 200+ Amp Service | + | CircuitBreakers | Circuit Breakers | + | EnergyStorageDevice | Energy Storage Device | + | Fuses | Fuses | + | Generator | Generator | + | NetMeter | Net Meter | + | PhotovoltaicsSellerOwned | Photovoltaics Seller Owned | + | PhotovoltaicsThirdPartyOwned | Photovoltaics Third-Party Owned | + | PreWiredForRenewables | Pre-Wired for Renewables | + | ReadyForRenewables | Ready for Renewables | + | Underground | Underground | + | Volts220 | 220 Volts | + | Volts220ForSpa | 220 Volts For Spa | + | Volts220InGarage | 220 Volts in Garage | + | Volts220InKitchen | 220 Volts in Kitchen | + | Volts220InLanudry | 220 Volts in Laundry | + | Volts220InWorkshop | 220 Volts in Workshop | + | Volts440 | 440 Volts | + | WindTurbineSellerOwned | Wind Turbine Seller Owned | + | WindTurbineThirdPartyOwned | Wind Turbine Third-Party Owned | + But "Electric" MUST NOT contain any similar lookups + + @Property @RINC @COMS @COML + Scenario: ElectricExpense + When "ElectricExpense" exists in the "Property" metadata + Then "ElectricExpense" MUST be "Decimal" data type + And "ElectricExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "ElectricExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @LAND @FARM + Scenario: ElectricOnPropertyYN + When "ElectricOnPropertyYN" exists in the "Property" metadata + Then "ElectricOnPropertyYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ElementarySchool + When "ElementarySchool" exists in the "Property" metadata + Then "ElementarySchool" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ElementarySchoolDistrict + When "ElementarySchoolDistrict" exists in the "Property" metadata + Then "ElementarySchoolDistrict" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: Elevation + When "Elevation" exists in the "Property" metadata + Then "Elevation" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: ElevationUnits + When "ElevationUnits" exists in the "Property" metadata + Then "ElevationUnits" MUST be "Single Enumeration" data type + And "ElevationUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "ElevationUnits" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: EntryLevel + When "EntryLevel" exists in the "Property" metadata + Then "EntryLevel" MUST be "Integer" data type + And the following synonyms for "EntryLevel" MUST NOT exist in the metadata + | UnitFloorNumber | + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: EntryLocation + When "EntryLocation" exists in the "Property" metadata + Then "EntryLocation" MUST be "String" data type + And the following synonyms for "EntryLocation" MUST NOT exist in the metadata + | EntryDescription | + And "EntryLocation" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Exclusions + When "Exclusions" exists in the "Property" metadata + Then "Exclusions" MUST be "String" data type + And the following synonyms for "Exclusions" MUST NOT exist in the metadata + | ExclusionRemarks | + And "Exclusions" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Property @RINC @COML + Scenario: ExistingLeaseType + When "ExistingLeaseType" exists in the "Property" metadata + Then "ExistingLeaseType" MUST be "Multiple Enumeration" data type + And "ExistingLeaseType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AbsoluteNet | Absolute Net | + | CpiAdjustment | CPI Adjustment | + | EscalationClause | Escalation Clause | + | Gross | Gross | + | GroundLease | Ground Lease | + | Net | Net | + | Nn | NN | + | Nnn | NNN | + | Oral | Oral | + But "ExistingLeaseType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ExpirationDate + When "ExpirationDate" exists in the "Property" metadata + Then "ExpirationDate" MUST be "Date" data type + And the following synonyms for "ExpirationDate" MUST NOT exist in the metadata + | DateExpired | + | Expired | + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: ExteriorFeatures + When "ExteriorFeatures" exists in the "Property" metadata + Then "ExteriorFeatures" MUST be "Multiple Enumeration" data type + And "ExteriorFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Awnings | Awning(s) | + | Balcony | Balcony | + | Barbecue | Barbecue | + | BasketballCourt | Basketball Court | + | BoatSlip | Boat Slip | + | BuiltInBarbecue | Built-in Barbecue | + | Courtyard | Courtyard | + | CoveredCourtyard | Covered Courtyard | + | Dock | Dock | + | DogRun | Dog Run | + | ElectricGrill | Electric Grill | + | FirePit | Fire Pit | + | Garden | Garden | + | GasGrill | Gas Grill | + | GrayWaterSystem | Gray Water System | + | Kennel | Kennel | + | Lighting | Lighting | + | MistingSystem | Misting System | + | None | None | + | Other | Other | + | OutdoorGrill | Outdoor Grill | + | OutdoorKitchen | Outdoor Kitchen | + | OutdoorShower | Outdoor Shower | + | PermeablePaving | Permeable Paving | + | Playground | Playground | + | PrivateEntrance | Private Entrance | + | PrivateYard | Private Yard | + | RainBarrelCisterns | Rain Barrel/Cistern(s) | + | RainGutters | Rain Gutters | + | RvHookup | RV Hookup | + | Storage | Storage | + | TennisCourts | Tennis Court(s) | + | UncoveredCourtyard | Uncovered Courtyard | + But "ExteriorFeatures" MUST NOT contain any similar lookups + + @Property @FARM + Scenario: FarmCreditServiceInclYN + When "FarmCreditServiceInclYN" exists in the "Property" metadata + Then "FarmCreditServiceInclYN" MUST be "Boolean" data type + + @Property @FARM + Scenario: FarmLandAreaSource + When "FarmLandAreaSource" exists in the "Property" metadata + Then "FarmLandAreaSource" MUST be "Single Enumeration" data type + And "FarmLandAreaSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appraiser | Appraiser | + | Assessor | Assessor | + | Builder | Builder | + | Estimated | Estimated | + | Other | Other | + | Owner | Owner | + | Plans | Plans | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + But "FarmLandAreaSource" MUST NOT contain any similar lookups + + @Property @FARM + Scenario: FarmLandAreaUnits + When "FarmLandAreaUnits" exists in the "Property" metadata + Then "FarmLandAreaUnits" MUST be "Single Enumeration" data type + And "FarmLandAreaUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | SquareFeet | Square Feet | + | SquareMeters | Square Meters | + But "FarmLandAreaUnits" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @IDX + Scenario: Fencing + When "Fencing" exists in the "Property" metadata + Then "Fencing" MUST be "Multiple Enumeration" data type + And "Fencing" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BackYard | Back Yard | + | BarbedWire | Barbed Wire | + | Block | Block | + | Brick | Brick | + | ChainLink | Chain Link | + | CrossFenced | Cross Fenced | + | Electric | Electric | + | Fenced | Fenced | + | FrontYard | Front Yard | + | Full | Full | + | Gate | Gate | + | Invisible | Invisible | + | Masonry | Masonry | + | None | None | + | Other | Other | + | Partial | Partial | + | PartialCross | Partial Cross | + | Perimeter | Perimeter | + | Pipe | Pipe | + | Privacy | Privacy | + | Security | Security | + | SeeRemarks | See Remarks | + | SlumpStone | Slump Stone | + | SplitRail | Split Rail | + | Stone | Stone | + | Vinyl | Vinyl | + | Wire | Wire | + | Wood | Wood | + | WroughtIron | Wrought Iron | + But "Fencing" MUST NOT contain any similar lookups + + @Property @RINC + Scenario: FinancialDataSource + When "FinancialDataSource" exists in the "Property" metadata + Then "FinancialDataSource" MUST be "Multiple Enumeration" data type + And "FinancialDataSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Accountant | Accountant | + | Owner | Owner | + | PropertyManager | Property Manager | + But "FinancialDataSource" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: FireplaceFeatures + When "FireplaceFeatures" exists in the "Property" metadata + Then "FireplaceFeatures" MUST be "Multiple Enumeration" data type + And "FireplaceFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Basement | Basement | + | Bath | Bath | + | Bedroom | Bedroom | + | BlowerFan | Blower Fan | + | Circulating | Circulating | + | Decorative | Decorative | + | Den | Den | + | DiningRoom | Dining Room | + | DoubleSided | Double Sided | + | Electric | Electric | + | EpaCertifiedWoodStove | EPA Certified Wood Stove | + | EpaQualifiedFireplace | EPA Qualified Fireplace | + | FactoryBuilt | Factory Built | + | FamilyRoom | Family Room | + | FirePit | Fire Pit | + | FreeStanding | Free Standing | + | Gas | Gas | + | GasLog | Gas Log | + | GasStarter | Gas Starter | + | GlassDoors | Glass Doors | + | GreatRoom | Great Room | + | Heatilator | Heatilator | + | Insert | Insert | + | Kitchen | Kitchen | + | Library | Library | + | LivingRoom | Living Room | + | Masonry | Masonry | + | MasterBedroom | Master Bedroom | + | Metal | Metal | + | None | None | + | Other | Other | + | Outside | Outside | + | PelletStove | Pellet Stove | + | Propane | Propane | + | RaisedHearth | Raised Hearth | + | RecreationRoom | Recreation Room | + | SealedCombustion | Sealed Combustion | + | SeeRemarks | See Remarks | + | SeeThrough | See Through | + | Stone | Stone | + | Ventless | Ventless | + | WoodBurning | Wood Burning | + | WoodBurningStove | Wood Burning Stove | + | ZeroClearance | Zero Clearance | + But "FireplaceFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: FireplaceYN + When "FireplaceYN" exists in the "Property" metadata + Then "FireplaceYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: FireplacesTotal + When "FireplacesTotal" exists in the "Property" metadata + Then "FireplacesTotal" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: Flooring + When "Flooring" exists in the "Property" metadata + Then "Flooring" MUST be "Multiple Enumeration" data type + And "Flooring" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Adobe | Adobe | + | Bamboo | Bamboo | + | Brick | Brick | + | Carpet | Carpet | + | CeramicTile | Ceramic Tile | + | Clay | Clay | + | Combination | Combination | + | Concrete | Concrete | + | Cork | Cork | + | CriGreenLabelPlusCertifiedCarpet | CRI Green Label Plus Certified Carpet | + | Dirt | Dirt | + | FloorscoreCertifiedFlooring | FloorScore(r) Certified Flooring | + | FscOrSfiCertifiedSourceHardwood | FSC or SFI Certified Source Hardwood | + | Granite | Granite | + | Hardwood | Hardwood | + | Laminate | Laminate | + | Linoleum | Linoleum | + | Marble | Marble | + | None | None | + | Other | Other | + | PaintedStained | Painted/Stained | + | Parquet | Parquet | + | Pavers | Pavers | + | ReclaimedWood | Reclaimed Wood | + | SeeRemarks | See Remarks | + | SimulatedWood | Simulated Wood | + | Slate | Slate | + | Softwood | Softwood | + | Stamped | Stamped | + | Stone | Stone | + | Sustainable | Sustainable | + | Terrazzo | Terrazzo | + | Tile | Tile | + | Varies | Varies | + | Vinyl | Vinyl | + | Wood | Wood | + But "Flooring" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: FoundationArea + When "FoundationArea" exists in the "Property" metadata + Then "FoundationArea" MUST be "Decimal" data type + And "FoundationArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "FoundationArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: FoundationDetails + When "FoundationDetails" exists in the "Property" metadata + Then "FoundationDetails" MUST be "Multiple Enumeration" data type + And "FoundationDetails" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Block | Block | + | BrickMortar | Brick/Mortar | + | Combination | Combination | + | ConcretePerimeter | Concrete Perimeter | + | None | None | + | Other | Other | + | Permanent | Permanent | + | PillarPostPier | Pillar/Post/Pier | + | Raised | Raised | + | SeeRemarks | See Remarks | + | Slab | Slab | + | Stone | Stone | + But "FoundationDetails" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: FrontageLength + When "FrontageLength" exists in the "Property" metadata + Then "FrontageLength" MUST be "String" data type + And "FrontageLength" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: FrontageType + When "FrontageType" exists in the "Property" metadata + Then "FrontageType" MUST be "Multiple Enumeration" data type + And "FrontageType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BayHarbor | Bay/Harbor | + | GolfCourse | Golf Course | + | LagoonEstuary | Lagoon/Estuary | + | Lakefront | Lakefront | + | Oceanfront | Oceanfront | + | Other | Other | + | River | River | + | SeeRemarks | See Remarks | + | Waterfront | Waterfront | + But "FrontageType" MUST NOT contain any similar lookups + + @Property @RINC @COMS @COML + Scenario: FuelExpense + When "FuelExpense" exists in the "Property" metadata + Then "FuelExpense" MUST be "Decimal" data type + And "FuelExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "FuelExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RLSE + Scenario: Furnished + When "Furnished" exists in the "Property" metadata + Then "Furnished" MUST be "Single Enumeration" data type + And "Furnished" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Furnished | Furnished | + | Negotiable | Negotiable | + | Partially | Partially | + | Unfurnished | Unfurnished | + But "Furnished" MUST NOT contain any similar lookups + + @Property @RINC + Scenario: FurnitureReplacementExpense + When "FurnitureReplacementExpense" exists in the "Property" metadata + Then "FurnitureReplacementExpense" MUST be "Decimal" data type + And "FurnitureReplacementExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "FurnitureReplacementExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: GarageSpaces + When "GarageSpaces" exists in the "Property" metadata + Then "GarageSpaces" MUST be "Decimal" data type + And "GarageSpaces" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "GarageSpaces" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: GarageYN + When "GarageYN" exists in the "Property" metadata + Then "GarageYN" MUST be "Boolean" data type + + @Property @RINC + Scenario: GardenerExpense + When "GardenerExpense" exists in the "Property" metadata + Then "GardenerExpense" MUST be "Decimal" data type + And "GardenerExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "GardenerExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @FARM + Scenario: GrazingPermitsBlmYN + When "GrazingPermitsBlmYN" exists in the "Property" metadata + Then "GrazingPermitsBlmYN" MUST be "Boolean" data type + + @Property @FARM + Scenario: GrazingPermitsForestServiceYN + When "GrazingPermitsForestServiceYN" exists in the "Property" metadata + Then "GrazingPermitsForestServiceYN" MUST be "Boolean" data type + + @Property @FARM + Scenario: GrazingPermitsPrivateYN + When "GrazingPermitsPrivateYN" exists in the "Property" metadata + Then "GrazingPermitsPrivateYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: GreenBuildingVerificationType + When "GreenBuildingVerificationType" exists in the "Property" metadata + Then "GreenBuildingVerificationType" MUST be "Multiple Enumeration" data type + And the following synonyms for "GreenBuildingVerificationType" MUST NOT exist in the metadata + | GreenBuildingCertification | + | GreenBuildingVerification | + | GreenBuildingRating | + And "GreenBuildingVerificationType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CertifiedPassiveHouse | Certified Passive House | + | EnergyStarCertifiedHomes | ENERGY STAR Certified Homes | + | Enerphit | EnerPHit | + | HersIndexScore | HERS Index Score | + | HomeEnergyScore | Home Energy Score | + | HomeEnergyUpgradeCertificateOfEnergyEfficiencyImprovements | Home Energy Upgrade Certificate of Energy Efficiency Improvements | + | HomeEnergyUpgradeCertificateOfEnergyEfficiencyPerformance | Home Energy Upgrade Certificate of Energy Efficiency Performance | + | HomePerformanceWithEnergyStar | Home Performance with ENERGY STAR | + | IndoorAirplus | Indoor airPLUS | + | LeedForHomes | LEED For Homes | + | LivingBuildingChallenge | Living Building Challenge | + | NgbsNewConstruction | NGBS New Construction | + | NgbsSmallProjectsRemodel | NGBS Small Projects Remodel | + | NgbsWholeHomeRemodel | NGBS Whole-Home Remodel | + | PhiusPlus | PHIUS+ | + | Watersense | WaterSense | + | ZeroEnergyReadyHome | Zero Energy Ready Home | + But "GreenBuildingVerificationType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: GreenEnergyEfficient + When "GreenEnergyEfficient" exists in the "Property" metadata + Then "GreenEnergyEfficient" MUST be "Multiple Enumeration" data type + And "GreenEnergyEfficient" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appliances | Appliances | + | Construction | Construction | + | Doors | Doors | + | ExposureShade | Exposure/Shade | + | Hvac | HVAC | + | Incentives | Incentives | + | Insulation | Insulation | + | Lighting | Lighting | + | Roof | Roof | + | Thermostat | Thermostat | + | WaterHeater | Water Heater | + | Windows | Windows | + But "GreenEnergyEfficient" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: GreenEnergyGeneration + When "GreenEnergyGeneration" exists in the "Property" metadata + Then "GreenEnergyGeneration" MUST be "Multiple Enumeration" data type + And "GreenEnergyGeneration" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Solar | Solar | + | Wind | Wind | + But "GreenEnergyGeneration" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: GreenIndoorAirQuality + When "GreenIndoorAirQuality" exists in the "Property" metadata + Then "GreenIndoorAirQuality" MUST be "Multiple Enumeration" data type + And "GreenIndoorAirQuality" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | ContaminantControl | Contaminant Control | + | IntegratedPestManagement | Integrated Pest Management | + | MoistureControl | Moisture Control | + | Ventilation | Ventilation | + But "GreenIndoorAirQuality" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: GreenLocation + When "GreenLocation" exists in the "Property" metadata + Then "GreenLocation" MUST be "Multiple Enumeration" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: GreenSustainability + When "GreenSustainability" exists in the "Property" metadata + Then "GreenSustainability" MUST be "Multiple Enumeration" data type + And "GreenSustainability" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | ConservingMethods | Conserving Methods | + | OnsiteRecyclingCenter | Onsite Recycling Center | + | RecyclableMaterials | Recyclable Materials | + | RecycledMaterials | Recycled Materials | + | RegionallySourcedMaterials | Regionally-Sourced Materials | + | RenewableMaterials | Renewable Materials | + | SalvagedMaterials | Salvaged Materials | + But "GreenSustainability" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: GreenWaterConservation + When "GreenWaterConservation" exists in the "Property" metadata + Then "GreenWaterConservation" MUST be "Multiple Enumeration" data type + And "GreenWaterConservation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | EfficientHotWaterDistribution | Efficient Hot Water Distribution | + | GrayWaterSystem | Gray Water System | + | GreenInfrastructure | Green Infrastructure | + | LowFlowFixtures | Low-Flow Fixtures | + | WaterRecycling | Water Recycling | + | WaterSmartLandscaping | Water-Smart Landscaping | + But "GreenWaterConservation" MUST NOT contain any similar lookups + + @Property @RINC @COMS @COML @BUSO + Scenario: GrossIncome + When "GrossIncome" exists in the "Property" metadata + Then "GrossIncome" MUST be "Decimal" data type + And the following synonyms for "GrossIncome" MUST NOT exist in the metadata + | CurrentIncome | + | ActualIncome | + And "GrossIncome" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "GrossIncome" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RINC @COMS @COML @BUSO + Scenario: GrossScheduledIncome + When "GrossScheduledIncome" exists in the "Property" metadata + Then "GrossScheduledIncome" MUST be "Decimal" data type + And the following synonyms for "GrossScheduledIncome" MUST NOT exist in the metadata + | ProformaIncome | + And "GrossScheduledIncome" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "GrossScheduledIncome" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @FARM + Scenario: HabitableResidenceYN + When "HabitableResidenceYN" exists in the "Property" metadata + Then "HabitableResidenceYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: Heating + When "Heating" exists in the "Property" metadata + Then "Heating" MUST be "Multiple Enumeration" data type + And "Heating" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | ActiveSolar | Active Solar | + | Baseboard | Baseboard | + | Ceiling | Ceiling | + | Central | Central | + | Coal | Coal | + | CoalStove | Coal Stove | + | Ductless | Ductless | + | Electric | Electric | + | EnergyStarAccaRsiQualifiedInstallation | ENERGY STAR/ACCA RSI Qualified Installation | + | EnergyStarQualifiedEquipment | ENERGY STAR Qualified Equipment | + | ExhaustFan | Exhaust Fan | + | FireplaceInsert | Fireplace Insert | + | Fireplaces | Fireplace(s) | + | FloorFurnace | Floor Furnace | + | ForcedAir | Forced Air | + | Geothermal | Geothermal | + | Gravity | Gravity | + | HeatPump | Heat Pump | + | HotWater | Hot Water | + | HumidityControl | Humidity Control | + | Kerosene | Kerosene | + | NaturalGas | Natural Gas | + | None | None | + | Oil | Oil | + | Other | Other | + | PassiveSolar | Passive Solar | + | PelletStove | Pellet Stove | + | Propane | Propane | + | PropaneStove | Propane Stove | + | Radiant | Radiant | + | RadiantCeiling | Radiant Ceiling | + | RadiantFloor | Radiant Floor | + | SeeRemarks | See Remarks | + | SeparateMeters | Separate Meters | + | Solar | Solar | + | SpaceHeater | Space Heater | + | Steam | Steam | + | VariesByUnit | Varies by Unit | + | WallFurnace | Wall Furnace | + | Wood | Wood | + | WoodStove | Wood Stove | + | Zoned | Zoned | + But "Heating" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @IDX + Scenario: HeatingYN + When "HeatingYN" exists in the "Property" metadata + Then "HeatingYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: HighSchool + When "HighSchool" exists in the "Property" metadata + Then "HighSchool" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: HighSchoolDistrict + When "HighSchoolDistrict" exists in the "Property" metadata + Then "HighSchoolDistrict" MUST be "Single Enumeration" data type + And the following synonyms for "HighSchoolDistrict" MUST NOT exist in the metadata + | SchoolDistrict | + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: HomeWarrantyYN + When "HomeWarrantyYN" exists in the "Property" metadata + Then "HomeWarrantyYN" MUST be "Boolean" data type + And the following synonyms for "HomeWarrantyYN" MUST NOT exist in the metadata + | HomeWarranty | + + @Property @RESI @RLSE @LAND + Scenario: HorseAmenities + When "HorseAmenities" exists in the "Property" metadata + Then "HorseAmenities" MUST be "Multiple Enumeration" data type + And "HorseAmenities" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Arena | Arena | + | Barn | Barn | + | BoardingFacilities | Boarding Facilities | + | Corrals | Corral(s) | + | HayStorage | Hay Storage | + | None | None | + | Other | Other | + | Paddocks | Paddocks | + | PalpationChute | Palpation Chute | + | Pasture | Pasture | + | RidingTrail | Riding Trail | + | RoundPen | Round Pen | + | SeeRemarks | See Remarks | + | ShavingBin | Shaving Bin | + | Stables | Stable(s) | + | TackRoom | Tack Room | + | TrailerStorage | Trailer Storage | + | WashRack | Wash Rack | + But "HorseAmenities" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @LAND + Scenario: HorseYN + When "HorseYN" exists in the "Property" metadata + Then "HorseYN" MUST be "Boolean" data type + + @Property @BUSO + Scenario: HoursDaysOfOperation + When "HoursDaysOfOperation" exists in the "Property" metadata + Then "HoursDaysOfOperation" MUST be "Multiple Enumeration" data type + And "HoursDaysOfOperation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | EveningsOnly | Evenings Only | + | Open24Hours | Open 24 Hours | + | Open7Days | Open 7 Days | + | Open8HoursDay | Open 8 Hours/Day | + | OpenLessThan8HoursDay | Open -8 Hours/Day | + | OpenMondayFriday | Open Monday-Friday | + | OpenOver8HoursDay | Open 8+ Hours/Day | + | OpenSaturday | Open Saturday | + | OpenSunday | Open Sunday | + But "HoursDaysOfOperation" MUST NOT contain any similar lookups + + @Property @BUSO + Scenario: HoursDaysOfOperationDescription + When "HoursDaysOfOperationDescription" exists in the "Property" metadata + Then "HoursDaysOfOperationDescription" MUST be "String" data type + And "HoursDaysOfOperationDescription" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Inclusions + When "Inclusions" exists in the "Property" metadata + Then "Inclusions" MUST be "String" data type + And the following synonyms for "Inclusions" MUST NOT exist in the metadata + | InclusionRemarks | + And "Inclusions" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Property @RINC @LAND + Scenario: IncomeIncludes + When "IncomeIncludes" exists in the "Property" metadata + Then "IncomeIncludes" MUST be "Multiple Enumeration" data type + And "IncomeIncludes" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Laundry | Laundry | + | Parking | Parking | + | Recreation | Recreation | + | RentOnly | Rent Only | + | RvStorage | RV Storage | + | Storage | Storage | + But "IncomeIncludes" MUST NOT contain any similar lookups + + @Property @RINC @COMS @COML + Scenario: InsuranceExpense + When "InsuranceExpense" exists in the "Property" metadata + Then "InsuranceExpense" MUST be "Decimal" data type + And "InsuranceExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "InsuranceExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: InteriorFeatures + When "InteriorFeatures" exists in the "Property" metadata + Then "InteriorFeatures" MUST be "Multiple Enumeration" data type + And "InteriorFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Bar | Bar | + | BeamedCeilings | Beamed Ceilings | + | Bidet | Bidet | + | Bookcases | Bookcases | + | BreakfastBar | Breakfast Bar | + | BuiltInFeatures | Built-in Features | + | CathedralCeilings | Cathedral Ceiling(s) | + | CedarClosets | Cedar Closet(s) | + | CeilingFans | Ceiling Fan(s) | + | CentralVacuum | Central Vacuum | + | Chandelier | Chandelier | + | CofferedCeilings | Coffered Ceiling(s) | + | CrownMolding | Crown Molding | + | DoubleVanity | Double Vanity | + | DryBar | Dry Bar | + | Dumbwaiter | Dumbwaiter | + | EatInKitchen | Eat-in Kitchen | + | Elevator | Elevator | + | EntranceFoyer | Entrance Foyer | + | GraniteCounters | Granite Counters | + | HighCeilings | High Ceilings | + | HighSpeedInternet | High Speed Internet | + | HisAndHersClosets | His and Hers Closets | + | InLawFloorplan | In-Law Floorplan | + | KitchenIsland | Kitchen Island | + | LaminateCounters | Laminate Counters | + | LowFlowPlumbingFixtures | Low Flow Plumbing Fixtures | + | MasterDownstairs | Master Downstairs | + | NaturalWoodwork | Natural Woodwork | + | OpenFloorplan | Open Floorplan | + | Other | Other | + | Pantry | Pantry | + | RecessedLighting | Recessed Lighting | + | Sauna | Sauna | + | SeeRemarks | See Remarks | + | SmartHome | Smart Home | + | SmartThermostat | Smart Thermostat | + | SoakingTub | Soaking Tub | + | SolarTubes | Solar Tube(s) | + | SoundSystem | Sound System | + | StoneCounters | Stone Counters | + | Storage | Storage | + | TileCounters | Tile Counters | + | TrackLighting | Track Lighting | + | TrayCeilings | Tray Ceiling(s) | + | VaultedCeilings | Vaulted Ceiling(s) | + | WalkInClosets | Walk-In Closet(s) | + | WaterSenseFixtures | WaterSense Fixture(s) | + | WetBar | Wet Bar | + | WiredForData | Wired for Data | + | WiredForSound | Wired for Sound | + But "InteriorFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: InternetAddressDisplayYN + When "InternetAddressDisplayYN" exists in the "Property" metadata + Then "InternetAddressDisplayYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: InternetAutomatedValuationDisplayYN + When "InternetAutomatedValuationDisplayYN" exists in the "Property" metadata + Then "InternetAutomatedValuationDisplayYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: InternetConsumerCommentYN + When "InternetConsumerCommentYN" exists in the "Property" metadata + Then "InternetConsumerCommentYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: InternetEntireListingDisplayYN + When "InternetEntireListingDisplayYN" exists in the "Property" metadata + Then "InternetEntireListingDisplayYN" MUST be "Boolean" data type + + @Property @LAND @FARM + Scenario: IrrigationSource + When "IrrigationSource" exists in the "Property" metadata + Then "IrrigationSource" MUST be "Multiple Enumeration" data type + + @Property @FARM + Scenario: IrrigationWaterRightsAcres + When "IrrigationWaterRightsAcres" exists in the "Property" metadata + Then "IrrigationWaterRightsAcres" MUST be "Decimal" data type + And "IrrigationWaterRightsAcres" precision SHOULD be equal to the RESO Suggested Max Precision of 16 + And "IrrigationWaterRightsAcres" scale SHOULD be equal to the RESO Suggested Max Scale of 4 + + @Property @FARM + Scenario: IrrigationWaterRightsYN + When "IrrigationWaterRightsYN" exists in the "Property" metadata + Then "IrrigationWaterRightsYN" MUST be "Boolean" data type + + @Property @BUSO + Scenario: LaborInformation + When "LaborInformation" exists in the "Property" metadata + Then "LaborInformation" MUST be "Multiple Enumeration" data type + And "LaborInformation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | EmployeeLicenseRequired | Employee License Required | + | NonUnion | Non-Union | + | Union | Union | + But "LaborInformation" MUST NOT contain any similar lookups + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: LandLeaseAmount + When "LandLeaseAmount" exists in the "Property" metadata + Then "LandLeaseAmount" MUST be "Decimal" data type + And the following synonyms for "LandLeaseAmount" MUST NOT exist in the metadata + | SpaceRent | + And "LandLeaseAmount" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "LandLeaseAmount" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: LandLeaseAmountFrequency + When "LandLeaseAmountFrequency" exists in the "Property" metadata + Then "LandLeaseAmountFrequency" MUST be "Single Enumeration" data type + And the following synonyms for "LandLeaseAmountFrequency" MUST NOT exist in the metadata + | FeeFrequency | + And "LandLeaseAmountFrequency" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Annually | Annually | + | BiMonthly | Bi-Monthly | + | BiWeekly | Bi-Weekly | + | Daily | Daily | + | Monthly | Monthly | + | OneTime | One Time | + | Quarterly | Quarterly | + | Seasonal | Seasonal | + | SemiAnnually | Semi-Annually | + | SemiMonthly | Semi-Monthly | + | Weekly | Weekly | + But "LandLeaseAmountFrequency" MUST NOT contain any similar lookups + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: LandLeaseExpirationDate + When "LandLeaseExpirationDate" exists in the "Property" metadata + Then "LandLeaseExpirationDate" MUST be "Date" data type + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: LandLeaseYN + When "LandLeaseYN" exists in the "Property" metadata + Then "LandLeaseYN" MUST be "Boolean" data type + And the following synonyms for "LandLeaseYN" MUST NOT exist in the metadata + | LandFeeLease | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Latitude + When "Latitude" exists in the "Property" metadata + Then "Latitude" MUST be "Decimal" data type + And "Latitude" precision SHOULD be equal to the RESO Suggested Max Precision of 12 + And "Latitude" scale SHOULD be equal to the RESO Suggested Max Scale of 8 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: LaundryFeatures + When "LaundryFeatures" exists in the "Property" metadata + Then "LaundryFeatures" MUST be "Multiple Enumeration" data type + And "LaundryFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CommonArea | Common Area | + | ElectricDryerHookup | Electric Dryer Hookup | + | GasDryerHookup | Gas Dryer Hookup | + | InBasement | In Basement | + | InBathroom | In Bathroom | + | InCarport | In Carport | + | InGarage | In Garage | + | InHall | In Hall | + | InKitchen | In Kitchen | + | Inside | Inside | + | InUnit | In Unit | + | LaundryChute | Laundry Chute | + | LaundryCloset | Laundry Closet | + | LaundryRoom | Laundry Room | + | LowerLevel | Lower Level | + | MainLevel | Main Level | + | MultipleLocations | Multiple Locations | + | None | None | + | Other | Other | + | Outside | Outside | + | SeeRemarks | See Remarks | + | Sink | Sink | + | UpperLevel | Upper Level | + | WasherHookup | Washer Hookup | + But "LaundryFeatures" MUST NOT contain any similar lookups + + @Property @COMS @COML + Scenario: LeasableArea + When "LeasableArea" exists in the "Property" metadata + Then "LeasableArea" MUST be "Decimal" data type + And "LeasableArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "LeasableArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @COMS @COML + Scenario: LeasableAreaUnits + When "LeasableAreaUnits" exists in the "Property" metadata + Then "LeasableAreaUnits" MUST be "Single Enumeration" data type + And "LeasableAreaUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | SquareFeet | Square Feet | + | SquareMeters | Square Meters | + But "LeasableAreaUnits" MUST NOT contain any similar lookups + + @Property @BUSO + Scenario: LeaseAmount + When "LeaseAmount" exists in the "Property" metadata + Then "LeaseAmount" MUST be "Decimal" data type + And "LeaseAmount" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "LeaseAmount" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @BUSO + Scenario: LeaseAmountFrequency + When "LeaseAmountFrequency" exists in the "Property" metadata + Then "LeaseAmountFrequency" MUST be "Single Enumeration" data type + And "LeaseAmountFrequency" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Annually | Annually | + | BiMonthly | Bi-Monthly | + | BiWeekly | Bi-Weekly | + | Daily | Daily | + | Monthly | Monthly | + | OneTime | One Time | + | Quarterly | Quarterly | + | Seasonal | Seasonal | + | SemiAnnually | Semi-Annually | + | SemiMonthly | Semi-Monthly | + | Weekly | Weekly | + But "LeaseAmountFrequency" MUST NOT contain any similar lookups + + @Property @BUSO + Scenario: LeaseAssignableYN + When "LeaseAssignableYN" exists in the "Property" metadata + Then "LeaseAssignableYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: LeaseConsideredYN + When "LeaseConsideredYN" exists in the "Property" metadata + Then "LeaseConsideredYN" MUST be "Boolean" data type + And the following synonyms for "LeaseConsideredYN" MUST NOT exist in the metadata + | IsLeaseConsidered | + | LeaseConsidered | + + @Property @BUSO + Scenario: LeaseExpiration + When "LeaseExpiration" exists in the "Property" metadata + Then "LeaseExpiration" MUST be "Date" data type + + @Property @RLSE + Scenario: LeaseRenewalCompensation + When "LeaseRenewalCompensation" exists in the "Property" metadata + Then "LeaseRenewalCompensation" MUST be "Multiple Enumeration" data type + And "LeaseRenewalCompensation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CallListingAgent | Call Listing Agent | + | CallListingOffice | Call Listing Office | + | CommissionPaidOnTenantPurchase | Commission Paid On Tenant Purchase | + | NoRenewalCommission | No Renewal Commission | + | RenewalCommissionPaid | Renewal Commission Paid | + But "LeaseRenewalCompensation" MUST NOT contain any similar lookups + + @Property @BUSO + Scenario: LeaseRenewalOptionYN + When "LeaseRenewalOptionYN" exists in the "Property" metadata + Then "LeaseRenewalOptionYN" MUST be "Boolean" data type + + @Property @RLSE + Scenario: LeaseTerm + When "LeaseTerm" exists in the "Property" metadata + Then "LeaseTerm" MUST be "Single Enumeration" data type + And "LeaseTerm" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | MonthToMonth | Month To Month | + | Negotiable | Negotiable | + | None | None | + | Other | Other | + | RenewalOption | Renewal Option | + | ShortTermLease | Short Term Lease | + | SixMonths | 6 Months | + | TwelveMonths | 12 Months | + | TwentyFourMonths | 24 Months | + | Weekly | Weekly | + But "LeaseTerm" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: Levels + When "Levels" exists in the "Property" metadata + Then "Levels" MUST be "Multiple Enumeration" data type + And "Levels" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | MultiSplit | Multi/Split | + | One | One | + | OneAndOneHalf | One and One Half | + | ThreeOrMore | Three Or More | + | Two | Two | + But "Levels" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @MOBI + Scenario: License1 + When "License1" exists in the "Property" metadata + Then "License1" MUST be "String" data type + And the following synonyms for "License1" MUST NOT exist in the metadata + | Unit1LicenseNo | + | Unit1Insignia | + And "License1" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @MOBI + Scenario: License2 + When "License2" exists in the "Property" metadata + Then "License2" MUST be "String" data type + And the following synonyms for "License2" MUST NOT exist in the metadata + | Unit2LicenseNo | + | Unit2Insignia | + And "License2" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @MOBI + Scenario: License3 + When "License3" exists in the "Property" metadata + Then "License3" MUST be "String" data type + And the following synonyms for "License3" MUST NOT exist in the metadata + | Unit3LicenseNo | + | Unit3Insignia | + And "License3" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RINC + Scenario: LicensesExpense + When "LicensesExpense" exists in the "Property" metadata + Then "LicensesExpense" MUST be "Decimal" data type + And "LicensesExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "LicensesExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAOR + When "ListAOR" exists in the "Property" metadata + Then "ListAOR" MUST be "Single Enumeration" data type + And the following synonyms for "ListAOR" MUST NOT exist in the metadata + | ListingBoard | + | ListingAssociation | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentAOR + When "ListAgentAOR" exists in the "Property" metadata + Then "ListAgentAOR" MUST be "Single Enumeration" data type + And the following synonyms for "ListAgentAOR" MUST NOT exist in the metadata + | ListMemberAOR | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentDesignation + When "ListAgentDesignation" exists in the "Property" metadata + Then "ListAgentDesignation" MUST be "Multiple Enumeration" data type + And the following synonyms for "ListAgentDesignation" MUST NOT exist in the metadata + | ListMemberDesignation | + And "ListAgentDesignation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AccreditedBuyersRepresentative | Accredited Buyer's Representative / ABR | + | AccreditedLandConsultant | Accredited Land Consultant / ALC | + | AtHomeWithDiversity | At Home With Diversity / AHWD | + | CertifiedCommercialInvestmentMember | Certified Commercial Investment Member / CCIM | + | CertifiedDistressedPropertyExpert | Certified Distressed Property Expert / CDPE | + | CertifiedInternationalPropertySpecialist | Certified International Property Specialist / CIPS | + | CertifiedPropertyManager | Certified Property Manager / CPM | + | CertifiedRealEstateBrokerageManager | Certified Real Estate Brokerage Manager / CRB | + | CertifiedRealEstateTeamSpecialist | Certified Real Estate Team Specialist / C-RETS | + | CertifiedResidentialSpecialist | Certified Residential Specialist / CRS | + | CounselorOfRealEstate | Counselor of Real Estate / CRE | + | ePRO | e-PRO | + | GeneralAccreditedAppraiser | General Accredited Appraiser / GAA | + | GraduateRealtorInstitute | Graduate, REALTOR Institute / GRI | + | MilitaryRelocationProfessional | Military Relocation Professional / MRP | + | NARsGreenDesignation | NAR's Green Designation / GREEN | + | PerformanceManagementNetwork | Performance Management Network / PMN | + | PricingStrategyAdvisor | Pricing Strategy Advisor / PSA | + | RealEstateNegotiationExpert | Real Estate Negotiation Expert / RENE | + | RealtorAssociationCertifiedExecutive | REALTOR Association Certified Executive / RCE | + | ResidentialAccreditedAppraiser | Residential Accredited Appraiser / RAA | + | ResortAndSecondHomePropertySpecialist | Resort & Second-Home Property Specialist / RSPS | + | SellerRepresentativeSpecialist | Seller Representative Specialist / SRS | + | SeniorsRealEstateSpecialist | Seniors Real Estate Specialist / SRES | + | ShortSalesAndForeclosureResource | Short Sales & Foreclosure Resource / SFR | + | SocietyOfIndustrialAndOfficeRealtors | Society of Industrial and Office REALTORS / SIOR | + | TransnationalReferralCertification | Transnational Referral Certification / TRC | + But "ListAgentDesignation" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentDirectPhone + When "ListAgentDirectPhone" exists in the "Property" metadata + Then "ListAgentDirectPhone" MUST be "String" data type + And the following synonyms for "ListAgentDirectPhone" MUST NOT exist in the metadata + | ListMemberDirectPhone | + And "ListAgentDirectPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentEmail + When "ListAgentEmail" exists in the "Property" metadata + Then "ListAgentEmail" MUST be "String" data type + And the following synonyms for "ListAgentEmail" MUST NOT exist in the metadata + | ListMemberEmail | + And "ListAgentEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentFax + When "ListAgentFax" exists in the "Property" metadata + Then "ListAgentFax" MUST be "String" data type + And the following synonyms for "ListAgentFax" MUST NOT exist in the metadata + | ListMemberFax | + And "ListAgentFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListAgentFirstName + When "ListAgentFirstName" exists in the "Property" metadata + Then "ListAgentFirstName" MUST be "String" data type + And the following synonyms for "ListAgentFirstName" MUST NOT exist in the metadata + | ListMemberFirstName | + And "ListAgentFirstName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListAgentFullName + When "ListAgentFullName" exists in the "Property" metadata + Then "ListAgentFullName" MUST be "String" data type + And the following synonyms for "ListAgentFullName" MUST NOT exist in the metadata + | ListMemberFullName | + And "ListAgentFullName" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentHomePhone + When "ListAgentHomePhone" exists in the "Property" metadata + Then "ListAgentHomePhone" MUST be "String" data type + And the following synonyms for "ListAgentHomePhone" MUST NOT exist in the metadata + | ListMemberHomePhone | + And "ListAgentHomePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentKey + When "ListAgentKey" exists in the "Property" metadata + Then "ListAgentKey" MUST be "String" data type + And the following synonyms for "ListAgentKey" MUST NOT exist in the metadata + | ListMemberKey | + And "ListAgentKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentKeyNumeric + When "ListAgentKeyNumeric" exists in the "Property" metadata + Then "ListAgentKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ListAgentKeyNumeric" MUST NOT exist in the metadata + | ListMemberKeyNumeric | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListAgentLastName + When "ListAgentLastName" exists in the "Property" metadata + Then "ListAgentLastName" MUST be "String" data type + And the following synonyms for "ListAgentLastName" MUST NOT exist in the metadata + | ListMemberLastName | + And "ListAgentLastName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentMiddleName + When "ListAgentMiddleName" exists in the "Property" metadata + Then "ListAgentMiddleName" MUST be "String" data type + And the following synonyms for "ListAgentMiddleName" MUST NOT exist in the metadata + | ListMemberMiddleName | + And "ListAgentMiddleName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListAgentMlsId + When "ListAgentMlsId" exists in the "Property" metadata + Then "ListAgentMlsId" MUST be "String" data type + And the following synonyms for "ListAgentMlsId" MUST NOT exist in the metadata + | ListMemberMlsld | + And "ListAgentMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentMobilePhone + When "ListAgentMobilePhone" exists in the "Property" metadata + Then "ListAgentMobilePhone" MUST be "String" data type + And the following synonyms for "ListAgentMobilePhone" MUST NOT exist in the metadata + | ListMemberMobilePhone | + And "ListAgentMobilePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentNamePrefix + When "ListAgentNamePrefix" exists in the "Property" metadata + Then "ListAgentNamePrefix" MUST be "String" data type + And the following synonyms for "ListAgentNamePrefix" MUST NOT exist in the metadata + | ListMemberNamePrefix | + And "ListAgentNamePrefix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentNameSuffix + When "ListAgentNameSuffix" exists in the "Property" metadata + Then "ListAgentNameSuffix" MUST be "String" data type + And the following synonyms for "ListAgentNameSuffix" MUST NOT exist in the metadata + | ListMemberNameSuffix | + And "ListAgentNameSuffix" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentOfficePhone + When "ListAgentOfficePhone" exists in the "Property" metadata + Then "ListAgentOfficePhone" MUST be "String" data type + And the following synonyms for "ListAgentOfficePhone" MUST NOT exist in the metadata + | ListMemberOfficePhone | + And "ListAgentOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentOfficePhoneExt + When "ListAgentOfficePhoneExt" exists in the "Property" metadata + Then "ListAgentOfficePhoneExt" MUST be "String" data type + And the following synonyms for "ListAgentOfficePhoneExt" MUST NOT exist in the metadata + | ListMemberOfficePhoneExt | + And "ListAgentOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentPager + When "ListAgentPager" exists in the "Property" metadata + Then "ListAgentPager" MUST be "String" data type + And the following synonyms for "ListAgentPager" MUST NOT exist in the metadata + | ListMemberPager | + And "ListAgentPager" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentPreferredPhone + When "ListAgentPreferredPhone" exists in the "Property" metadata + Then "ListAgentPreferredPhone" MUST be "String" data type + And the following synonyms for "ListAgentPreferredPhone" MUST NOT exist in the metadata + | ListMemberPreferredPhone | + And "ListAgentPreferredPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentPreferredPhoneExt + When "ListAgentPreferredPhoneExt" exists in the "Property" metadata + Then "ListAgentPreferredPhoneExt" MUST be "String" data type + And the following synonyms for "ListAgentPreferredPhoneExt" MUST NOT exist in the metadata + | ListMemberPreferredPhoneExt | + And "ListAgentPreferredPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentStateLicense + When "ListAgentStateLicense" exists in the "Property" metadata + Then "ListAgentStateLicense" MUST be "String" data type + And the following synonyms for "ListAgentStateLicense" MUST NOT exist in the metadata + | ListMemberStateLicense | + And "ListAgentStateLicense" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentTollFreePhone + When "ListAgentTollFreePhone" exists in the "Property" metadata + Then "ListAgentTollFreePhone" MUST be "String" data type + And the following synonyms for "ListAgentTollFreePhone" MUST NOT exist in the metadata + | ListMemberTollFreePhone | + And "ListAgentTollFreePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentURL + When "ListAgentURL" exists in the "Property" metadata + Then "ListAgentURL" MUST be "String" data type + And the following synonyms for "ListAgentURL" MUST NOT exist in the metadata + | ListMemberURL | + And "ListAgentURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentVoiceMail + When "ListAgentVoiceMail" exists in the "Property" metadata + Then "ListAgentVoiceMail" MUST be "String" data type + And the following synonyms for "ListAgentVoiceMail" MUST NOT exist in the metadata + | ListMemberVoiceMail | + And "ListAgentVoiceMail" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListAgentVoiceMailExt + When "ListAgentVoiceMailExt" exists in the "Property" metadata + Then "ListAgentVoiceMailExt" MUST be "String" data type + And the following synonyms for "ListAgentVoiceMailExt" MUST NOT exist in the metadata + | ListMemberVoiceMailExt | + And "ListAgentVoiceMailExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListOfficeAOR + When "ListOfficeAOR" exists in the "Property" metadata + Then "ListOfficeAOR" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListOfficeEmail + When "ListOfficeEmail" exists in the "Property" metadata + Then "ListOfficeEmail" MUST be "String" data type + And "ListOfficeEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListOfficeFax + When "ListOfficeFax" exists in the "Property" metadata + Then "ListOfficeFax" MUST be "String" data type + And "ListOfficeFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListOfficeKey + When "ListOfficeKey" exists in the "Property" metadata + Then "ListOfficeKey" MUST be "String" data type + And "ListOfficeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListOfficeKeyNumeric + When "ListOfficeKeyNumeric" exists in the "Property" metadata + Then "ListOfficeKeyNumeric" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListOfficeMlsId + When "ListOfficeMlsId" exists in the "Property" metadata + Then "ListOfficeMlsId" MUST be "String" data type + And "ListOfficeMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListOfficeName + When "ListOfficeName" exists in the "Property" metadata + Then "ListOfficeName" MUST be "String" data type + And "ListOfficeName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListOfficePhone + When "ListOfficePhone" exists in the "Property" metadata + Then "ListOfficePhone" MUST be "String" data type + And "ListOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListOfficePhoneExt + When "ListOfficePhoneExt" exists in the "Property" metadata + Then "ListOfficePhoneExt" MUST be "String" data type + And "ListOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListOfficeURL + When "ListOfficeURL" exists in the "Property" metadata + Then "ListOfficeURL" MUST be "String" data type + And "ListOfficeURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListPrice + When "ListPrice" exists in the "Property" metadata + Then "ListPrice" MUST be "Decimal" data type + And the following synonyms for "ListPrice" MUST NOT exist in the metadata + | AskingPrice | + | PriceListing | + | PriceListed | + | CurrentPrice | + And "ListPrice" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "ListPrice" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListPriceLow + When "ListPriceLow" exists in the "Property" metadata + Then "ListPriceLow" MUST be "Decimal" data type + And the following synonyms for "ListPriceLow" MUST NOT exist in the metadata + | LowPriceRange | + | LowRangePrice | + And "ListPriceLow" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "ListPriceLow" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListTeamKey + When "ListTeamKey" exists in the "Property" metadata + Then "ListTeamKey" MUST be "String" data type + And "ListTeamKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListTeamKeyNumeric + When "ListTeamKeyNumeric" exists in the "Property" metadata + Then "ListTeamKeyNumeric" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListTeamName + When "ListTeamName" exists in the "Property" metadata + Then "ListTeamName" MUST be "String" data type + And "ListTeamName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListingAgreement + When "ListingAgreement" exists in the "Property" metadata + Then "ListingAgreement" MUST be "Single Enumeration" data type + And the following synonyms for "ListingAgreement" MUST NOT exist in the metadata + | AgreementType | + And "ListingAgreement" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | ExclusiveAgency | Exclusive Agency | + | ExclusiveRightToLease | Exclusive Right To Lease | + | ExclusiveRightToSell | Exclusive Right To Sell | + | ExclusiveRightWithException | Exclusive Right With Exception | + | Net | Net | + | Open | Open | + | Probate | Probate | + But "ListingAgreement" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListingContractDate + When "ListingContractDate" exists in the "Property" metadata + Then "ListingContractDate" MUST be "Date" data type + And the following synonyms for "ListingContractDate" MUST NOT exist in the metadata + | ListingDate | + | DateOfListing | + | ListDate | + | AgreementDate | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListingId + When "ListingId" exists in the "Property" metadata + Then "ListingId" MUST be "String" data type + And the following synonyms for "ListingId" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + And "ListingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListingKey + When "ListingKey" exists in the "Property" metadata + Then "ListingKey" MUST be "String" data type + And the following synonyms for "ListingKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ListingKeyNumeric + When "ListingKeyNumeric" exists in the "Property" metadata + Then "ListingKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ListingKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListingService + When "ListingService" exists in the "Property" metadata + Then "ListingService" MUST be "Single Enumeration" data type + And the following synonyms for "ListingService" MUST NOT exist in the metadata + | ServiceType | + | ServiceLevel | + And "ListingService" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | EntryOnly | Entry Only | + | FullService | Full Service | + | LimitedService | Limited Service | + But "ListingService" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ListingTerms + When "ListingTerms" exists in the "Property" metadata + Then "ListingTerms" MUST be "Multiple Enumeration" data type + And the following synonyms for "ListingTerms" MUST NOT exist in the metadata + | Terms | + And "ListingTerms" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AllInclusiveTrustDeed | All Inclusive Trust Deed | + | Assumable | Assumable | + | Cash | Cash | + | Contract | Contract | + | Conventional | Conventional | + | Exchange1031 | 1031 Exchange | + | ExistingBonds | Existing Bonds | + | FHA | FHA | + | LandUseFee | Land Use Fee | + | LeaseBack | Lease Back | + | LeaseOption | Lease Option | + | LeasePurchase | Lease Purchase | + | LienRelease | Lien Release | + | OwnerMayCarry | Owner May Carry | + | OwnerPayPoints | Owner Pay Points | + | OwnerWillCarry | Owner Will Carry | + | PrivateFinancingAvailable | Private Financing Available | + | RelocationProperty | Relocation Property | + | SellerEquityShare | Seller Equity Share | + | SpecialFunding | Special Funding | + | Submit | Submit | + | Trade | Trade | + | TrustConveyance | Trust Conveyance | + | TrustDeed | Trust Deed | + | UsdaLoan | USDA Loan | + | VaLoan | VA Loan | + But "ListingTerms" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: LivingArea + When "LivingArea" exists in the "Property" metadata + Then "LivingArea" MUST be "Decimal" data type + And "LivingArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "LivingArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: LivingAreaSource + When "LivingAreaSource" exists in the "Property" metadata + Then "LivingAreaSource" MUST be "Single Enumeration" data type + And "LivingAreaSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appraiser | Appraiser | + | Assessor | Assessor | + | Builder | Builder | + | Estimated | Estimated | + | Other | Other | + | Owner | Owner | + | Plans | Plans | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + But "LivingAreaSource" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: LivingAreaUnits + When "LivingAreaUnits" exists in the "Property" metadata + Then "LivingAreaUnits" MUST be "Single Enumeration" data type + And "LivingAreaUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | SquareFeet | Square Feet | + | SquareMeters | Square Meters | + But "LivingAreaUnits" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: LockBoxLocation + When "LockBoxLocation" exists in the "Property" metadata + Then "LockBoxLocation" MUST be "String" data type + And the following synonyms for "LockBoxLocation" MUST NOT exist in the metadata + | KeySafeLocation | + And "LockBoxLocation" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: LockBoxSerialNumber + When "LockBoxSerialNumber" exists in the "Property" metadata + Then "LockBoxSerialNumber" MUST be "String" data type + And the following synonyms for "LockBoxSerialNumber" MUST NOT exist in the metadata + | KeySafeSerialNumber. | + And "LockBoxSerialNumber" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: LockBoxType + When "LockBoxType" exists in the "Property" metadata + Then "LockBoxType" MUST be "Multiple Enumeration" data type + And the following synonyms for "LockBoxType" MUST NOT exist in the metadata + | KeySafeType | + And "LockBoxType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CallListingOffice | Call Listing Office | + | CallSellerDirect | Call Seller Direct | + | Combo | Combo | + | None | None | + | Other | Other | + | SeeRemarks | See Remarks | + | Sentrilock | SentriLock | + | Supra | Supra | + But "LockBoxType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Longitude + When "Longitude" exists in the "Property" metadata + Then "Longitude" MUST be "Decimal" data type + And "Longitude" precision SHOULD be equal to the RESO Suggested Max Precision of 12 + And "Longitude" scale SHOULD be equal to the RESO Suggested Max Scale of 8 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: LotDimensionsSource + When "LotDimensionsSource" exists in the "Property" metadata + Then "LotDimensionsSource" MUST be "Single Enumeration" data type + And "LotDimensionsSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appraiser | Appraiser | + | Assessor | Assessor | + | Builder | Builder | + | Estimated | Estimated | + | GisCalculated | GIS Calculated | + | Measured | Measured | + | Other | Other | + | Owner | Owner | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + | Survey | Survey | + But "LotDimensionsSource" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @IDX + Scenario: LotFeatures + When "LotFeatures" exists in the "Property" metadata + Then "LotFeatures" MUST be "Multiple Enumeration" data type + And "LotFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Agricultural | Agricultural | + | BackYard | Back Yard | + | Bluff | Bluff | + | CityLot | City Lot | + | Cleared | Cleared | + | CloseToClubhouse | Close to Clubhouse | + | CornerLot | Corner Lot | + | CornersMarked | Corners Marked | + | CulDeSac | Cul-De-Sac | + | DesertBack | Desert Back | + | DesertFront | Desert Front | + | Farm | Farm | + | FewTrees | Few Trees | + | FlagLot | Flag Lot | + | FrontYard | Front Yard | + | Garden | Garden | + | GentleSloping | Gentle Sloping | + | Greenbelt | Greenbelt | + | InteriorLot | Interior Lot | + | IrregularLot | Irregular Lot | + | Landscaped | Landscaped | + | Level | Level | + | ManyTrees | Many Trees | + | Meadow | Meadow | + | NativePlants | Native Plants | + | NearGolfCourse | Near Golf Course | + | NearPublicTransit | Near Public Transit | + | OnGolfCourse | On Golf Course | + | OpenLot | Open Lot | + | Orchards | Orchard(s) | + | Other | Other | + | Pasture | Pasture | + | Paved | Paved | + | PieShapedLot | Pie Shaped Lot | + | Private | Private | + | RectangularLot | Rectangular Lot | + | RockOutcropping | Rock Outcropping | + | RollingSlope | Rolling Slope | + | Secluded | Secluded | + | SeeRemarks | See Remarks | + | Sloped | Sloped | + | SlopedDown | Sloped Down | + | SlopedUp | Sloped Up | + | SplitPossible | Split Possible | + | SprinklersInFront | Sprinklers In Front | + | SprinklersInRear | Sprinklers In Rear | + | SteepSlope | Steep Slope | + | Subdivided | Subdivided | + | Views | Views | + | Waterfall | Waterfall | + | Waterfront | Waterfront | + | Wetlands | Wetlands | + | Wooded | Wooded | + | ZeroLotLine | Zero Lot Line | + But "LotFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: LotSizeAcres + When "LotSizeAcres" exists in the "Property" metadata + Then "LotSizeAcres" MUST be "Decimal" data type + And "LotSizeAcres" precision SHOULD be equal to the RESO Suggested Max Precision of 16 + And "LotSizeAcres" scale SHOULD be equal to the RESO Suggested Max Scale of 4 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: LotSizeArea + When "LotSizeArea" exists in the "Property" metadata + Then "LotSizeArea" MUST be "Decimal" data type + And "LotSizeArea" precision SHOULD be equal to the RESO Suggested Max Precision of 16 + And "LotSizeArea" scale SHOULD be equal to the RESO Suggested Max Scale of 4 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: LotSizeDimensions + When "LotSizeDimensions" exists in the "Property" metadata + Then "LotSizeDimensions" MUST be "String" data type + And "LotSizeDimensions" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: LotSizeSource + When "LotSizeSource" exists in the "Property" metadata + Then "LotSizeSource" MUST be "Single Enumeration" data type + And "LotSizeSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appraiser | Appraiser | + | Assessor | Assessor | + | Builder | Builder | + | Estimated | Estimated | + | Other | Other | + | Owner | Owner | + | Plans | Plans | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + But "LotSizeSource" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: LotSizeSquareFeet + When "LotSizeSquareFeet" exists in the "Property" metadata + Then "LotSizeSquareFeet" MUST be "Decimal" data type + And "LotSizeSquareFeet" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "LotSizeSquareFeet" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: LotSizeUnits + When "LotSizeUnits" exists in the "Property" metadata + Then "LotSizeUnits" MUST be "Single Enumeration" data type + And "LotSizeUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Acres | Acres | + | SquareFeet | Square Feet | + | SquareMeters | Square Meters | + But "LotSizeUnits" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: MLSAreaMajor + When "MLSAreaMajor" exists in the "Property" metadata + Then "MLSAreaMajor" MUST be "Single Enumeration" data type + And the following synonyms for "MLSAreaMajor" MUST NOT exist in the metadata + | MarketingArea | + | MLSArea | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: MLSAreaMinor + When "MLSAreaMinor" exists in the "Property" metadata + Then "MLSAreaMinor" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE + Scenario: MainLevelBathrooms + When "MainLevelBathrooms" exists in the "Property" metadata + Then "MainLevelBathrooms" MUST be "Integer" data type + + @Property @RESI @RLSE + Scenario: MainLevelBedrooms + When "MainLevelBedrooms" exists in the "Property" metadata + Then "MainLevelBedrooms" MUST be "Integer" data type + + @Property @RINC @COMS @COML + Scenario: MaintenanceExpense + When "MaintenanceExpense" exists in the "Property" metadata + Then "MaintenanceExpense" MUST be "Decimal" data type + And "MaintenanceExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "MaintenanceExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: MajorChangeTimestamp + When "MajorChangeTimestamp" exists in the "Property" metadata + Then "MajorChangeTimestamp" MUST be "Timestamp" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: MajorChangeType + When "MajorChangeType" exists in the "Property" metadata + Then "MajorChangeType" MUST be "Single Enumeration" data type + And "MajorChangeType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Active | Active | + | ActiveUnderContract | Active Under Contract | + | BackOnMarket | Back On Market | + | Canceled | Canceled | + | Closed | Closed | + | Deleted | Deleted | + | Expired | Expired | + | Hold | Hold | + | NewListing | New Listing | + | Pending | Pending | + | PriceChange | Price Change | + | Withdrawn | Withdrawn | + But "MajorChangeType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @MOBI + Scenario: Make + When "Make" exists in the "Property" metadata + Then "Make" MUST be "String" data type + And "Make" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RINC + Scenario: ManagerExpense + When "ManagerExpense" exists in the "Property" metadata + Then "ManagerExpense" MUST be "Decimal" data type + And "ManagerExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "ManagerExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: MapCoordinate + When "MapCoordinate" exists in the "Property" metadata + Then "MapCoordinate" MUST be "String" data type + And the following synonyms for "MapCoordinate" MUST NOT exist in the metadata + | MapBookCoordinate | + | ThomasGuide | + | TG# | + | MapBookNumber | + And "MapCoordinate" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: MapCoordinateSource + When "MapCoordinateSource" exists in the "Property" metadata + Then "MapCoordinateSource" MUST be "String" data type + And the following synonyms for "MapCoordinateSource" MUST NOT exist in the metadata + | MapBook | + And "MapCoordinateSource" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: MapURL + When "MapURL" exists in the "Property" metadata + Then "MapURL" MUST be "String" data type + And "MapURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: MiddleOrJuniorSchool + When "MiddleOrJuniorSchool" exists in the "Property" metadata + Then "MiddleOrJuniorSchool" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: MiddleOrJuniorSchoolDistrict + When "MiddleOrJuniorSchoolDistrict" exists in the "Property" metadata + Then "MiddleOrJuniorSchoolDistrict" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: MlsStatus + When "MlsStatus" exists in the "Property" metadata + Then "MlsStatus" MUST be "Single Enumeration" data type + And the following synonyms for "MlsStatus" MUST NOT exist in the metadata + | ListingStatus | + | Status | + + @Property @MOBI + Scenario: MobileDimUnits + When "MobileDimUnits" exists in the "Property" metadata + Then "MobileDimUnits" MUST be "Single Enumeration" data type + And "MobileDimUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "MobileDimUnits" MUST NOT contain any similar lookups + + @Property @MOBI + Scenario: MobileHomeRemainsYN + When "MobileHomeRemainsYN" exists in the "Property" metadata + Then "MobileHomeRemainsYN" MUST be "Boolean" data type + + @Property @MOBI @IDX + Scenario: MobileLength + When "MobileLength" exists in the "Property" metadata + Then "MobileLength" MUST be "Integer" data type + + @Property @MOBI @IDX + Scenario: MobileWidth + When "MobileWidth" exists in the "Property" metadata + Then "MobileWidth" MUST be "Integer" data type + + @Property @RESI @RLSE @MOBI + Scenario: Model + When "Model" exists in the "Property" metadata + Then "Model" MUST be "String" data type + And "Model" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Property" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + And the following synonyms for "ModificationTimestamp" MUST NOT exist in the metadata + | ModificationDateTime | + | DateTimeModified | + | ModDate | + | DateMod | + | UpdateDate | + | UpdateTimestamp | + + @Property @RINC @COMS @COML @BUSO + Scenario: NetOperatingIncome + When "NetOperatingIncome" exists in the "Property" metadata + Then "NetOperatingIncome" MUST be "Decimal" data type + And "NetOperatingIncome" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "NetOperatingIncome" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: NewConstructionYN + When "NewConstructionYN" exists in the "Property" metadata + Then "NewConstructionYN" MUST be "Boolean" data type + + @Property @RINC + Scenario: NewTaxesExpense + When "NewTaxesExpense" exists in the "Property" metadata + Then "NewTaxesExpense" MUST be "Decimal" data type + And "NewTaxesExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "NewTaxesExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RINC @COMS @COML + Scenario: NumberOfBuildings + When "NumberOfBuildings" exists in the "Property" metadata + Then "NumberOfBuildings" MUST be "Integer" data type + And the following synonyms for "NumberOfBuildings" MUST NOT exist in the metadata + | NumberOfUnitsBuildings | + + @Property @BUSO + Scenario: NumberOfFullTimeEmployees + When "NumberOfFullTimeEmployees" exists in the "Property" metadata + Then "NumberOfFullTimeEmployees" MUST be "Integer" data type + + @Property @LAND + Scenario: NumberOfLots + When "NumberOfLots" exists in the "Property" metadata + Then "NumberOfLots" MUST be "Integer" data type + + @Property @MOBI + Scenario: NumberOfPads + When "NumberOfPads" exists in the "Property" metadata + Then "NumberOfPads" MUST be "Integer" data type + + @Property @BUSO + Scenario: NumberOfPartTimeEmployees + When "NumberOfPartTimeEmployees" exists in the "Property" metadata + Then "NumberOfPartTimeEmployees" MUST be "Integer" data type + + @Property @RINC @FARM + Scenario: NumberOfSeparateElectricMeters + When "NumberOfSeparateElectricMeters" exists in the "Property" metadata + Then "NumberOfSeparateElectricMeters" MUST be "Integer" data type + + @Property @RINC @FARM + Scenario: NumberOfSeparateGasMeters + When "NumberOfSeparateGasMeters" exists in the "Property" metadata + Then "NumberOfSeparateGasMeters" MUST be "Integer" data type + + @Property @RINC @FARM + Scenario: NumberOfSeparateWaterMeters + When "NumberOfSeparateWaterMeters" exists in the "Property" metadata + Then "NumberOfSeparateWaterMeters" MUST be "Integer" data type + + @Property @RESI @RLSE + Scenario: NumberOfUnitsInCommunity + When "NumberOfUnitsInCommunity" exists in the "Property" metadata + Then "NumberOfUnitsInCommunity" MUST be "Integer" data type + + @Property @RINC @COMS @COML + Scenario: NumberOfUnitsLeased + When "NumberOfUnitsLeased" exists in the "Property" metadata + Then "NumberOfUnitsLeased" MUST be "Integer" data type + + @Property @RINC + Scenario: NumberOfUnitsMoMo + When "NumberOfUnitsMoMo" exists in the "Property" metadata + Then "NumberOfUnitsMoMo" MUST be "Integer" data type + + @Property @RINC @COMS @COML @IDX + Scenario: NumberOfUnitsTotal + When "NumberOfUnitsTotal" exists in the "Property" metadata + Then "NumberOfUnitsTotal" MUST be "Integer" data type + + @Property @RINC + Scenario: NumberOfUnitsVacant + When "NumberOfUnitsVacant" exists in the "Property" metadata + Then "NumberOfUnitsVacant" MUST be "Integer" data type + + @Property @RESI @RLSE @MOBI + Scenario: OccupantName + When "OccupantName" exists in the "Property" metadata + Then "OccupantName" MUST be "String" data type + And "OccupantName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @MOBI + Scenario: OccupantPhone + When "OccupantPhone" exists in the "Property" metadata + Then "OccupantPhone" MUST be "String" data type + And "OccupantPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @MOBI + Scenario: OccupantType + When "OccupantType" exists in the "Property" metadata + Then "OccupantType" MUST be "Single Enumeration" data type + And "OccupantType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Owner | Owner | + | Tenant | Tenant | + | Vacant | Vacant | + But "OccupantType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: OffMarketDate + When "OffMarketDate" exists in the "Property" metadata + Then "OffMarketDate" MUST be "Date" data type + And the following synonyms for "OffMarketDate" MUST NOT exist in the metadata + | DateOffMarket | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: OffMarketTimestamp + When "OffMarketTimestamp" exists in the "Property" metadata + Then "OffMarketTimestamp" MUST be "Timestamp" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: OnMarketDate + When "OnMarketDate" exists in the "Property" metadata + Then "OnMarketDate" MUST be "Date" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: OnMarketTimestamp + When "OnMarketTimestamp" exists in the "Property" metadata + Then "OnMarketTimestamp" MUST be "Timestamp" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: OpenParkingSpaces + When "OpenParkingSpaces" exists in the "Property" metadata + Then "OpenParkingSpaces" MUST be "Decimal" data type + And the following synonyms for "OpenParkingSpaces" MUST NOT exist in the metadata + | UncoveredParking | + And "OpenParkingSpaces" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "OpenParkingSpaces" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: OpenParkingYN + When "OpenParkingYN" exists in the "Property" metadata + Then "OpenParkingYN" MUST be "Boolean" data type + + @Property @RINC @COMS @COML @BUSO + Scenario: OperatingExpense + When "OperatingExpense" exists in the "Property" metadata + Then "OperatingExpense" MUST be "Decimal" data type + And "OperatingExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "OperatingExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RINC + Scenario: OperatingExpenseIncludes + When "OperatingExpenseIncludes" exists in the "Property" metadata + Then "OperatingExpenseIncludes" MUST be "Multiple Enumeration" data type + And "OperatingExpenseIncludes" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Accounting | Accounting | + | Advertising | Advertising | + | Association | Association | + | CableTv | Cable TV | + | CapitalImprovements | Capital Improvements | + | Depreciation | Depreciation | + | EquipmentRental | Equipment Rental | + | Fuel | Fuel | + | FurnitureReplacement | Furniture Replacement | + | Gardener | Gardener | + | Insurance | Insurance | + | Legal | Legal | + | Licenses | Licenses | + | Maintenance | Maintenance | + | MaintenanceGrounds | Maintenance Grounds | + | MaintenanceStructure | Maintenance Structure | + | Manager | Manager | + | MortgageLoans | Mortgage/Loans | + | NewTax | New Tax | + | Other | Other | + | Parking | Parking | + | PestControl | Pest Control | + | PoolSpa | Pool/Spa | + | ProfessionalManagement | Professional Management | + | Security | Security | + | SnowRemoval | Snow Removal | + | Staff | Staff | + | Supplies | Supplies | + | Trash | Trash | + | Utilities | Utilities | + | VacancyAllowance | Vacancy Allowance | + | WaterSewer | Water/Sewer | + | WorkmansCompensation | Workmans Compensation | + But "OperatingExpenseIncludes" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "Property" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + And the following synonyms for "OriginalEntryTimestamp" MUST NOT exist in the metadata + | EntryDate | + | InputDate | + | DateTimeCreated | + | CreatedDate. | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: OriginalListPrice + When "OriginalListPrice" exists in the "Property" metadata + Then "OriginalListPrice" MUST be "Decimal" data type + And the following synonyms for "OriginalListPrice" MUST NOT exist in the metadata + | OriginalPrice | + And "OriginalListPrice" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "OriginalListPrice" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "Property" metadata + Then "OriginatingSystemID" MUST be "String" data type + And the following synonyms for "OriginatingSystemID" MUST NOT exist in the metadata + | AuthoritativeSystemID | + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: OriginatingSystemKey + When "OriginatingSystemKey" exists in the "Property" metadata + Then "OriginatingSystemKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemKey" MUST NOT exist in the metadata + | ProviderKey | + | AuthoritativeSystemKey | + And "OriginatingSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "Property" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + | AuthoritativeSystem | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: OtherEquipment + When "OtherEquipment" exists in the "Property" metadata + Then "OtherEquipment" MUST be "Multiple Enumeration" data type + And "OtherEquipment" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AirPurifier | Air Purifier | + | CallListingAgent | Call Listing Agent | + | Compressor | Compressor | + | DcWellPump | DC Well Pump | + | Dehumidifier | Dehumidifier | + | FarmEquipment | Farm Equipment | + | FuelTanks | Fuel Tank(s) | + | Generator | Generator | + | HomeTheater | Home Theater | + | Intercom | Intercom | + | IrrigationEquipment | Irrigation Equipment | + | ListAvailable | List Available | + | LivestockEquipment | Livestock Equipment | + | Negotiable | Negotiable | + | None | None | + | OrchardEquipment | Orchard Equipment | + | Other | Other | + | RotaryAntenna | Rotary Antenna | + | SatelliteDish | Satellite Dish | + | TvAntenna | TV Antenna | + | VariesByUnit | Varies by Unit | + But "OtherEquipment" MUST NOT contain any similar lookups + + @Property @RINC @COMS @COML + Scenario: OtherExpense + When "OtherExpense" exists in the "Property" metadata + Then "OtherExpense" MUST be "Decimal" data type + And "OtherExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "OtherExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: OtherParking + When "OtherParking" exists in the "Property" metadata + Then "OtherParking" MUST be "String" data type + And "OtherParking" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: OtherStructures + When "OtherStructures" exists in the "Property" metadata + Then "OtherStructures" MUST be "Multiple Enumeration" data type + And "OtherStructures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AirplaneHangar | Airplane Hangar | + | Arena | Arena | + | Barns | Barn(s) | + | BoatHouse | Boat House | + | Cabana | Cabana | + | Caves | Cave(s) | + | Corrals | Corral(s) | + | CoveredArena | Covered Arena | + | Garages | Garage(s) | + | Gazebo | Gazebo | + | GrainStorage | Grain Storage | + | Greenhouse | Greenhouse | + | GuestHouse | Guest House | + | KennelDogRun | Kennel/Dog Run | + | MobileHome | Mobile Home | + | None | None | + | Other | Other | + | Outbuilding | Outbuilding | + | OutdoorKitchen | Outdoor Kitchen | + | PackingShed | Packing Shed | + | Pergola | Pergola | + | PoolHouse | Pool House | + | PoultryCoop | Poultry Coop | + | Residence | Residence | + | RvBoatStorage | RV/Boat Storage | + | SecondGarage | Second Garage | + | SecondResidence | Second Residence | + | SeeRemarks | See Remarks | + | Sheds | Shed(s) | + | Stables | Stable(s) | + | Storage | Storage | + | TennisCourts | Tennis Court(s) | + | Workshop | Workshop | + But "OtherStructures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: OwnerName + When "OwnerName" exists in the "Property" metadata + Then "OwnerName" MUST be "String" data type + And "OwnerName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RLSE @RINC @COMS @COML + Scenario: OwnerPays + When "OwnerPays" exists in the "Property" metadata + Then "OwnerPays" MUST be "Multiple Enumeration" data type + And "OwnerPays" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AllUtilities | All Utilities | + | AssociationFees | Association Fees | + | CableTv | Cable TV | + | CommonAreaMaintenance | Common Area Maintenance | + | Electricity | Electricity | + | ExteriorMaintenance | Exterior Maintenance | + | Gas | Gas | + | GroundsCare | Grounds Care | + | HotWater | Hot Water | + | HvacMaintenance | HVAC Maintenance | + | Insurance | Insurance | + | JanitorialService | Janitorial Service | + | Management | Management | + | None | None | + | Other | Other | + | OtherTax | Other Tax | + | ParkingFee | Parking Fee | + | PestControl | Pest Control | + | PoolMaintenance | Pool Maintenance | + | Repairs | Repairs | + | RoofMaintenance | Roof Maintenance | + | Security | Security | + | SeeRemarks | See Remarks | + | Sewer | Sewer | + | SnowRemoval | Snow Removal | + | Taxes | Taxes | + | Telephone | Telephone | + | TrashCollection | Trash Collection | + | Water | Water | + But "OwnerPays" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: OwnerPhone + When "OwnerPhone" exists in the "Property" metadata + Then "OwnerPhone" MUST be "String" data type + And "OwnerPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Ownership + When "Ownership" exists in the "Property" metadata + Then "Ownership" MUST be "String" data type + And "Ownership" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Property @BUSO + Scenario: OwnershipType + When "OwnershipType" exists in the "Property" metadata + Then "OwnershipType" MUST be "Single Enumeration" data type + And "OwnershipType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Corporation | Corporation | + | Llc | LLC | + | Partnership | Partnership | + | SoleProprietor | Sole Proprietor | + But "OwnershipType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @IDX + Scenario: ParcelNumber + When "ParcelNumber" exists in the "Property" metadata + Then "ParcelNumber" MUST be "String" data type + And the following synonyms for "ParcelNumber" MUST NOT exist in the metadata + | APN | + | AssessorsParcelNumber | + | TaxID | + | AssessorNumber | + And "ParcelNumber" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @MOBI + Scenario: ParkManagerName + When "ParkManagerName" exists in the "Property" metadata + Then "ParkManagerName" MUST be "String" data type + And "ParkManagerName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @MOBI + Scenario: ParkManagerPhone + When "ParkManagerPhone" exists in the "Property" metadata + Then "ParkManagerPhone" MUST be "String" data type + And "ParkManagerPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @MOBI @COMS @COML @IDX + Scenario: ParkName + When "ParkName" exists in the "Property" metadata + Then "ParkName" MUST be "String" data type + And "ParkName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: ParkingFeatures + When "ParkingFeatures" exists in the "Property" metadata + Then "ParkingFeatures" MUST be "Multiple Enumeration" data type + And "ParkingFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AdditionalParking | Additional Parking | + | Aggregate | Aggregate | + | AlleyAccess | Alley Access | + | Asphalt | Asphalt | + | Assigned | Assigned | + | Attached | Attached | + | AttachedCarport | Attached Carport | + | Basement | Basement | + | Boat | Boat | + | Carport | Carport | + | CircularDriveway | Circular Driveway | + | Common | Common | + | CommunityStructure | Community Structure | + | Concrete | Concrete | + | ConvertedGarage | Converted Garage | + | Covered | Covered | + | Deck | Deck | + | Deeded | Deeded | + | Detached | Detached | + | DetachedCarport | Detached Carport | + | DirectAccess | Direct Access | + | DriveThrough | Drive Through | + | Driveway | Driveway | + | ElectricGate | Electric Gate | + | ElectricVehicleChargingStations | Electric Vehicle Charging Station(s) | + | Enclosed | Enclosed | + | Garage | Garage | + | GarageDoorOpener | Garage Door Opener | + | GarageFacesFront | Garage Faces Front | + | GarageFacesRear | Garage Faces Rear | + | GarageFacesSide | Garage Faces Side | + | Gated | Gated | + | GolfCartGarage | Golf Cart Garage | + | Gravel | Gravel | + | Guest | Guest | + | HeatedGarage | Heated Garage | + | InsideEntrance | Inside Entrance | + | KitchenLevel | Kitchen Level | + | Leased | Leased | + | Lighted | Lighted | + | NoGarage | No Garage | + | None | None | + | OffSite | Off Site | + | OffStreet | Off Street | + | OnSite | On Site | + | OnStreet | On Street | + | Open | Open | + | Other | Other | + | Outside | Outside | + | Oversized | Oversized | + | ParkingLot | Parking Lot | + | ParkingPad | Parking Pad | + | Paved | Paved | + | PaverBlock | Paver Block | + | PermitRequired | Permit Required | + | Private | Private | + | RvAccessParking | RV Access/Parking | + | RvCarport | RV Carport | + | RvGarage | RV Garage | + | RvGated | RV Gated | + | Secured | Secured | + | SeeRemarks | See Remarks | + | SharedDriveway | Shared Driveway | + | SideBySide | Side By Side | + | Storage | Storage | + | Tandem | Tandem | + | Unassigned | Unassigned | + | Underground | Underground | + | Unpaved | Unpaved | + | Valet | Valet | + | VariesByUnit | Varies by Unit | + | WorkshopInGarage | Workshop in Garage | + But "ParkingFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @BUSO + Scenario: ParkingTotal + When "ParkingTotal" exists in the "Property" metadata + Then "ParkingTotal" MUST be "Decimal" data type + And "ParkingTotal" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "ParkingTotal" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @FARM + Scenario: PastureArea + When "PastureArea" exists in the "Property" metadata + Then "PastureArea" MUST be "Decimal" data type + And "PastureArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "PastureArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: PatioAndPorchFeatures + When "PatioAndPorchFeatures" exists in the "Property" metadata + Then "PatioAndPorchFeatures" MUST be "Multiple Enumeration" data type + And "PatioAndPorchFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Awnings | Awning(s) | + | Covered | Covered | + | Deck | Deck | + | Enclosed | Enclosed | + | FrontPorch | Front Porch | + | GlassEnclosed | Glass Enclosed | + | None | None | + | Other | Other | + | Patio | Patio | + | Porch | Porch | + | RearPorch | Rear Porch | + | Screened | Screened | + | SeeRemarks | See Remarks | + | SidePorch | Side Porch | + | Terrace | Terrace | + | WrapAround | Wrap Around | + But "PatioAndPorchFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: PendingTimestamp + When "PendingTimestamp" exists in the "Property" metadata + Then "PendingTimestamp" MUST be "Timestamp" data type + + @Property @RINC + Scenario: PestControlExpense + When "PestControlExpense" exists in the "Property" metadata + Then "PestControlExpense" MUST be "Decimal" data type + And "PestControlExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "PestControlExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RLSE @MOBI + Scenario: PetsAllowed + When "PetsAllowed" exists in the "Property" metadata + Then "PetsAllowed" MUST be "Multiple Enumeration" data type + And "PetsAllowed" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BreedRestrictions | Breed Restrictions | + | Call | Call | + | CatsOk | Cats OK | + | DogsOk | Dogs OK | + | No | No | + | NumberLimit | Number Limit | + | SizeLimit | Size Limit | + | Yes | Yes | + But "PetsAllowed" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: PhotosChangeTimestamp + When "PhotosChangeTimestamp" exists in the "Property" metadata + Then "PhotosChangeTimestamp" MUST be "Timestamp" data type + And the following synonyms for "PhotosChangeTimestamp" MUST NOT exist in the metadata + | PhotoChangeTimestamp | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: PhotosCount + When "PhotosCount" exists in the "Property" metadata + Then "PhotosCount" MUST be "Integer" data type + And the following synonyms for "PhotosCount" MUST NOT exist in the metadata + | PhotoCount | + + @Property @RINC + Scenario: PoolExpense + When "PoolExpense" exists in the "Property" metadata + Then "PoolExpense" MUST be "Decimal" data type + And "PoolExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "PoolExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @IDX + Scenario: PoolFeatures + When "PoolFeatures" exists in the "Property" metadata + Then "PoolFeatures" MUST be "Multiple Enumeration" data type + And "PoolFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AboveGround | Above Ground | + | Association | Association | + | BlackBottom | Black Bottom | + | Cabana | Cabana | + | Community | Community | + | DivingBoard | Diving Board | + | ElectricHeat | Electric Heat | + | EnergyStarQualifiedPoolPump | ENERGY STAR Qualified pool pump | + | Fenced | Fenced | + | Fiberglass | Fiberglass | + | Filtered | Filtered | + | GasHeat | Gas Heat | + | Gunite | Gunite | + | Heated | Heated | + | Indoor | Indoor | + | Infinity | Infinity | + | InGround | In Ground | + | Lap | Lap | + | Liner | Liner | + | None | None | + | Other | Other | + | OutdoorPool | Outdoor Pool | + | PoolCover | Pool Cover | + | PoolSpaCombo | Pool/Spa Combo | + | PoolSweep | Pool Sweep | + | Private | Private | + | SaltWater | Salt Water | + | ScreenEnclosure | Screen Enclosure | + | SeeRemarks | See Remarks | + | SolarCover | Solar Cover | + | SolarHeat | Solar Heat | + | Sport | Sport | + | Tile | Tile | + | Vinyl | Vinyl | + | Waterfall | Waterfall | + But "PoolFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @IDX + Scenario: PoolPrivateYN + When "PoolPrivateYN" exists in the "Property" metadata + Then "PoolPrivateYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Possession + When "Possession" exists in the "Property" metadata + Then "Possession" MUST be "Multiple Enumeration" data type + And "Possession" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CloseOfEscrow | Close Of Escrow | + | ClosePlus1Day | Close Plus 1 Day | + | ClosePlus2Days | Close Plus 2 Days | + | ClosePlus30Days | Close Plus 30 Days | + | ClosePlus3Days | Close Plus 3 Days | + | ClosePlus3To5Days | Close Plus 3 to 5 Days | + | Negotiable | Negotiable | + | Other | Other | + | RentalAgreement | Rental Agreement | + | SeeRemarks | See Remarks | + | SellerRentBack | Seller Rent Back | + | SubjectToTenantRights | Subject To Tenant Rights | + But "Possession" MUST NOT contain any similar lookups + + @Property @LAND @IDX + Scenario: PossibleUse + When "PossibleUse" exists in the "Property" metadata + Then "PossibleUse" MUST be "Multiple Enumeration" data type + And "PossibleUse" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Agricultural | Agricultural | + | Cattle | Cattle | + | Commercial | Commercial | + | Dairy | Dairy | + | Development | Development | + | Farm | Farm | + | Fishery | Fishery | + | Grazing | Grazing | + | HighwayTouristService | Highway/Tourist Service | + | Horses | Horses | + | Hunting | Hunting | + | Industrial | Industrial | + | Investment | Investment | + | Livestock | Livestock | + | ManufacturedHome | Manufactured Home | + | MiniStorage | Mini-Storage | + | MultiFamily | Multi-Family | + | Orchard | Orchard | + | Other | Other | + | Pasture | Pasture | + | PlaceOfWorship | Place of Worship | + | Poultry | Poultry | + | Ranch | Ranch | + | Recreational | Recreational | + | Residential | Residential | + | Retail | Retail | + | SeeRemarks | See Remarks | + | SingleFamily | Single Family | + | Subdevelopment | Subdevelopment | + | Timber | Timber | + | Unimproved | Unimproved | + | Vacant | Vacant | + | Warehouse | Warehouse | + But "PossibleUse" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: PostalCity + When "PostalCity" exists in the "Property" metadata + Then "PostalCity" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: PostalCode + When "PostalCode" exists in the "Property" metadata + Then "PostalCode" MUST be "String" data type + And the following synonyms for "PostalCode" MUST NOT exist in the metadata + | ZipCode | + | Zip | + And "PostalCode" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: PostalCodePlus4 + When "PostalCodePlus4" exists in the "Property" metadata + Then "PostalCodePlus4" MUST be "String" data type + And the following synonyms for "PostalCodePlus4" MUST NOT exist in the metadata + | Zip+4 | + | ZipPlus4 | + And "PostalCodePlus4" length SHOULD be equal to the RESO Suggested Max Length of 4 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: PowerProductionType + When "PowerProductionType" exists in the "Property" metadata + Then "PowerProductionType" MUST be "Multiple Enumeration" data type + And "PowerProductionType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Photovoltaics | Photovoltaics | + | Wind | Wind | + But "PowerProductionType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: PreviousListPrice + When "PreviousListPrice" exists in the "Property" metadata + Then "PreviousListPrice" MUST be "Decimal" data type + And the following synonyms for "PreviousListPrice" MUST NOT exist in the metadata + | PreviousPrice | + | LastPrice | + | ListPriorPrice | + And "PreviousListPrice" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "PreviousListPrice" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: PriceChangeTimestamp + When "PriceChangeTimestamp" exists in the "Property" metadata + Then "PriceChangeTimestamp" MUST be "Timestamp" data type + And the following synonyms for "PriceChangeTimestamp" MUST NOT exist in the metadata + | PriceChangeDateTime | + | PriceChange | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: PrivateOfficeRemarks + When "PrivateOfficeRemarks" exists in the "Property" metadata + Then "PrivateOfficeRemarks" MUST be "String" data type + And "PrivateOfficeRemarks" length SHOULD be equal to the RESO Suggested Max Length of 4000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: PrivateRemarks + When "PrivateRemarks" exists in the "Property" metadata + Then "PrivateRemarks" MUST be "String" data type + And the following synonyms for "PrivateRemarks" MUST NOT exist in the metadata + | AgentRemarks | + | ConfidentialRemarks | + And "PrivateRemarks" length SHOULD be equal to the RESO Suggested Max Length of 4000 + + @Property @RINC @COMS @COML + Scenario: ProfessionalManagementExpense + When "ProfessionalManagementExpense" exists in the "Property" metadata + Then "ProfessionalManagementExpense" MUST be "Decimal" data type + And the following synonyms for "ProfessionalManagementExpense" MUST NOT exist in the metadata + | ManagementCompanyExpense | + And "ProfessionalManagementExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "ProfessionalManagementExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: PropertyAttachedYN + When "PropertyAttachedYN" exists in the "Property" metadata + Then "PropertyAttachedYN" MUST be "Boolean" data type + And the following synonyms for "PropertyAttachedYN" MUST NOT exist in the metadata + | StructureAttachedYN | + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: PropertyCondition + When "PropertyCondition" exists in the "Property" metadata + Then "PropertyCondition" MUST be "Multiple Enumeration" data type + And the following synonyms for "PropertyCondition" MUST NOT exist in the metadata + | StructuralCondition | + | Condition | + And "PropertyCondition" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Fixer | Fixer | + | NewConstruction | New Construction | + | UnderConstruction | Under Construction | + | UpdatedRemodeled | Updated/Remodeled | + But "PropertyCondition" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @MOBI @COMS @COML @BUSO @IDX + Scenario: PropertySubType + When "PropertySubType" exists in the "Property" metadata + Then "PropertySubType" MUST be "Single Enumeration" data type + And "PropertySubType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Agriculture | Agriculture | + | Apartment | Apartment | + | BoatSlip | Boat Slip | + | Business | Business | + | Cabin | Cabin | + | Condominium | Condominium | + | DeededParking | Deeded Parking | + | Duplex | Duplex | + | Farm | Farm | + | HotelMotel | Hotel/Motel | + | Industrial | Industrial | + | ManufacturedHome | Manufactured Home | + | ManufacturedOnLand | Manufactured On Land | + | MixedUse | Mixed Use | + | MobileHome | Mobile Home | + | MultiFamily | Multi Family | + | Office | Office | + | OwnYourOwn | Own Your Own | + | Quadruplex | Quadruplex | + | Ranch | Ranch | + | Retail | Retail | + | SingleFamilyResidence | Single Family Residence | + | StockCooperative | Stock Cooperative | + | Timeshare | Timeshare | + | Townhouse | Townhouse | + | Triplex | Triplex | + | UnimprovedLand | Unimproved Land | + | Warehouse | Warehouse | + But "PropertySubType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: PropertyType + When "PropertyType" exists in the "Property" metadata + Then "PropertyType" MUST be "Single Enumeration" data type + And "PropertyType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BusinessOpportunity | Business Opportunity | + | CommercialLease | Commercial Lease | + | CommercialSale | Commercial Sale | + | Farm | Farm | + | Land | Land | + | ManufacturedInPark | Manufactured In Park | + | Residential | Residential | + | ResidentialIncome | Residential Income | + | ResidentialLease | Residential Lease | + But "PropertyType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: PublicRemarks + When "PublicRemarks" exists in the "Property" metadata + Then "PublicRemarks" MUST be "String" data type + And the following synonyms for "PublicRemarks" MUST NOT exist in the metadata + | PropertyDescription | + | InternetRemarks | + | Remarks | + And "PublicRemarks" length SHOULD be equal to the RESO Suggested Max Length of 4000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: PublicSurveyRange + When "PublicSurveyRange" exists in the "Property" metadata + Then "PublicSurveyRange" MUST be "String" data type + And "PublicSurveyRange" length SHOULD be equal to the RESO Suggested Max Length of 20 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: PublicSurveySection + When "PublicSurveySection" exists in the "Property" metadata + Then "PublicSurveySection" MUST be "String" data type + And "PublicSurveySection" length SHOULD be equal to the RESO Suggested Max Length of 20 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: PublicSurveyTownship + When "PublicSurveyTownship" exists in the "Property" metadata + Then "PublicSurveyTownship" MUST be "String" data type + And "PublicSurveyTownship" length SHOULD be equal to the RESO Suggested Max Length of 20 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: PurchaseContractDate + When "PurchaseContractDate" exists in the "Property" metadata + Then "PurchaseContractDate" MUST be "Date" data type + And the following synonyms for "PurchaseContractDate" MUST NOT exist in the metadata + | PendingDate | + | DatePending | + | UnderContractDate | + | ContractDate | + | LeasePending | + | PendingLeaseDate | + | LeaseAgreementDate | + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: RVParkingDimensions + When "RVParkingDimensions" exists in the "Property" metadata + Then "RVParkingDimensions" MUST be "String" data type + And "RVParkingDimensions" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @FARM + Scenario: RangeArea + When "RangeArea" exists in the "Property" metadata + Then "RangeArea" MUST be "Decimal" data type + And "RangeArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "RangeArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RINC @COMS @COML + Scenario: RentControlYN + When "RentControlYN" exists in the "Property" metadata + Then "RentControlYN" MUST be "Boolean" data type + + @Property @RLSE @MOBI @IDX + Scenario: RentIncludes + When "RentIncludes" exists in the "Property" metadata + Then "RentIncludes" MUST be "Multiple Enumeration" data type + And "RentIncludes" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AllUtilities | All Utilities | + | CableTv | Cable TV | + | Electricity | Electricity | + | Gardener | Gardener | + | Gas | Gas | + | Internet | Internet | + | Management | Management | + | None | None | + | Other | Other | + | SeeRemarks | See Remarks | + | Sewer | Sewer | + | TrashCollection | Trash Collection | + | Water | Water | + But "RentIncludes" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: RoadFrontageType + When "RoadFrontageType" exists in the "Property" metadata + Then "RoadFrontageType" MUST be "Multiple Enumeration" data type + And "RoadFrontageType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Alley | Alley | + | CityStreet | City Street | + | CountyRoad | County Road | + | Easement | Easement | + | Freeway | Freeway | + | Highway | Highway | + | Interstate | Interstate | + | None | None | + | Other | Other | + | PrivateRoad | Private Road | + | SeeRemarks | See Remarks | + | StateRoad | State Road | + | Unimproved | Unimproved | + But "RoadFrontageType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: RoadResponsibility + When "RoadResponsibility" exists in the "Property" metadata + Then "RoadResponsibility" MUST be "Multiple Enumeration" data type + And "RoadResponsibility" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | PrivateMaintainedRoad | Private Maintained Road | + | PublicMaintainedRoad | Public Maintained Road | + | RoadMaintenanceAgreement | Road Maintenance Agreement | + But "RoadResponsibility" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: RoadSurfaceType + When "RoadSurfaceType" exists in the "Property" metadata + Then "RoadSurfaceType" MUST be "Multiple Enumeration" data type + And "RoadSurfaceType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AlleyPaved | Alley Paved | + | Asphalt | Asphalt | + | ChipAndSeal | Chip And Seal | + | Concrete | Concrete | + | Dirt | Dirt | + | Gravel | Gravel | + | None | None | + | Other | Other | + | Paved | Paved | + | SeeRemarks | See Remarks | + | Unimproved | Unimproved | + But "RoadSurfaceType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: Roof + When "Roof" exists in the "Property" metadata + Then "Roof" MUST be "Multiple Enumeration" data type + And "Roof" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Aluminum | Aluminum | + | AsbestosShingle | Asbestos Shingle | + | Asphalt | Asphalt | + | Bahama | Bahama | + | Barrel | Barrel | + | Bituthene | Bituthene | + | BuiltUp | Built-Up | + | Composition | Composition | + | Concrete | Concrete | + | Copper | Copper | + | Elastomeric | Elastomeric | + | Fiberglass | Fiberglass | + | Flat | Flat | + | FlatTile | Flat Tile | + | Foam | Foam | + | GreenRoof | Green Roof | + | Mansard | Mansard | + | Membrane | Membrane | + | Metal | Metal | + | Mixed | Mixed | + | None | None | + | Other | Other | + | RolledHotMop | Rolled/Hot Mop | + | Rubber | Rubber | + | SeeRemarks | See Remarks | + | Shake | Shake | + | Shingle | Shingle | + | Slate | Slate | + | SpanishTile | Spanish Tile | + | Stone | Stone | + | Synthetic | Synthetic | + | TarGravel | Tar/Gravel | + | Tile | Tile | + | Wood | Wood | + But "Roof" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @MOBI @FARM @IDX + Scenario: RoomType + When "RoomType" exists in the "Property" metadata + Then "RoomType" MUST be "Multiple Enumeration" data type + And "RoomType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Basement | Basement | + | Bathroom | Bathroom | + | Bathroom1 | Bathroom 1 | + | Bathroom2 | Bathroom 2 | + | Bathroom3 | Bathroom 3 | + | Bathroom4 | Bathroom 4 | + | Bathroom5 | Bathroom 5 | + | Bedroom | Bedroom | + | Bedroom1 | Bedroom 1 | + | Bedroom2 | Bedroom 2 | + | Bedroom3 | Bedroom 3 | + | Bedroom4 | Bedroom 4 | + | Bedroom5 | Bedroom 5 | + | BonusRoom | Bonus Room | + | Den | Den | + | DiningRoom | Dining Room | + | ExerciseRoom | Exercise Room | + | FamilyRoom | Family Room | + | GameRoom | Game Room | + | GreatRoom | Great Room | + | Gym | Gym | + | Kitchen | Kitchen | + | Laundry | Laundry | + | Library | Library | + | LivingRoom | Living Room | + | Loft | Loft | + | MasterBathroom | Master Bathroom | + | MasterBedroom | Master Bedroom | + | MediaRoom | Media Room | + | Office | Office | + | Sauna | Sauna | + | UtilityRoom | Utility Room | + | Workshop | Workshop | + But "RoomType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: RoomsTotal + When "RoomsTotal" exists in the "Property" metadata + Then "RoomsTotal" MUST be "Integer" data type + + @Property @BUSO + Scenario: SeatingCapacity + When "SeatingCapacity" exists in the "Property" metadata + Then "SeatingCapacity" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML + Scenario: SecurityFeatures + When "SecurityFeatures" exists in the "Property" metadata + Then "SecurityFeatures" MUST be "Multiple Enumeration" data type + And "SecurityFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BuildingSecurity | Building Security | + | CarbonMonoxideDetectors | Carbon Monoxide Detector(s) | + | ClosedCircuitCameras | Closed Circuit Camera(s) | + | FireAlarm | Fire Alarm | + | FireEscape | Fire Escape | + | FireSprinklerSystem | Fire Sprinkler System | + | Firewalls | Firewall(s) | + | GatedCommunity | Gated Community | + | GatedWithGuard | Gated with Guard | + | KeyCardEntry | Key Card Entry | + | Other | Other | + | PanicAlarm | Panic Alarm | + | Prewired | Prewired | + | SecuredGarageParking | Secured Garage/Parking | + | SecurityFence | Security Fence | + | SecurityGate | Security Gate | + | SecurityGuard | Security Guard | + | SecurityLights | Security Lights | + | SecurityService | Security Service | + | SecuritySystem | Security System | + | SecuritySystemLeased | Security System Leased | + | SecuritySystemOwned | Security System Owned | + | SeeRemarks | See Remarks | + | SmokeDetectors | Smoke Detector(s) | + | TwentyFourHourSecurity | 24 Hour Security | + | VariesByUnit | Varies By Unit | + | WindowBars | Window Bars | + | WindowBarsWithQuickRelease | Window Bars with Quick Release | + But "SecurityFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @IDX + Scenario: SeniorCommunityYN + When "SeniorCommunityYN" exists in the "Property" metadata + Then "SeniorCommunityYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @MOBI + Scenario: SerialU + When "SerialU" exists in the "Property" metadata + Then "SerialU" MUST be "String" data type + And the following synonyms for "SerialU" MUST NOT exist in the metadata + | Unit1SerialNo | + And "SerialU" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @MOBI + Scenario: SerialX + When "SerialX" exists in the "Property" metadata + Then "SerialX" MUST be "String" data type + And the following synonyms for "SerialX" MUST NOT exist in the metadata + | Unit2SerialNo | + And "SerialX" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @MOBI + Scenario: SerialXX + When "SerialXX" exists in the "Property" metadata + Then "SerialXX" MUST be "String" data type + And the following synonyms for "SerialXX" MUST NOT exist in the metadata + | Unit3SerialNo | + And "SerialXX" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @IDX + Scenario: Sewer + When "Sewer" exists in the "Property" metadata + Then "Sewer" MUST be "Multiple Enumeration" data type + And "Sewer" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AerobicSeptic | Aerobic Septic | + | Cesspool | Cesspool | + | EngineeredSeptic | Engineered Septic | + | HoldingTank | Holding Tank | + | MoundSeptic | Mound Septic | + | None | None | + | Other | Other | + | PercTestOnFile | Perc Test On File | + | PercTestRequired | Perc Test Required | + | PrivateSewer | Private Sewer | + | PublicSewer | Public Sewer | + | SepticNeeded | Septic Needed | + | SepticTank | Septic Tank | + | SharedSeptic | Shared Septic | + | Unknown | Unknown | + But "Sewer" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingAdvanceNotice + When "ShowingAdvanceNotice" exists in the "Property" metadata + Then "ShowingAdvanceNotice" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingAttendedYN + When "ShowingAttendedYN" exists in the "Property" metadata + Then "ShowingAttendedYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingContactName + When "ShowingContactName" exists in the "Property" metadata + Then "ShowingContactName" MUST be "String" data type + And "ShowingContactName" length SHOULD be equal to the RESO Suggested Max Length of 40 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingContactPhone + When "ShowingContactPhone" exists in the "Property" metadata + Then "ShowingContactPhone" MUST be "String" data type + And the following synonyms for "ShowingContactPhone" MUST NOT exist in the metadata + | ShowingPhone | + And "ShowingContactPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingContactPhoneExt + When "ShowingContactPhoneExt" exists in the "Property" metadata + Then "ShowingContactPhoneExt" MUST be "String" data type + And "ShowingContactPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingContactType + When "ShowingContactType" exists in the "Property" metadata + Then "ShowingContactType" MUST be "Multiple Enumeration" data type + And "ShowingContactType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Agent | Agent | + | Occupant | Occupant | + | Owner | Owner | + | PropertyManager | Property Manager | + But "ShowingContactType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingDays + When "ShowingDays" exists in the "Property" metadata + Then "ShowingDays" MUST be "Multiple Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingEndTime + When "ShowingEndTime" exists in the "Property" metadata + Then "ShowingEndTime" MUST be "Timestamp" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingInstructions + When "ShowingInstructions" exists in the "Property" metadata + Then "ShowingInstructions" MUST be "String" data type + And the following synonyms for "ShowingInstructions" MUST NOT exist in the metadata + | ShowingRemarks | + And "ShowingInstructions" length SHOULD be equal to the RESO Suggested Max Length of 4000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingRequirements + When "ShowingRequirements" exists in the "Property" metadata + Then "ShowingRequirements" MUST be "Multiple Enumeration" data type + And "ShowingRequirements" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AppointmentOnly | Appointment Only | + | CallListingAgent | Call Listing Agent | + | CallListingOffice | Call Listing Office | + | CallManager | Call Manager | + | CallOwner | Call Owner | + | CallTenant | Call Tenant | + | CombinationLockBox | Combination Lock Box | + | DaySleeper | Day Sleeper | + | DoNotShow | Do Not Show | + | EmailListingAgent | Email Listing Agent | + | KeyInOffice | Key In Office | + | Lockbox | Lockbox | + | NoLockbox | No Lockbox | + | NoSign | No Sign | + | Occupied | Occupied | + | PetsOnPremises | Pet(s) on Premises | + | RestrictedHours | Restricted Hours | + | SecuritySystem | Security System | + | SeeRemarks | See Remarks | + | ShowingService | Showing Service | + | TextListingAgent | Text Listing Agent | + | ToBeBuilt | To Be Built | + | TwentyFourHourNotice | 24 Hour Notice | + | UnderConstruction | Under Construction | + But "ShowingRequirements" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: ShowingStartTime + When "ShowingStartTime" exists in the "Property" metadata + Then "ShowingStartTime" MUST be "Timestamp" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: SignOnPropertyYN + When "SignOnPropertyYN" exists in the "Property" metadata + Then "SignOnPropertyYN" MUST be "Boolean" data type + + @Property @MOBI @IDX + Scenario: Skirt + When "Skirt" exists in the "Property" metadata + Then "Skirt" MUST be "Multiple Enumeration" data type + And "Skirt" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Aluminum | Aluminum | + | Block | Block | + | Brick | Brick | + | Combination | Combination | + | Concrete | Concrete | + | Fiberglass | Fiberglass | + | Frame | Frame | + | Glass | Glass | + | Masonite | Masonite | + | Metal | Metal | + | None | None | + | Other | Other | + | Steel | Steel | + | Stone | Stone | + | Stucco | Stucco | + | Synthetic | Synthetic | + | Unknown | Unknown | + | Vinyl | Vinyl | + | Wood | Wood | + But "Skirt" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: SourceSystemID + When "SourceSystemID" exists in the "Property" metadata + Then "SourceSystemID" MUST be "String" data type + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: SourceSystemKey + When "SourceSystemKey" exists in the "Property" metadata + Then "SourceSystemKey" MUST be "String" data type + And the following synonyms for "SourceSystemKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: SourceSystemName + When "SourceSystemName" exists in the "Property" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @IDX + Scenario: SpaFeatures + When "SpaFeatures" exists in the "Property" metadata + Then "SpaFeatures" MUST be "Multiple Enumeration" data type + And "SpaFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AboveGround | Above Ground | + | Bath | Bath | + | Community | Community | + | Fiberglass | Fiberglass | + | Gunite | Gunite | + | Heated | Heated | + | InGround | In Ground | + | None | None | + | Private | Private | + | SeeRemarks | See Remarks | + But "SpaFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: SpaYN + When "SpaYN" exists in the "Property" metadata + Then "SpaYN" MUST be "Boolean" data type + And the following synonyms for "SpaYN" MUST NOT exist in the metadata + | Jacuzzi | + | HotTub | + + @Property @BUSO + Scenario: SpecialLicenses + When "SpecialLicenses" exists in the "Property" metadata + Then "SpecialLicenses" MUST be "Multiple Enumeration" data type + And "SpecialLicenses" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BeerWine | Beer/Wine | + | ClassH | Class H | + | Entertainment | Entertainment | + | Franchise | Franchise | + | Gambling | Gambling | + | Liquor | Liquor | + | Liquor5YearsOrLess | Liquor 5 Years Or Less | + | Liquor5YearsOrMore | Liquor 5 Years Or More | + | LiquorOffSale | Liquor-Off Sale | + | LiquorOnSale | Liquor-On Sale | + | None | None | + | Other | Other | + | Professional | Professional | + But "SpecialLicenses" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: SpecialListingConditions + When "SpecialListingConditions" exists in the "Property" metadata + Then "SpecialListingConditions" MUST be "Multiple Enumeration" data type + And the following synonyms for "SpecialListingConditions" MUST NOT exist in the metadata + | SaleType | + | REO | + | ShortSale | + | NoticeOfDefault | + | Foreclosure | + And "SpecialListingConditions" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Auction | Auction | + | BankruptcyProperty | Bankruptcy Property | + | HudOwned | HUD Owned | + | InForeclosure | In Foreclosure | + | NoticeOfDefault | Notice Of Default | + | ProbateListing | Probate Listing | + | RealEstateOwned | Real Estate Owned | + | ShortSale | Short Sale | + | Standard | Standard | + | ThirdPartyApproval | Third Party Approval | + But "SpecialListingConditions" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StandardStatus + When "StandardStatus" exists in the "Property" metadata + Then "StandardStatus" MUST be "Single Enumeration" data type + And the following synonyms for "StandardStatus" MUST NOT exist in the metadata + | NormalizedListingStatus | + | RetsStatus | + And "StandardStatus" MUST contain at least one of the following standard lookups + | lookupValue | lookupDisplayName | + | Active | Active | + | ActiveUnderContract | Active Under Contract | + | Canceled | Canceled | + | Closed | Closed | + | ComingSoon | Coming Soon | + | Delete | Delete | + | Expired | Expired | + | Hold | Hold | + | Incomplete | Incomplete | + | Pending | Pending | + | Withdrawn | Withdrawn | + And "StandardStatus" MUST contain only standard enumerations + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StateOrProvince + When "StateOrProvince" exists in the "Property" metadata + Then "StateOrProvince" MUST be "Single Enumeration" data type + And "StateOrProvince" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "StateOrProvince" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: StateRegion + When "StateRegion" exists in the "Property" metadata + Then "StateRegion" MUST be "String" data type + And "StateRegion" length SHOULD be equal to the RESO Suggested Max Length of 150 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StatusChangeTimestamp + When "StatusChangeTimestamp" exists in the "Property" metadata + Then "StatusChangeTimestamp" MUST be "Timestamp" data type + And the following synonyms for "StatusChangeTimestamp" MUST NOT exist in the metadata + | StatusDateTime | + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: Stories + When "Stories" exists in the "Property" metadata + Then "Stories" MUST be "Integer" data type + And the following synonyms for "Stories" MUST NOT exist in the metadata + | Floors | + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: StoriesTotal + When "StoriesTotal" exists in the "Property" metadata + Then "StoriesTotal" MUST be "Integer" data type + And the following synonyms for "StoriesTotal" MUST NOT exist in the metadata + | StoriesBuildingTotal | + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: StreetAdditionalInfo + When "StreetAdditionalInfo" exists in the "Property" metadata + Then "StreetAdditionalInfo" MUST be "String" data type + And "StreetAdditionalInfo" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StreetDirPrefix + When "StreetDirPrefix" exists in the "Property" metadata + Then "StreetDirPrefix" MUST be "Single Enumeration" data type + And "StreetDirPrefix" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | E | E | + | N | N | + | NE | NE | + | NW | NW | + | S | S | + | SE | SE | + | SW | SW | + | W | W | + But "StreetDirPrefix" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StreetDirSuffix + When "StreetDirSuffix" exists in the "Property" metadata + Then "StreetDirSuffix" MUST be "Single Enumeration" data type + And "StreetDirSuffix" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | E | E | + | N | N | + | NE | NE | + | NW | NW | + | S | S | + | SE | SE | + | SW | SW | + | W | W | + But "StreetDirSuffix" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StreetName + When "StreetName" exists in the "Property" metadata + Then "StreetName" MUST be "String" data type + And "StreetName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StreetNumber + When "StreetNumber" exists in the "Property" metadata + Then "StreetNumber" MUST be "String" data type + And "StreetNumber" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StreetNumberNumeric + When "StreetNumberNumeric" exists in the "Property" metadata + Then "StreetNumberNumeric" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StreetSuffix + When "StreetSuffix" exists in the "Property" metadata + Then "StreetSuffix" MUST be "Single Enumeration" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: StreetSuffixModifier + When "StreetSuffixModifier" exists in the "Property" metadata + Then "StreetSuffixModifier" MUST be "String" data type + And the following synonyms for "StreetSuffixModifier" MUST NOT exist in the metadata + | StreetSuffixAlternate | + | StreetSuffixExtension. | + And "StreetSuffixModifier" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: StructureType + When "StructureType" exists in the "Property" metadata + Then "StructureType" MUST be "Multiple Enumeration" data type + And the following synonyms for "StructureType" MUST NOT exist in the metadata + | BuildingType | + And "StructureType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Cabin | Cabin | + | Dock | Dock | + | Duplex | Duplex | + | Flex | Flex | + | HotelMotel | Hotel/Motel | + | House | House | + | Industrial | Industrial | + | ManufacturedHouse | Manufactured House | + | MixedUse | Mixed Use | + | MultiFamily | Multi Family | + | None | None | + | Office | Office | + | Quadruplex | Quadruplex | + | Retail | Retail | + | Townhouse | Townhouse | + | Triplex | Triplex | + | Warehouse | Warehouse | + But "StructureType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: SubAgencyCompensation + When "SubAgencyCompensation" exists in the "Property" metadata + Then "SubAgencyCompensation" MUST be "String" data type + And the following synonyms for "SubAgencyCompensation" MUST NOT exist in the metadata + | SubAgentCompensation | + | CoBrokerCompensation | + And "SubAgencyCompensation" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: SubAgencyCompensationType + When "SubAgencyCompensationType" exists in the "Property" metadata + Then "SubAgencyCompensationType" MUST be "Single Enumeration" data type + And the following synonyms for "SubAgencyCompensationType" MUST NOT exist in the metadata + | SubAgentCompensationType | + | CoBrokerCompensationType | + And "SubAgencyCompensationType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Dollars | $ | + | Other | Other | + | Percent | % | + | SeeRemarks | See Remarks | + But "SubAgencyCompensationType" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: SubdivisionName + When "SubdivisionName" exists in the "Property" metadata + Then "SubdivisionName" MUST be "String" data type + And the following synonyms for "SubdivisionName" MUST NOT exist in the metadata + | Builder'sTract | + And "SubdivisionName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RINC + Scenario: SuppliesExpense + When "SuppliesExpense" exists in the "Property" metadata + Then "SuppliesExpense" MUST be "Decimal" data type + And "SuppliesExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "SuppliesExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: SyndicateTo + When "SyndicateTo" exists in the "Property" metadata + Then "SyndicateTo" MUST be "Multiple Enumeration" data type + And "SyndicateTo" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | HomesDotCom | Homes.com | + | Listhub | ListHub | + | RealtorDotCom | Realtor.com | + | ZillowTrulia | Zillow/Trulia | + But "SyndicateTo" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: SyndicationRemarks + When "SyndicationRemarks" exists in the "Property" metadata + Then "SyndicationRemarks" MUST be "String" data type + And the following synonyms for "SyndicationRemarks" MUST NOT exist in the metadata + | AdvertisingRemarks | + And "SyndicationRemarks" length SHOULD be equal to the RESO Suggested Max Length of 4000 + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML @IDX + Scenario: TaxAnnualAmount + When "TaxAnnualAmount" exists in the "Property" metadata + Then "TaxAnnualAmount" MUST be "Decimal" data type + And "TaxAnnualAmount" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "TaxAnnualAmount" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RINC @LAND @MOBI @FARM + Scenario: TaxAssessedValue + When "TaxAssessedValue" exists in the "Property" metadata + Then "TaxAssessedValue" MUST be "Integer" data type + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: TaxBlock + When "TaxBlock" exists in the "Property" metadata + Then "TaxBlock" MUST be "String" data type + And the following synonyms for "TaxBlock" MUST NOT exist in the metadata + | Block | + And "TaxBlock" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RINC @LAND @MOBI @FARM + Scenario: TaxBookNumber + When "TaxBookNumber" exists in the "Property" metadata + Then "TaxBookNumber" MUST be "String" data type + And "TaxBookNumber" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: TaxLegalDescription + When "TaxLegalDescription" exists in the "Property" metadata + Then "TaxLegalDescription" MUST be "String" data type + And the following synonyms for "TaxLegalDescription" MUST NOT exist in the metadata + | LegalDescription | + And "TaxLegalDescription" length SHOULD be equal to the RESO Suggested Max Length of 6000 + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: TaxLot + When "TaxLot" exists in the "Property" metadata + Then "TaxLot" MUST be "String" data type + And the following synonyms for "TaxLot" MUST NOT exist in the metadata + | Lot | + And "TaxLot" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RINC @LAND @MOBI @FARM + Scenario: TaxMapNumber + When "TaxMapNumber" exists in the "Property" metadata + Then "TaxMapNumber" MUST be "String" data type + And "TaxMapNumber" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: TaxOtherAnnualAssessmentAmount + When "TaxOtherAnnualAssessmentAmount" exists in the "Property" metadata + Then "TaxOtherAnnualAssessmentAmount" MUST be "Decimal" data type + And "TaxOtherAnnualAssessmentAmount" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "TaxOtherAnnualAssessmentAmount" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: TaxParcelLetter + When "TaxParcelLetter" exists in the "Property" metadata + Then "TaxParcelLetter" MUST be "String" data type + And "TaxParcelLetter" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @MOBI + Scenario: TaxStatusCurrent + When "TaxStatusCurrent" exists in the "Property" metadata + Then "TaxStatusCurrent" MUST be "Multiple Enumeration" data type + And "TaxStatusCurrent" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Personal | Personal | + | PersonalAndReal | Personal And Real | + | Real | Real | + But "TaxStatusCurrent" MUST NOT contain any similar lookups + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: TaxTract + When "TaxTract" exists in the "Property" metadata + Then "TaxTract" MUST be "String" data type + And the following synonyms for "TaxTract" MUST NOT exist in the metadata + | Tract | + And "TaxTract" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: TaxYear + When "TaxYear" exists in the "Property" metadata + Then "TaxYear" MUST be "Integer" data type + + @Property @RLSE @RINC @COMS @COML + Scenario: TenantPays + When "TenantPays" exists in the "Property" metadata + Then "TenantPays" MUST be "Multiple Enumeration" data type + And the following synonyms for "TenantPays" MUST NOT exist in the metadata + | TenantExpense | + And "TenantPays" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AllUtilities | All Utilities | + | AssociationFees | Association Fees | + | CableTv | Cable TV | + | CommonAreaMaintenance | Common Area Maintenance | + | Electricity | Electricity | + | ExteriorMaintenance | Exterior Maintenance | + | Gas | Gas | + | GroundsCare | Grounds Care | + | HotWater | Hot Water | + | HvacMaintenance | HVAC Maintenance | + | Insurance | Insurance | + | JanitorialService | Janitorial Service | + | Management | Management | + | None | None | + | Other | Other | + | OtherTax | Other Tax | + | ParkingFee | Parking Fee | + | PestControl | Pest Control | + | PoolMaintenance | Pool Maintenance | + | Repairs | Repairs | + | Roof | Roof | + | Security | Security | + | SeeRemarks | See Remarks | + | Sewer | Sewer | + | SnowRemoval | Snow Removal | + | Taxes | Taxes | + | Telephone | Telephone | + | TrashCollection | Trash Collection | + | Water | Water | + But "TenantPays" MUST NOT contain any similar lookups + + @Property @LAND @COMS @COML @IDX + Scenario: Topography + When "Topography" exists in the "Property" metadata + Then "Topography" MUST be "String" data type + And "Topography" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RINC @COMS @COML + Scenario: TotalActualRent + When "TotalActualRent" exists in the "Property" metadata + Then "TotalActualRent" MUST be "Decimal" data type + And "TotalActualRent" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "TotalActualRent" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: Township + When "Township" exists in the "Property" metadata + Then "Township" MUST be "String" data type + And the following synonyms for "Township" MUST NOT exist in the metadata + | Municipality | + | TWP | + And "Township" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: TransactionBrokerCompensation + When "TransactionBrokerCompensation" exists in the "Property" metadata + Then "TransactionBrokerCompensation" MUST be "String" data type + And "TransactionBrokerCompensation" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: TransactionBrokerCompensationType + When "TransactionBrokerCompensationType" exists in the "Property" metadata + Then "TransactionBrokerCompensationType" MUST be "Single Enumeration" data type + And "TransactionBrokerCompensationType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Dollars | $ | + | Other | Other | + | Percent | % | + | SeeRemarks | See Remarks | + But "TransactionBrokerCompensationType" MUST NOT contain any similar lookups + + @Property @RINC @COMS @COML + Scenario: TrashExpense + When "TrashExpense" exists in the "Property" metadata + Then "TrashExpense" MUST be "Decimal" data type + And "TrashExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "TrashExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: UnitNumber + When "UnitNumber" exists in the "Property" metadata + Then "UnitNumber" MUST be "String" data type + And the following synonyms for "UnitNumber" MUST NOT exist in the metadata + | ApartmentNumber | + | SpaceNumber | + | Suite | + And "UnitNumber" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RINC @COMS @COML @IDX + Scenario: UnitTypeType + When "UnitTypeType" exists in the "Property" metadata + Then "UnitTypeType" MUST be "Multiple Enumeration" data type + And "UnitTypeType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Apartments | Apartments | + | Efficiency | Efficiency | + | FourBedroomOrMore | 4 Bedroom Or More | + | Loft | Loft | + | ManagersUnit | Manager's Unit | + | OneBedroom | 1 Bedroom | + | Penthouse | Penthouse | + | Studio | Studio | + | ThreeBedroom | 3 Bedroom | + | TwoBedroom | 2 Bedroom | + But "UnitTypeType" MUST NOT contain any similar lookups + + @Property @RINC + Scenario: UnitsFurnished + When "UnitsFurnished" exists in the "Property" metadata + Then "UnitsFurnished" MUST be "Single Enumeration" data type + And "UnitsFurnished" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AllUnits | All Units | + | None | None | + | VariesByUnit | Varies By Unit | + But "UnitsFurnished" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: UniversalPropertyId + When "UniversalPropertyId" exists in the "Property" metadata + Then "UniversalPropertyId" MUST be "String" data type + And the following synonyms for "UniversalPropertyId" MUST NOT exist in the metadata + | PropertyID | + | PUID | + And "UniversalPropertyId" length SHOULD be equal to the RESO Suggested Max Length of 128 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: UniversalPropertySubId + When "UniversalPropertySubId" exists in the "Property" metadata + Then "UniversalPropertySubId" MUST be "String" data type + And "UniversalPropertySubId" length SHOULD be equal to the RESO Suggested Max Length of 128 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: UnparsedAddress + When "UnparsedAddress" exists in the "Property" metadata + Then "UnparsedAddress" MUST be "String" data type + And the following synonyms for "UnparsedAddress" MUST NOT exist in the metadata + | FullAddress | + And "UnparsedAddress" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @IDX + Scenario: Utilities + When "Utilities" exists in the "Property" metadata + Then "Utilities" MUST be "Multiple Enumeration" data type + And "Utilities" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CableAvailable | Cable Available | + | CableConnected | Cable Connected | + | CableNotAvailable | Cable Not Available | + | ElectricityAvailable | Electricity Available | + | ElectricityConnected | Electricity Connected | + | ElectricityNotAvailable | Electricity Not Available | + | NaturalGasAvailable | Natural Gas Available | + | NaturalGasConnected | Natural Gas Connected | + | NaturalGasNotAvailable | Natural Gas Not Available | + | None | None | + | Other | Other | + | PhoneAvailable | Phone Available | + | PhoneConnected | Phone Connected | + | PhoneNotAvailable | Phone Not Available | + | Propane | Propane | + | SeeRemarks | See Remarks | + | SewerAvailable | Sewer Available | + | SewerConnected | Sewer Connected | + | SewerNotAvailable | Sewer Not Available | + | UndergroundUtilities | Underground Utilities | + | WaterAvailable | Water Available | + | WaterConnected | Water Connected | + | WaterNotAvailable | Water Not Available | + But "Utilities" MUST NOT contain any similar lookups + + @Property @RINC @COMS @COML + Scenario: VacancyAllowance + When "VacancyAllowance" exists in the "Property" metadata + Then "VacancyAllowance" MUST be "Integer" data type + + @Property @COMS @COML + Scenario: VacancyAllowanceRate + When "VacancyAllowanceRate" exists in the "Property" metadata + Then "VacancyAllowanceRate" MUST be "Decimal" data type + And "VacancyAllowanceRate" precision SHOULD be equal to the RESO Suggested Max Precision of 5 + And "VacancyAllowanceRate" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: Vegetation + When "Vegetation" exists in the "Property" metadata + Then "Vegetation" MUST be "Multiple Enumeration" data type + And "Vegetation" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Brush | Brush | + | Cleared | Cleared | + | Crops | Crop(s) | + | Grassed | Grassed | + | HeavilyWooded | Heavily Wooded | + | NaturalState | Natural State | + | Other | Other | + | PartiallyWooded | Partially Wooded | + | SeeRemarks | See Remarks | + | Wooded | Wooded | + But "Vegetation" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: VideosChangeTimestamp + When "VideosChangeTimestamp" exists in the "Property" metadata + Then "VideosChangeTimestamp" MUST be "Timestamp" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: VideosCount + When "VideosCount" exists in the "Property" metadata + Then "VideosCount" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @IDX + Scenario: View + When "View" exists in the "Property" metadata + Then "View" MUST be "Multiple Enumeration" data type + And "View" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Bay | Bay | + | Beach | Beach | + | Bridges | Bridge(s) | + | Canal | Canal | + | Canyon | Canyon | + | City | City | + | CityLights | City Lights | + | CreekStream | Creek/Stream | + | Desert | Desert | + | Downtown | Downtown | + | Forest | Forest | + | Garden | Garden | + | GolfCourse | Golf Course | + | Hills | Hills | + | Lake | Lake | + | Marina | Marina | + | Meadow | Meadow | + | Mountains | Mountain(s) | + | Neighborhood | Neighborhood | + | None | None | + | Ocean | Ocean | + | Orchard | Orchard | + | Other | Other | + | Panoramic | Panoramic | + | ParkGreenbelt | Park/Greenbelt | + | Pasture | Pasture | + | Pond | Pond | + | Pool | Pool | + | Ridge | Ridge | + | River | River | + | Rural | Rural | + | SeeRemarks | See Remarks | + | Skyline | Skyline | + | Territorial | Territorial | + | TreesWoods | Trees/Woods | + | Valley | Valley | + | Vineyard | Vineyard | + | Water | Water | + But "View" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: ViewYN + When "ViewYN" exists in the "Property" metadata + Then "ViewYN" MUST be "Boolean" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: VirtualTourURLBranded + When "VirtualTourURLBranded" exists in the "Property" metadata + Then "VirtualTourURLBranded" MUST be "String" data type + And "VirtualTourURLBranded" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: VirtualTourURLUnbranded + When "VirtualTourURLUnbranded" exists in the "Property" metadata + Then "VirtualTourURLUnbranded" MUST be "String" data type + And "VirtualTourURLUnbranded" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM + Scenario: WalkScore + When "WalkScore" exists in the "Property" metadata + Then "WalkScore" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: WaterBodyName + When "WaterBodyName" exists in the "Property" metadata + Then "WaterBodyName" MUST be "String" data type + And the following synonyms for "WaterBodyName" MUST NOT exist in the metadata + | LakeName | + | RiverName | + | OceanName | + And "WaterBodyName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Property @RINC @COMS @COML + Scenario: WaterSewerExpense + When "WaterSewerExpense" exists in the "Property" metadata + Then "WaterSewerExpense" MUST be "Decimal" data type + And "WaterSewerExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "WaterSewerExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @IDX + Scenario: WaterSource + When "WaterSource" exists in the "Property" metadata + Then "WaterSource" MUST be "Multiple Enumeration" data type + And "WaterSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Cistern | Cistern | + | None | None | + | Other | Other | + | Private | Private | + | Public | Public | + | SeeRemarks | See Remarks | + | SharedWell | Shared Well | + | Spring | Spring | + | Well | Well | + But "WaterSource" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: WaterfrontFeatures + When "WaterfrontFeatures" exists in the "Property" metadata + Then "WaterfrontFeatures" MUST be "Multiple Enumeration" data type + And the following synonyms for "WaterfrontFeatures" MUST NOT exist in the metadata + | LakefrontFeatures | + | OceanfrontFeatures | + | RiverfrontFeatures | + And "WaterfrontFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BeachAccess | Beach Access | + | BeachFront | Beach Front | + | CanalAccess | Canal Access | + | CanalFront | Canal Front | + | Creek | Creek | + | Lagoon | Lagoon | + | Lake | Lake | + | LakeFront | Lake Front | + | LakePrivileges | Lake Privileges | + | NavigableWater | Navigable Water | + | OceanAccess | Ocean Access | + | OceanFront | Ocean Front | + | Pond | Pond | + | RiverAccess | River Access | + | RiverFront | River Front | + | Seawall | Seawall | + | Stream | Stream | + | Waterfront | Waterfront | + But "WaterfrontFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO @IDX + Scenario: WaterfrontYN + When "WaterfrontYN" exists in the "Property" metadata + Then "WaterfrontYN" MUST be "Boolean" data type + And the following synonyms for "WaterfrontYN" MUST NOT exist in the metadata + | Lakefront | + | Oceanfront | + | Riverfront | + + @Property @RESI @RLSE @RINC @MOBI @FARM @IDX + Scenario: WindowFeatures + When "WindowFeatures" exists in the "Property" metadata + Then "WindowFeatures" MUST be "Multiple Enumeration" data type + And "WindowFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AluminumFrames | Aluminum Frames | + | BayWindows | Bay Window(s) | + | Blinds | Blinds | + | DisplayWindows | Display Window(s) | + | DoublePaneWindows | Double Pane Windows | + | Drapes | Drapes | + | EnergyStarQualifiedWindows | ENERGY STAR Qualified Windows | + | GardenWindows | Garden Window(s) | + | InsulatedWindows | Insulated Windows | + | LowEmissivityWindows | Low Emissivity Windows | + | PlantationShutters | Plantation Shutters | + | Screens | Screens | + | Shutters | Shutters | + | Skylights | Skylight(s) | + | SolarScreens | Solar Screens | + | StormWindows | Storm Window(s) | + | TintedWindows | Tinted Windows | + | TriplePaneWindows | Triple Pane Windows | + | WindowCoverings | Window Coverings | + | WindowTreatments | Window Treatments | + | WoodFrames | Wood Frames | + But "WindowFeatures" MUST NOT contain any similar lookups + + @Property @RESI @RLSE @RINC @LAND @MOBI @FARM @COMS @COML @BUSO + Scenario: WithdrawnDate + When "WithdrawnDate" exists in the "Property" metadata + Then "WithdrawnDate" MUST be "Date" data type + + @Property @FARM + Scenario: WoodedArea + When "WoodedArea" exists in the "Property" metadata + Then "WoodedArea" MUST be "Decimal" data type + And "WoodedArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "WoodedArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RINC + Scenario: WorkmansCompensationExpense + When "WorkmansCompensationExpense" exists in the "Property" metadata + Then "WorkmansCompensationExpense" MUST be "Decimal" data type + And "WorkmansCompensationExpense" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "WorkmansCompensationExpense" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @Property @RESI @RLSE @RINC @MOBI @FARM @COMS @COML @IDX + Scenario: YearBuilt + When "YearBuilt" exists in the "Property" metadata + Then "YearBuilt" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: YearBuiltDetails + When "YearBuiltDetails" exists in the "Property" metadata + Then "YearBuiltDetails" MUST be "String" data type + And "YearBuiltDetails" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: YearBuiltEffective + When "YearBuiltEffective" exists in the "Property" metadata + Then "YearBuiltEffective" MUST be "Integer" data type + + @Property @RESI @RLSE @RINC @MOBI @FARM + Scenario: YearBuiltSource + When "YearBuiltSource" exists in the "Property" metadata + Then "YearBuiltSource" MUST be "Single Enumeration" data type + And "YearBuiltSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appraiser | Appraiser | + | Assessor | Assessor | + | Builder | Builder | + | Estimated | Estimated | + | Other | Other | + | Owner | Owner | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + But "YearBuiltSource" MUST NOT contain any similar lookups + + @Property @BUSO + Scenario: YearEstablished + When "YearEstablished" exists in the "Property" metadata + Then "YearEstablished" MUST be "Integer" data type + + @Property @BUSO + Scenario: YearsCurrentOwner + When "YearsCurrentOwner" exists in the "Property" metadata + Then "YearsCurrentOwner" MUST be "Integer" data type + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML @IDX + Scenario: Zoning + When "Zoning" exists in the "Property" metadata + Then "Zoning" MUST be "String" data type + And "Zoning" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Property @RESI @RINC @LAND @MOBI @FARM @COMS @COML + Scenario: ZoningDescription + When "ZoningDescription" exists in the "Property" metadata + Then "ZoningDescription" MUST be "String" data type + And "ZoningDescription" length SHOULD be equal to the RESO Suggested Max Length of 255 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertygreenverification.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertygreenverification.feature new file mode 100644 index 00000000..38f96f6a --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertygreenverification.feature @@ -0,0 +1,171 @@ +# This file was autogenerated on: 20201023121019795 +Feature: PropertyGreenVerification + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @PropertyGreenVerification @IDX + Scenario: GreenBuildingVerificationKey + When "GreenBuildingVerificationKey" exists in the "PropertyGreenVerification" metadata + Then "GreenBuildingVerificationKey" MUST be "String" data type + And "GreenBuildingVerificationKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyGreenVerification @IDX + Scenario: GreenBuildingVerificationKeyNumeric + When "GreenBuildingVerificationKeyNumeric" exists in the "PropertyGreenVerification" metadata + Then "GreenBuildingVerificationKeyNumeric" MUST be "Integer" data type + + @PropertyGreenVerification @IDX + Scenario: GreenBuildingVerificationType + When "GreenBuildingVerificationType" exists in the "PropertyGreenVerification" metadata + Then "GreenBuildingVerificationType" MUST be "Single Enumeration" data type + And the following synonyms for "GreenBuildingVerificationType" MUST NOT exist in the metadata + | GreenBuildingCertification | + | GreenBuildingVerification | + | GreenBuildingRating | + And "GreenBuildingVerificationType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | CertifiedPassiveHouse | Certified Passive House | + | EnergyStarCertifiedHomes | ENERGY STAR Certified Homes | + | Enerphit | EnerPHit | + | HersIndexScore | HERS Index Score | + | HomeEnergyScore | Home Energy Score | + | HomeEnergyUpgradeCertificateOfEnergyEfficiencyImprovements | Home Energy Upgrade Certificate of Energy Efficiency Improvements | + | HomeEnergyUpgradeCertificateOfEnergyEfficiencyPerformance | Home Energy Upgrade Certificate of Energy Efficiency Performance | + | HomePerformanceWithEnergyStar | Home Performance with ENERGY STAR | + | IndoorAirplus | Indoor airPLUS | + | LeedForHomes | LEED For Homes | + | LivingBuildingChallenge | Living Building Challenge | + | NgbsNewConstruction | NGBS New Construction | + | NgbsSmallProjectsRemodel | NGBS Small Projects Remodel | + | NgbsWholeHomeRemodel | NGBS Whole-Home Remodel | + | PhiusPlus | PHIUS+ | + | Watersense | WaterSense | + | ZeroEnergyReadyHome | Zero Energy Ready Home | + But "GreenBuildingVerificationType" MUST NOT contain any similar lookups + + @PropertyGreenVerification @IDX + Scenario: GreenVerificationBody + When "GreenVerificationBody" exists in the "PropertyGreenVerification" metadata + Then "GreenVerificationBody" MUST be "String" data type + And the following synonyms for "GreenVerificationBody" MUST NOT exist in the metadata + | GreenCertifyingBody | + | GreenRatingBody | + And "GreenVerificationBody" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @PropertyGreenVerification @IDX + Scenario: GreenVerificationMetric + When "GreenVerificationMetric" exists in the "PropertyGreenVerification" metadata + Then "GreenVerificationMetric" MUST be "Integer" data type + And the following synonyms for "GreenVerificationMetric" MUST NOT exist in the metadata + | GreenCertificationMetric | + | GreenRatingMetric | + + @PropertyGreenVerification @IDX + Scenario: GreenVerificationRating + When "GreenVerificationRating" exists in the "PropertyGreenVerification" metadata + Then "GreenVerificationRating" MUST be "String" data type + And the following synonyms for "GreenVerificationRating" MUST NOT exist in the metadata + | GreenCertificationRating | + | GreenRating | + And "GreenVerificationRating" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @PropertyGreenVerification @IDX + Scenario: GreenVerificationSource + When "GreenVerificationSource" exists in the "PropertyGreenVerification" metadata + Then "GreenVerificationSource" MUST be "Single Enumeration" data type + And the following synonyms for "GreenVerificationSource" MUST NOT exist in the metadata + | GreenRatingSource | + | GreenCertificationSource | + And "GreenVerificationSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Administrator | Administrator | + | Assessor | Assessor | + | Builder | Builder | + | ContractorOrInstaller | Contractor or Installer | + | Other | Other | + | Owner | Owner | + | ProgramSponsor | Program Sponsor | + | ProgramVerifier | Program Verifier | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + But "GreenVerificationSource" MUST NOT contain any similar lookups + + @PropertyGreenVerification @IDX + Scenario: GreenVerificationStatus + When "GreenVerificationStatus" exists in the "PropertyGreenVerification" metadata + Then "GreenVerificationStatus" MUST be "Single Enumeration" data type + And the following synonyms for "GreenVerificationStatus" MUST NOT exist in the metadata + | GreenRatingStatus | + | GreenCertificationStatus | + And "GreenVerificationStatus" MUST contain at least one of the following standard lookups + | lookupValue | lookupDisplayName | + | Complete | Complete | + | InProcess | In Process | + And "GreenVerificationStatus" MUST contain only standard enumerations + + @PropertyGreenVerification @IDX + Scenario: GreenVerificationURL + When "GreenVerificationURL" exists in the "PropertyGreenVerification" metadata + Then "GreenVerificationURL" MUST be "String" data type + And the following synonyms for "GreenVerificationURL" MUST NOT exist in the metadata + | GreenRatingURL | + | GreenCertificationURL | + And "GreenVerificationURL" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @PropertyGreenVerification @IDX + Scenario: GreenVerificationVersion + When "GreenVerificationVersion" exists in the "PropertyGreenVerification" metadata + Then "GreenVerificationVersion" MUST be "String" data type + And the following synonyms for "GreenVerificationVersion" MUST NOT exist in the metadata + | GreenRatingVersion | + | GreenCertificationVersion | + And "GreenVerificationVersion" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @PropertyGreenVerification @IDX + Scenario: GreenVerificationYear + When "GreenVerificationYear" exists in the "PropertyGreenVerification" metadata + Then "GreenVerificationYear" MUST be "Integer" data type + And the following synonyms for "GreenVerificationYear" MUST NOT exist in the metadata + | GreenYearCertified | + | GreenRatingYear | + + @PropertyGreenVerification @IDX + Scenario: ListingId + When "ListingId" exists in the "PropertyGreenVerification" metadata + Then "ListingId" MUST be "String" data type + And the following synonyms for "ListingId" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + And "ListingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyGreenVerification @IDX + Scenario: ListingKey + When "ListingKey" exists in the "PropertyGreenVerification" metadata + Then "ListingKey" MUST be "String" data type + And the following synonyms for "ListingKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyGreenVerification @IDX + Scenario: ListingKeyNumeric + When "ListingKeyNumeric" exists in the "PropertyGreenVerification" metadata + Then "ListingKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ListingKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @PropertyGreenVerification @IDX + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "PropertyGreenVerification" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertypowerproduction.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertypowerproduction.feature new file mode 100644 index 00000000..8232e197 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertypowerproduction.feature @@ -0,0 +1,94 @@ +# This file was autogenerated on: 20201023121019795 +Feature: PropertyPowerProduction + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @PropertyPowerProduction + Scenario: ListingId + When "ListingId" exists in the "PropertyPowerProduction" metadata + Then "ListingId" MUST be "String" data type + And the following synonyms for "ListingId" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + And "ListingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyPowerProduction + Scenario: ListingKey + When "ListingKey" exists in the "PropertyPowerProduction" metadata + Then "ListingKey" MUST be "String" data type + And the following synonyms for "ListingKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyPowerProduction + Scenario: ListingKeyNumeric + When "ListingKeyNumeric" exists in the "PropertyPowerProduction" metadata + Then "ListingKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ListingKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @PropertyPowerProduction + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "PropertyPowerProduction" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @PropertyPowerProduction + Scenario: PowerProductionAnnual + When "PowerProductionAnnual" exists in the "PropertyPowerProduction" metadata + Then "PowerProductionAnnual" MUST be "Integer" data type + + @PropertyPowerProduction + Scenario: PowerProductionAnnualStatus + When "PowerProductionAnnualStatus" exists in the "PropertyPowerProduction" metadata + Then "PowerProductionAnnualStatus" MUST be "Single Enumeration" data type + And "PowerProductionAnnualStatus" MUST contain at least one of the following standard lookups + | lookupValue | lookupDisplayName | + | Actual | Actual | + | Estimated | Estimated | + | PartiallyEstimated | Partially Estimated | + And "PowerProductionAnnualStatus" MUST contain only standard enumerations + + @PropertyPowerProduction + Scenario: PowerProductionKey + When "PowerProductionKey" exists in the "PropertyPowerProduction" metadata + Then "PowerProductionKey" MUST be "String" data type + And "PowerProductionKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyPowerProduction + Scenario: PowerProductionKeyNumeric + When "PowerProductionKeyNumeric" exists in the "PropertyPowerProduction" metadata + Then "PowerProductionKeyNumeric" MUST be "Integer" data type + + @PropertyPowerProduction + Scenario: PowerProductionSize + When "PowerProductionSize" exists in the "PropertyPowerProduction" metadata + Then "PowerProductionSize" MUST be "Decimal" data type + And "PowerProductionSize" precision SHOULD be equal to the RESO Suggested Max Precision of 5 + And "PowerProductionSize" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @PropertyPowerProduction + Scenario: PowerProductionType + When "PowerProductionType" exists in the "PropertyPowerProduction" metadata + Then "PowerProductionType" MUST be "Single Enumeration" data type + And "PowerProductionType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Photovoltaics | Photovoltaics | + | Wind | Wind | + But "PowerProductionType" MUST NOT contain any similar lookups + + @PropertyPowerProduction + Scenario: PowerProductionYearInstall + When "PowerProductionYearInstall" exists in the "PropertyPowerProduction" metadata + Then "PowerProductionYearInstall" MUST be "Integer" data type diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertyrooms.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertyrooms.feature new file mode 100644 index 00000000..06059849 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertyrooms.feature @@ -0,0 +1,226 @@ +# This file was autogenerated on: 20201023121019795 +Feature: PropertyRooms + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @PropertyRooms + Scenario: ListingId + When "ListingId" exists in the "PropertyRooms" metadata + Then "ListingId" MUST be "String" data type + And the following synonyms for "ListingId" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + And "ListingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyRooms + Scenario: ListingKey + When "ListingKey" exists in the "PropertyRooms" metadata + Then "ListingKey" MUST be "String" data type + And the following synonyms for "ListingKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyRooms + Scenario: ListingKeyNumeric + When "ListingKeyNumeric" exists in the "PropertyRooms" metadata + Then "ListingKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ListingKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @PropertyRooms + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "PropertyRooms" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @PropertyRooms + Scenario: RoomArea + When "RoomArea" exists in the "PropertyRooms" metadata + Then "RoomArea" MUST be "Decimal" data type + And "RoomArea" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "RoomArea" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @PropertyRooms + Scenario: RoomAreaSource + When "RoomAreaSource" exists in the "PropertyRooms" metadata + Then "RoomAreaSource" MUST be "Single Enumeration" data type + And "RoomAreaSource" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Appraiser | Appraiser | + | Assessor | Assessor | + | Builder | Builder | + | Estimated | Estimated | + | Other | Other | + | Owner | Owner | + | Plans | Plans | + | PublicRecords | Public Records | + | SeeRemarks | See Remarks | + But "RoomAreaSource" MUST NOT contain any similar lookups + + @PropertyRooms + Scenario: RoomAreaUnits + When "RoomAreaUnits" exists in the "PropertyRooms" metadata + Then "RoomAreaUnits" MUST be "Single Enumeration" data type + And "RoomAreaUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | SquareFeet | Square Feet | + | SquareMeters | Square Meters | + But "RoomAreaUnits" MUST NOT contain any similar lookups + + @PropertyRooms + Scenario: RoomDescription + When "RoomDescription" exists in the "PropertyRooms" metadata + Then "RoomDescription" MUST be "String" data type + And "RoomDescription" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @PropertyRooms + Scenario: RoomDimensions + When "RoomDimensions" exists in the "PropertyRooms" metadata + Then "RoomDimensions" MUST be "String" data type + And "RoomDimensions" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @PropertyRooms + Scenario: RoomFeatures + When "RoomFeatures" exists in the "PropertyRooms" metadata + Then "RoomFeatures" MUST be "Multiple Enumeration" data type + And "RoomFeatures" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Bar | Bar | + | BeamedCeilings | Beamed Ceilings | + | Bidet | Bidet | + | Bookcases | Bookcases | + | BreakfastBar | Breakfast Bar | + | BuiltInFeatures | Built-in Features | + | CathedralCeilings | Cathedral Ceiling(s) | + | CedarClosets | Cedar Closet(s) | + | CeilingFans | Ceiling Fan(s) | + | CentralVacuum | Central Vacuum | + | Chandelier | Chandelier | + | CofferedCeilings | Coffered Ceiling(s) | + | CrownMolding | Crown Molding | + | DoubleVanity | Double Vanity | + | DryBar | Dry Bar | + | Dumbwaiter | Dumbwaiter | + | EatInKitchen | Eat-in Kitchen | + | Elevator | Elevator | + | EntranceFoyer | Entrance Foyer | + | GraniteCounters | Granite Counters | + | HighCeilings | High Ceilings | + | HighSpeedInternet | High Speed Internet | + | HisAndHersClosets | His and Hers Closets | + | InLawFloorplan | In-Law Floorplan | + | KitchenIsland | Kitchen Island | + | LaminateCounters | Laminate Counters | + | LowFlowPlumbingFixtures | Low Flow Plumbing Fixtures | + | MasterDownstairs | Master Downstairs | + | NaturalWoodwork | Natural Woodwork | + | OpenFloorplan | Open Floorplan | + | Other | Other | + | Pantry | Pantry | + | RecessedLighting | Recessed Lighting | + | Sauna | Sauna | + | SeeRemarks | See Remarks | + | SmartHome | Smart Home | + | SmartThermostat | Smart Thermostat | + | SoakingTub | Soaking Tub | + | SolarTubes | Solar Tube(s) | + | SoundSystem | Sound System | + | StoneCounters | Stone Counters | + | Storage | Storage | + | TileCounters | Tile Counters | + | TrackLighting | Track Lighting | + | TrayCeilings | Tray Ceiling(s) | + | VaultedCeilings | Vaulted Ceiling(s) | + | WalkInClosets | Walk-In Closet(s) | + | WaterSenseFixtures | WaterSense Fixture(s) | + | WetBar | Wet Bar | + | WiredForData | Wired for Data | + | WiredForSound | Wired for Sound | + But "RoomFeatures" MUST NOT contain any similar lookups + + @PropertyRooms + Scenario: RoomKey + When "RoomKey" exists in the "PropertyRooms" metadata + Then "RoomKey" MUST be "String" data type + And "RoomKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyRooms + Scenario: RoomKeyNumeric + When "RoomKeyNumeric" exists in the "PropertyRooms" metadata + Then "RoomKeyNumeric" MUST be "Integer" data type + + @PropertyRooms + Scenario: RoomLength + When "RoomLength" exists in the "PropertyRooms" metadata + Then "RoomLength" MUST be "Decimal" data type + And "RoomLength" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "RoomLength" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @PropertyRooms + Scenario: RoomLengthWidthUnits + When "RoomLengthWidthUnits" exists in the "PropertyRooms" metadata + Then "RoomLengthWidthUnits" MUST be "Single Enumeration" data type + And "RoomLengthWidthUnits" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Feet | Feet | + | Meters | Meters | + But "RoomLengthWidthUnits" MUST NOT contain any similar lookups + + @PropertyRooms + Scenario: RoomType + When "RoomType" exists in the "PropertyRooms" metadata + Then "RoomType" MUST be "Single Enumeration" data type + And "RoomType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Basement | Basement | + | Bathroom | Bathroom | + | Bathroom1 | Bathroom 1 | + | Bathroom2 | Bathroom 2 | + | Bathroom3 | Bathroom 3 | + | Bathroom4 | Bathroom 4 | + | Bathroom5 | Bathroom 5 | + | Bedroom | Bedroom | + | Bedroom1 | Bedroom 1 | + | Bedroom2 | Bedroom 2 | + | Bedroom3 | Bedroom 3 | + | Bedroom4 | Bedroom 4 | + | Bedroom5 | Bedroom 5 | + | BonusRoom | Bonus Room | + | Den | Den | + | DiningRoom | Dining Room | + | ExerciseRoom | Exercise Room | + | FamilyRoom | Family Room | + | GameRoom | Game Room | + | GreatRoom | Great Room | + | Gym | Gym | + | Kitchen | Kitchen | + | Laundry | Laundry | + | Library | Library | + | LivingRoom | Living Room | + | Loft | Loft | + | MasterBathroom | Master Bathroom | + | MasterBedroom | Master Bedroom | + | MediaRoom | Media Room | + | Office | Office | + | Sauna | Sauna | + | UtilityRoom | Utility Room | + | Workshop | Workshop | + But "RoomType" MUST NOT contain any similar lookups + + @PropertyRooms + Scenario: RoomWidth + When "RoomWidth" exists in the "PropertyRooms" metadata + Then "RoomWidth" MUST be "Decimal" data type + And "RoomWidth" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "RoomWidth" scale SHOULD be equal to the RESO Suggested Max Scale of 2 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertyunittypes.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertyunittypes.feature new file mode 100644 index 00000000..7f4780e3 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/propertyunittypes.feature @@ -0,0 +1,131 @@ +# This file was autogenerated on: 20201023121019795 +Feature: PropertyUnitTypes + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @PropertyUnitTypes + Scenario: ListingId + When "ListingId" exists in the "PropertyUnitTypes" metadata + Then "ListingId" MUST be "String" data type + And the following synonyms for "ListingId" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + And "ListingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyUnitTypes + Scenario: ListingKey + When "ListingKey" exists in the "PropertyUnitTypes" metadata + Then "ListingKey" MUST be "String" data type + And the following synonyms for "ListingKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyUnitTypes + Scenario: ListingKeyNumeric + When "ListingKeyNumeric" exists in the "PropertyUnitTypes" metadata + Then "ListingKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ListingKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @PropertyUnitTypes + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "PropertyUnitTypes" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @PropertyUnitTypes + Scenario: UnitTypeActualRent + When "UnitTypeActualRent" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeActualRent" MUST be "Decimal" data type + And "UnitTypeActualRent" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "UnitTypeActualRent" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @PropertyUnitTypes + Scenario: UnitTypeBathsTotal + When "UnitTypeBathsTotal" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeBathsTotal" MUST be "Integer" data type + + @PropertyUnitTypes + Scenario: UnitTypeBedsTotal + When "UnitTypeBedsTotal" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeBedsTotal" MUST be "Integer" data type + + @PropertyUnitTypes + Scenario: UnitTypeDescription + When "UnitTypeDescription" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeDescription" MUST be "String" data type + And "UnitTypeDescription" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @PropertyUnitTypes + Scenario: UnitTypeFurnished + When "UnitTypeFurnished" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeFurnished" MUST be "Single Enumeration" data type + + @PropertyUnitTypes + Scenario: UnitTypeGarageAttachedYN + When "UnitTypeGarageAttachedYN" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeGarageAttachedYN" MUST be "Boolean" data type + + @PropertyUnitTypes + Scenario: UnitTypeGarageSpaces + When "UnitTypeGarageSpaces" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeGarageSpaces" MUST be "Decimal" data type + And "UnitTypeGarageSpaces" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "UnitTypeGarageSpaces" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @PropertyUnitTypes + Scenario: UnitTypeKey + When "UnitTypeKey" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeKey" MUST be "String" data type + And "UnitTypeKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @PropertyUnitTypes + Scenario: UnitTypeKeyNumeric + When "UnitTypeKeyNumeric" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeKeyNumeric" MUST be "Integer" data type + + @PropertyUnitTypes + Scenario: UnitTypeProForma + When "UnitTypeProForma" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeProForma" MUST be "Integer" data type + + @PropertyUnitTypes + Scenario: UnitTypeTotalRent + When "UnitTypeTotalRent" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeTotalRent" MUST be "Decimal" data type + And "UnitTypeTotalRent" precision SHOULD be equal to the RESO Suggested Max Precision of 14 + And "UnitTypeTotalRent" scale SHOULD be equal to the RESO Suggested Max Scale of 2 + + @PropertyUnitTypes + Scenario: UnitTypeType + When "UnitTypeType" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeType" MUST be "Single Enumeration" data type + And "UnitTypeType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Apartments | Apartments | + | Efficiency | Efficiency | + | FourBedroomOrMore | 4 Bedroom Or More | + | Loft | Loft | + | ManagersUnit | Manager's Unit | + | OneBedroom | 1 Bedroom | + | Penthouse | Penthouse | + | Studio | Studio | + | ThreeBedroom | 3 Bedroom | + | TwoBedroom | 2 Bedroom | + But "UnitTypeType" MUST NOT contain any similar lookups + + @PropertyUnitTypes + Scenario: UnitTypeUnitsTotal + When "UnitTypeUnitsTotal" exists in the "PropertyUnitTypes" metadata + Then "UnitTypeUnitsTotal" MUST be "Integer" data type diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/prospecting.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/prospecting.feature new file mode 100644 index 00000000..f87e625e --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/prospecting.feature @@ -0,0 +1,417 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Prospecting + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Prospecting + Scenario: ActiveYN + When "ActiveYN" exists in the "Prospecting" metadata + Then "ActiveYN" MUST be "Boolean" data type + + @Prospecting + Scenario: BccEmailList + When "BccEmailList" exists in the "Prospecting" metadata + Then "BccEmailList" MUST be "String" data type + And "BccEmailList" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Prospecting + Scenario: BccMeYN + When "BccMeYN" exists in the "Prospecting" metadata + Then "BccMeYN" MUST be "Boolean" data type + + @Prospecting + Scenario: CcEmailList + When "CcEmailList" exists in the "Prospecting" metadata + Then "CcEmailList" MUST be "String" data type + And "CcEmailList" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Prospecting + Scenario: ClientActivatedYN + When "ClientActivatedYN" exists in the "Prospecting" metadata + Then "ClientActivatedYN" MUST be "Boolean" data type + + @Prospecting + Scenario: ConciergeNotificationsYN + When "ConciergeNotificationsYN" exists in the "Prospecting" metadata + Then "ConciergeNotificationsYN" MUST be "Boolean" data type + + @Prospecting + Scenario: ConciergeYN + When "ConciergeYN" exists in the "Prospecting" metadata + Then "ConciergeYN" MUST be "Boolean" data type + + @Prospecting + Scenario: ContactKey + When "ContactKey" exists in the "Prospecting" metadata + Then "ContactKey" MUST be "String" data type + And "ContactKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Prospecting + Scenario: ContactKeyNumeric + When "ContactKeyNumeric" exists in the "Prospecting" metadata + Then "ContactKeyNumeric" MUST be "Integer" data type + + @Prospecting + Scenario: DailySchedule + When "DailySchedule" exists in the "Prospecting" metadata + Then "DailySchedule" MUST be "Multiple Enumeration" data type + And "DailySchedule" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | FridayAM | Friday AM | + | FridayPM | Friday PM | + | MondayAM | Monday AM | + | MondayPM | Monday PM | + | None | None | + | SaturdayAM | Saturday AM | + | SaturdayPM | Saturday PM | + | SundayAM | Sunday AM | + | SundayPM | Sunday PM | + | ThursdayAM | Thursday AM | + | ThursdayPM | Thursday PM | + | TuesdayAM | Tuesday AM | + | TuesdayPM | Tuesday PM | + | WednesdayAM | Wednesday AM | + | WednesdayPM | Wednesday PM | + But "DailySchedule" MUST NOT contain any similar lookups + + @Prospecting + Scenario: DisplayTemplateID + When "DisplayTemplateID" exists in the "Prospecting" metadata + Then "DisplayTemplateID" MUST be "String" data type + And "DisplayTemplateID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Prospecting + Scenario: Language + When "Language" exists in the "Prospecting" metadata + Then "Language" MUST be "Single Enumeration" data type + And "Language" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Abkhazian | Abkhazian | + | Afar | Afar | + | Afrikaans | Afrikaans | + | Albanian | Albanian | + | AmericanSignLanguage | American Sign Language | + | Amharic | Amharic | + | Arabic | Arabic | + | Aramaic | Aramaic | + | Armenian | Armenian | + | Assamese | Assamese | + | AssyrianNeoAramaic | Assyrian Neo-Aramaic | + | Avestan | Avestan | + | Aymara | Aymara | + | Azerbaijani | Azerbaijani | + | Bambara | Bambara | + | Bashkir | Bashkir | + | Basque | Basque | + | Bengali | Bengali | + | Bihari | Bihari | + | Bikol | Bikol | + | Bislama | Bislama | + | Bosnian | Bosnian | + | BrazilianPortuguese | Brazilian Portuguese | + | Bulgarian | Bulgarian | + | Burmese | Burmese | + | Byelorussian | Byelorussian | + | Cambodian | Cambodian | + | Cantonese | Cantonese | + | CapeVerdeanCreole | Cape Verdean Creole | + | Catalan | Catalan | + | Cebuano | Cebuano | + | Chamorro | Chamorro | + | Chechen | Chechen | + | Chinese | Chinese | + | Chuukese | Chuukese | + | Chuvash | Chuvash | + | Cornish | Cornish | + | Corsican | Corsican | + | Croatian | Croatian | + | Czech | Czech | + | Danish | Danish | + | Dari | Dari (Afghan Persian) | + | Dioula | Dioula | + | Dutch | Dutch | + | Dzongkha | Dzongkha | + | English | English | + | Esperanto | Esperanto | + | Estonian | Estonian | + | Faroese | Faroese | + | Farsi | Farsi | + | Fiji | Fiji | + | Finnish | Finnish | + | Flemish | Flemish | + | French | French | + | Frisian | Frisian | + | Galician | Galician | + | Georgian | Georgian | + | German | German | + | Greek | Greek | + | Greenlandic | Greenlandic | + | Guarani | Guarani | + | Gujarati | Gujarati | + | HaitianCreole | Haitian Creole | + | Hausa | Hausa | + | Hebrew | Hebrew | + | Herero | Herero | + | Hiligaynon | Hiligaynon | + | Hindi | Hindi | + | HiriMotu | Hiri Motu | + | Hmong | Hmong | + | Hungarian | Hungarian | + | Iban | Iban | + | Icelandic | Icelandic | + | Igbo | Igbo | + | Ilocano | Ilocano | + | Indonesian | Indonesian | + | Interlingua | Interlingua | + | Inuktitut | Inuktitut | + | Inupiak | Inupiak | + | Irish | Irish (Gaelic) | + | Italian | Italian | + | Japanese | Japanese | + | Javanese | Javanese | + | Kannada | Kannada | + | Kashmiri | Kashmiri | + | Kazakh | Kazakh | + | KIche | K'iche' | + | Kichwa | Kichwa | + | Kikuyu | Kikuyu | + | Kinyarwanda | Kinyarwanda | + | Kirghiz | Kirghiz | + | Kirundi | Kirundi | + | Komi | Komi | + | Korean | Korean | + | Kpelle | Kpelle | + | Kru | Kru | + | Kurdish | Kurdish | + | Lao | Lao | + | Latin | Latin | + | Latvian | Latvian | + | Lingala | Lingala | + | Lithuanian | Lithuanian | + | Luxemburgish | Luxemburgish | + | Macedonian | Macedonian | + | Malagasy | Malagasy | + | Malay | Malay | + | Malayalam | Malayalam | + | Maltese | Maltese | + | Mandarin | Mandarin | + | Maninka | Maninka | + | ManxGaelic | Manx Gaelic | + | Maori | Maori | + | Marathi | Marathi | + | Marshallese | Marshallese | + | Moldovan | Moldovan | + | Mongolian | Mongolian | + | Nauru | Nauru | + | Navajo | Navajo | + | Ndebele | Ndebele | + | Ndonga | Ndonga | + | Nepali | Nepali | + | Norwegian | Norwegian | + | Nyanja | Nyanja | + | Occitan | Occitan | + | Oriya | Oriya | + | Oromo | Oromo | + | Ossetian | Ossetian | + | Pali | Pali | + | Pangasinan | Pangasinan | + | Papiamento | Papiamento | + | Pashto | Pashto | + | Polish | Polish | + | Portuguese | Portuguese | + | Punjabi | Punjabi | + | Quechua | Quechua | + | Romanian | Romanian | + | Romany | Romany | + | Russian | Russian | + | Sami | Sami | + | Samoan | Samoan | + | Sangho | Sangho | + | Sanskrit | Sanskrit | + | Sardinian | Sardinian | + | ScotsGaelic | Scots Gaelic | + | Serbian | Serbian | + | SerboCroatian | Serbo-Croatian | + | Sesotho | Sesotho | + | Setswana | Setswana | + | Shan | Shan | + | Shona | Shona | + | Sindhi | Sindhi | + | Sinhalese | Sinhalese | + | Siswati | Siswati | + | Slovak | Slovak | + | Slovenian | Slovenian | + | Somali | Somali | + | SouthernNdebele | Southern Ndebele | + | Spanish | Spanish | + | Sundanese | Sundanese | + | Swahili | Swahili | + | Swedish | Swedish | + | Syriac | Syriac | + | Tagalog | Tagalog | + | Tahitian | Tahitian | + | Tajik | Tajik | + | Tamil | Tamil | + | Tatar | Tatar | + | Telugu | Telugu | + | Thai | Thai | + | Tibetan | Tibetan | + | Tigrinya | Tigrinya | + | Tongan | Tongan | + | Tsonga | Tsonga | + | Turkish | Turkish | + | Turkmen | Turkmen | + | Twi | Twi | + | Uigur | Uigur | + | Ukrainian | Ukrainian | + | Urdu | Urdu | + | Uzbek | Uzbek | + | Vietnamese | Vietnamese | + | Volapuk | Volapuk | + | Welsh | Welsh | + | Wolof | Wolof | + | Xhosa | Xhosa | + | Yiddish | Yiddish | + | Yoruba | Yoruba | + | Zhuang | Zhuang | + | Zulu | Zulu | + But "Language" MUST NOT contain any similar lookups + + @Prospecting + Scenario: LastNewChangedTimestamp + When "LastNewChangedTimestamp" exists in the "Prospecting" metadata + Then "LastNewChangedTimestamp" MUST be "Timestamp" data type + + @Prospecting + Scenario: LastViewedTimestamp + When "LastViewedTimestamp" exists in the "Prospecting" metadata + Then "LastViewedTimestamp" MUST be "Timestamp" data type + + @Prospecting + Scenario: MessageNew + When "MessageNew" exists in the "Prospecting" metadata + Then "MessageNew" MUST be "String" data type + And "MessageNew" length SHOULD be equal to the RESO Suggested Max Length of 4000 + + @Prospecting + Scenario: MessageRevise + When "MessageRevise" exists in the "Prospecting" metadata + Then "MessageRevise" MUST be "String" data type + And "MessageRevise" length SHOULD be equal to the RESO Suggested Max Length of 4000 + + @Prospecting + Scenario: MessageUpdate + When "MessageUpdate" exists in the "Prospecting" metadata + Then "MessageUpdate" MUST be "String" data type + And "MessageUpdate" length SHOULD be equal to the RESO Suggested Max Length of 4000 + + @Prospecting + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Prospecting" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @Prospecting + Scenario: NextSendTimestamp + When "NextSendTimestamp" exists in the "Prospecting" metadata + Then "NextSendTimestamp" MUST be "Timestamp" data type + + @Prospecting + Scenario: OwnerMemberID + When "OwnerMemberID" exists in the "Prospecting" metadata + Then "OwnerMemberID" MUST be "String" data type + And "OwnerMemberID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Prospecting + Scenario: OwnerMemberKey + When "OwnerMemberKey" exists in the "Prospecting" metadata + Then "OwnerMemberKey" MUST be "String" data type + And "OwnerMemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Prospecting + Scenario: OwnerMemberKeyNumeric + When "OwnerMemberKeyNumeric" exists in the "Prospecting" metadata + Then "OwnerMemberKeyNumeric" MUST be "Integer" data type + + @Prospecting + Scenario: ProspectingKey + When "ProspectingKey" exists in the "Prospecting" metadata + Then "ProspectingKey" MUST be "String" data type + And the following synonyms for "ProspectingKey" MUST NOT exist in the metadata + | AutoMailKey | + | AutoEmailKey | + And "ProspectingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Prospecting + Scenario: ProspectingKeyNumeric + When "ProspectingKeyNumeric" exists in the "Prospecting" metadata + Then "ProspectingKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ProspectingKeyNumeric" MUST NOT exist in the metadata + | AutoMailKeyNumeric | + | AutoEmailKeyNumeric | + + @Prospecting + Scenario: ReasonActiveOrDisabled + When "ReasonActiveOrDisabled" exists in the "Prospecting" metadata + Then "ReasonActiveOrDisabled" MUST be "Single Enumeration" data type + And "ReasonActiveOrDisabled" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AgentDisabled | Agent Disabled | + | ClientDisabled | Client Disabled | + | ConciergeNotification | Concierge Notification | + | FinalIgnoredWarning | Final Ignored Warning | + | Ignored | Ignored | + | InitialIgnoredWarning | Initial Ignored Warning | + | Invalid | Invalid | + | NoListingsFound | No Listings Found | + | NoListingsFoundWarning | No Listings Found Warning | + | NoOneToSendTo | No One To Send To | + | OverLimit | Over Limit | + | ReActivated | Re-Activated | + | Revised | Revised | + | SearchFailing | Search Failing | + | WelcomeEmailIgnored | Welcome Email Ignored | + | WelcomeEmailIgnoredWarning | Welcome Email Ignored Warning | + But "ReasonActiveOrDisabled" MUST NOT contain any similar lookups + + @Prospecting + Scenario: SavedSearchKey + When "SavedSearchKey" exists in the "Prospecting" metadata + Then "SavedSearchKey" MUST be "String" data type + And "SavedSearchKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Prospecting + Scenario: SavedSearchKeyNumeric + When "SavedSearchKeyNumeric" exists in the "Prospecting" metadata + Then "SavedSearchKeyNumeric" MUST be "Integer" data type + + @Prospecting + Scenario: ScheduleType + When "ScheduleType" exists in the "Prospecting" metadata + Then "ScheduleType" MUST be "Single Enumeration" data type + And "ScheduleType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | ASAP | ASAP | + | Daily | Daily | + | Monthly | Monthly | + But "ScheduleType" MUST NOT contain any similar lookups + + @Prospecting + Scenario: Subject + When "Subject" exists in the "Prospecting" metadata + Then "Subject" MUST be "String" data type + And "Subject" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Prospecting + Scenario: ToEmailList + When "ToEmailList" exists in the "Prospecting" metadata + Then "ToEmailList" MUST be "String" data type + And "ToEmailList" length SHOULD be equal to the RESO Suggested Max Length of 1024 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/queue.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/queue.feature new file mode 100644 index 00000000..56f32e12 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/queue.feature @@ -0,0 +1,155 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Queue + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Queue + Scenario: ClassName + When "ClassName" exists in the "Queue" metadata + Then "ClassName" MUST be "Single Enumeration" data type + And "ClassName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BusinessOpportunity | Business Opportunity | + | CommercialLease | Commercial Lease | + | CommercialSale | Commercial Sale | + | Contacts | Contacts | + | CrossProperty | Cross Property | + | Farm | Farm | + | HistoryTransactional | History Transactional | + | Land | Land | + | ManufacturedInPark | Manufactured In Park | + | Media | Media | + | Member | Member | + | Office | Office | + | OpenHouse | Open House | + | Residential | Residential | + | ResidentialIncome | Residential Income | + | ResidentialLease | Residential Lease | + | SavedSearch | Saved Search | + But "ClassName" MUST NOT contain any similar lookups + + @Queue + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Queue" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @Queue + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "Queue" metadata + Then "OriginatingSystemID" MUST be "String" data type + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Queue + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "Queue" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Queue + Scenario: OriginatingSystemQueueKey + When "OriginatingSystemQueueKey" exists in the "Queue" metadata + Then "OriginatingSystemQueueKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemQueueKey" MUST NOT exist in the metadata + | ProviderKey | + And "OriginatingSystemQueueKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Queue + Scenario: QueueTransactionKey + When "QueueTransactionKey" exists in the "Queue" metadata + Then "QueueTransactionKey" MUST be "String" data type + And "QueueTransactionKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Queue + Scenario: QueueTransactionKeyNumeric + When "QueueTransactionKeyNumeric" exists in the "Queue" metadata + Then "QueueTransactionKeyNumeric" MUST be "Integer" data type + + @Queue + Scenario: QueueTransactionType + When "QueueTransactionType" exists in the "Queue" metadata + Then "QueueTransactionType" MUST be "Single Enumeration" data type + And "QueueTransactionType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Add | Add | + | Change | Change | + | Delete | Delete | + But "QueueTransactionType" MUST NOT contain any similar lookups + + @Queue + Scenario: ResourceName + When "ResourceName" exists in the "Queue" metadata + Then "ResourceName" MUST be "Single Enumeration" data type + And "ResourceName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Contacts | Contacts | + | Member | Member | + | Office | Office | + | Property | Property | + But "ResourceName" MUST NOT contain any similar lookups + + @Queue + Scenario: ResourceRecordID + When "ResourceRecordID" exists in the "Queue" metadata + Then "ResourceRecordID" MUST be "String" data type + And the following synonyms for "ResourceRecordID" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + | AgentID | + | OfficeID | + | ContactID | + And "ResourceRecordID" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Queue + Scenario: ResourceRecordKey + When "ResourceRecordKey" exists in the "Queue" metadata + Then "ResourceRecordKey" MUST be "String" data type + And the following synonyms for "ResourceRecordKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ResourceRecordKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Queue + Scenario: ResourceRecordKeyNumeric + When "ResourceRecordKeyNumeric" exists in the "Queue" metadata + Then "ResourceRecordKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ResourceRecordKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @Queue + Scenario: SourceSystemID + When "SourceSystemID" exists in the "Queue" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Queue + Scenario: SourceSystemName + When "SourceSystemName" exists in the "Queue" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Queue + Scenario: SourceSystemQueueKey + When "SourceSystemQueueKey" exists in the "Queue" metadata + Then "SourceSystemQueueKey" MUST be "String" data type + And the following synonyms for "SourceSystemQueueKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemQueueKey" length SHOULD be equal to the RESO Suggested Max Length of 255 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/rules.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/rules.feature new file mode 100644 index 00000000..86133311 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/rules.feature @@ -0,0 +1,214 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Rules + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Rules + Scenario: ClassName + When "ClassName" exists in the "Rules" metadata + Then "ClassName" MUST be "Single Enumeration" data type + And "ClassName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BusinessOpportunity | Business Opportunity | + | CommercialLease | Commercial Lease | + | CommercialSale | Commercial Sale | + | Contacts | Contacts | + | CrossProperty | Cross Property | + | Farm | Farm | + | HistoryTransactional | History Transactional | + | Land | Land | + | ManufacturedInPark | Manufactured In Park | + | Media | Media | + | Member | Member | + | Office | Office | + | OpenHouse | Open House | + | Residential | Residential | + | ResidentialIncome | Residential Income | + | ResidentialLease | Residential Lease | + | SavedSearch | Saved Search | + But "ClassName" MUST NOT contain any similar lookups + + @Rules + Scenario: FieldKey + When "FieldKey" exists in the "Rules" metadata + Then "FieldKey" MUST be "String" data type + And "FieldKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Rules + Scenario: FieldKeyNumeric + When "FieldKeyNumeric" exists in the "Rules" metadata + Then "FieldKeyNumeric" MUST be "Integer" data type + + @Rules + Scenario: FieldName + When "FieldName" exists in the "Rules" metadata + Then "FieldName" MUST be "String" data type + And "FieldName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Rules + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Rules" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + And the following synonyms for "ModificationTimestamp" MUST NOT exist in the metadata + | ModificationDateTime | + | DateTimeModified | + | ModDate | + | DateMod | + | UpdateDate | + | UpdateTimestamp | + + @Rules + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "Rules" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + And the following synonyms for "OriginalEntryTimestamp" MUST NOT exist in the metadata + | EntryDate | + | InputDate | + | DateTimeCreated | + | CreatedDate. | + + @Rules + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "Rules" metadata + Then "OriginatingSystemID" MUST be "String" data type + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Rules + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "Rules" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Rules + Scenario: OriginatingSystemRuleKey + When "OriginatingSystemRuleKey" exists in the "Rules" metadata + Then "OriginatingSystemRuleKey" MUST be "String" data type + And "OriginatingSystemRuleKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Rules + Scenario: ResourceName + When "ResourceName" exists in the "Rules" metadata + Then "ResourceName" MUST be "Single Enumeration" data type + And "ResourceName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Contacts | Contacts | + | Member | Member | + | Office | Office | + | Property | Property | + But "ResourceName" MUST NOT contain any similar lookups + + @Rules + Scenario: RuleAction + When "RuleAction" exists in the "Rules" metadata + Then "RuleAction" MUST be "String" data type + And "RuleAction" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Rules + Scenario: RuleDescription + When "RuleDescription" exists in the "Rules" metadata + Then "RuleDescription" MUST be "String" data type + And "RuleDescription" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Rules + Scenario: RuleEnabledYN + When "RuleEnabledYN" exists in the "Rules" metadata + Then "RuleEnabledYN" MUST be "Boolean" data type + + @Rules + Scenario: RuleErrorText + When "RuleErrorText" exists in the "Rules" metadata + Then "RuleErrorText" MUST be "String" data type + And "RuleErrorText" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Rules + Scenario: RuleExpression + When "RuleExpression" exists in the "Rules" metadata + Then "RuleExpression" MUST be "String" data type + And "RuleExpression" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Rules + Scenario: RuleFormat + When "RuleFormat" exists in the "Rules" metadata + Then "RuleFormat" MUST be "Single Enumeration" data type + And "RuleFormat" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Javascript | JavaScript | + | OdataFilter | $filter | + | REBR | REBR | + | RetsValidation | RetsValidation | + But "RuleFormat" MUST NOT contain any similar lookups + + @Rules + Scenario: RuleHelpText + When "RuleHelpText" exists in the "Rules" metadata + Then "RuleHelpText" MUST be "String" data type + And "RuleHelpText" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Rules + Scenario: RuleKey + When "RuleKey" exists in the "Rules" metadata + Then "RuleKey" MUST be "String" data type + And "RuleKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Rules + Scenario: RuleKeyNumeric + When "RuleKeyNumeric" exists in the "Rules" metadata + Then "RuleKeyNumeric" MUST be "Integer" data type + + @Rules + Scenario: RuleName + When "RuleName" exists in the "Rules" metadata + Then "RuleName" MUST be "String" data type + And "RuleName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Rules + Scenario: RuleOrder + When "RuleOrder" exists in the "Rules" metadata + Then "RuleOrder" MUST be "Integer" data type + + @Rules + Scenario: RuleType + When "RuleType" exists in the "Rules" metadata + Then "RuleType" MUST be "Single Enumeration" data type + + @Rules + Scenario: RuleVersion + When "RuleVersion" exists in the "Rules" metadata + Then "RuleVersion" MUST be "String" data type + And "RuleVersion" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Rules + Scenario: RuleWarningText + When "RuleWarningText" exists in the "Rules" metadata + Then "RuleWarningText" MUST be "String" data type + And "RuleWarningText" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @Rules + Scenario: SourceSystemHistoryKey + When "SourceSystemHistoryKey" exists in the "Rules" metadata + Then "SourceSystemHistoryKey" MUST be "String" data type + And "SourceSystemHistoryKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Rules + Scenario: SourceSystemID + When "SourceSystemID" exists in the "Rules" metadata + Then "SourceSystemID" MUST be "String" data type + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Rules + Scenario: SourceSystemName + When "SourceSystemName" exists in the "Rules" metadata + Then "SourceSystemName" MUST be "String" data type + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/savedsearch.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/savedsearch.feature new file mode 100644 index 00000000..6c3e5bec --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/savedsearch.feature @@ -0,0 +1,225 @@ +# This file was autogenerated on: 20201023121019795 +Feature: SavedSearch + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @SavedSearch + Scenario: ClassName + When "ClassName" exists in the "SavedSearch" metadata + Then "ClassName" MUST be "Single Enumeration" data type + And "ClassName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BusinessOpportunity | Business Opportunity | + | CommercialLease | Commercial Lease | + | CommercialSale | Commercial Sale | + | Contacts | Contacts | + | CrossProperty | Cross Property | + | Farm | Farm | + | HistoryTransactional | History Transactional | + | Land | Land | + | ManufacturedInPark | Manufactured In Park | + | Media | Media | + | Member | Member | + | Office | Office | + | OpenHouse | Open House | + | Residential | Residential | + | ResidentialIncome | Residential Income | + | ResidentialLease | Residential Lease | + | SavedSearch | Saved Search | + But "ClassName" MUST NOT contain any similar lookups + + @SavedSearch + Scenario: MemberKey + When "MemberKey" exists in the "SavedSearch" metadata + Then "MemberKey" MUST be "String" data type + And the following synonyms for "MemberKey" MUST NOT exist in the metadata + | AgentKey | + And "MemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: MemberKeyNumeric + When "MemberKeyNumeric" exists in the "SavedSearch" metadata + Then "MemberKeyNumeric" MUST be "Integer" data type + And the following synonyms for "MemberKeyNumeric" MUST NOT exist in the metadata + | AgentKeyNumeric | + + @SavedSearch + Scenario: MemberMlsId + When "MemberMlsId" exists in the "SavedSearch" metadata + Then "MemberMlsId" MUST be "String" data type + And the following synonyms for "MemberMlsId" MUST NOT exist in the metadata + | AgentMlsld | + And "MemberMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @SavedSearch + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "SavedSearch" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + And the following synonyms for "ModificationTimestamp" MUST NOT exist in the metadata + | ModificationDateTime | + | DateTimeModified | + | ModDate | + | DateMod | + | UpdateDate | + | UpdateTimestamp | + + @SavedSearch + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "SavedSearch" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + And the following synonyms for "OriginalEntryTimestamp" MUST NOT exist in the metadata + | EntryDate | + | InputDate | + | DateTimeCreated | + | CreatedDate. | + + @SavedSearch + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "SavedSearch" metadata + Then "OriginatingSystemID" MUST be "String" data type + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @SavedSearch + Scenario: OriginatingSystemKey + When "OriginatingSystemKey" exists in the "SavedSearch" metadata + Then "OriginatingSystemKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemKey" MUST NOT exist in the metadata + | ProviderKey | + And "OriginatingSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: OriginatingSystemMemberKey + When "OriginatingSystemMemberKey" exists in the "SavedSearch" metadata + Then "OriginatingSystemMemberKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemMemberKey" MUST NOT exist in the metadata + | OriginatingSystemAgentKey | + | ProviderKey | + And "OriginatingSystemMemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: OriginatingSystemMemberName + When "OriginatingSystemMemberName" exists in the "SavedSearch" metadata + Then "OriginatingSystemMemberName" MUST be "String" data type + And the following synonyms for "OriginatingSystemMemberName" MUST NOT exist in the metadata + | OriginatingSystemAgentName | + | ProviderName | + | MLSID | + And "OriginatingSystemMemberName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "SavedSearch" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: ResourceName + When "ResourceName" exists in the "SavedSearch" metadata + Then "ResourceName" MUST be "Single Enumeration" data type + And "ResourceName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Contacts | Contacts | + | Member | Member | + | Office | Office | + | Property | Property | + But "ResourceName" MUST NOT contain any similar lookups + + @SavedSearch + Scenario: SavedSearchDescription + When "SavedSearchDescription" exists in the "SavedSearch" metadata + Then "SavedSearchDescription" MUST be "String" data type + And "SavedSearchDescription" length SHOULD be equal to the RESO Suggested Max Length of 4000 + + @SavedSearch + Scenario: SavedSearchKey + When "SavedSearchKey" exists in the "SavedSearch" metadata + Then "SavedSearchKey" MUST be "String" data type + And "SavedSearchKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: SavedSearchKeyNumeric + When "SavedSearchKeyNumeric" exists in the "SavedSearch" metadata + Then "SavedSearchKeyNumeric" MUST be "Integer" data type + + @SavedSearch + Scenario: SavedSearchName + When "SavedSearchName" exists in the "SavedSearch" metadata + Then "SavedSearchName" MUST be "String" data type + And "SavedSearchName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: SavedSearchType + When "SavedSearchType" exists in the "SavedSearch" metadata + Then "SavedSearchType" MUST be "Single Enumeration" data type + + @SavedSearch + Scenario: SearchQuery + When "SearchQuery" exists in the "SavedSearch" metadata + Then "SearchQuery" MUST be "String" data type + And the following synonyms for "SearchQuery" MUST NOT exist in the metadata + | SearchCriteria | + And "SearchQuery" length SHOULD be equal to the RESO Suggested Max Length of 8000 + + @SavedSearch + Scenario: SearchQueryExceptionDetails + When "SearchQueryExceptionDetails" exists in the "SavedSearch" metadata + Then "SearchQueryExceptionDetails" MUST be "String" data type + And "SearchQueryExceptionDetails" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: SearchQueryExceptions + When "SearchQueryExceptions" exists in the "SavedSearch" metadata + Then "SearchQueryExceptions" MUST be "Single Enumeration" data type + + @SavedSearch + Scenario: SearchQueryHumanReadable + When "SearchQueryHumanReadable" exists in the "SavedSearch" metadata + Then "SearchQueryHumanReadable" MUST be "String" data type + And "SearchQueryHumanReadable" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: SearchQueryType + When "SearchQueryType" exists in the "SavedSearch" metadata + Then "SearchQueryType" MUST be "Single Enumeration" data type + And "SearchQueryType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | DMQL2 | DMQL2 | + | OdataFilter | $filter | + But "SearchQueryType" MUST NOT contain any similar lookups + + @SavedSearch + Scenario: SourceSystemID + When "SourceSystemID" exists in the "SavedSearch" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @SavedSearch + Scenario: SourceSystemKey + When "SourceSystemKey" exists in the "SavedSearch" metadata + Then "SourceSystemKey" MUST be "String" data type + And the following synonyms for "SourceSystemKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SavedSearch + Scenario: SourceSystemName + When "SourceSystemName" exists in the "SavedSearch" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/showing.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/showing.feature new file mode 100644 index 00000000..326f52d9 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/showing.feature @@ -0,0 +1,197 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Showing + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Showing + Scenario: AgentOriginatingSystemID + When "AgentOriginatingSystemID" exists in the "Showing" metadata + Then "AgentOriginatingSystemID" MUST be "String" data type + And "AgentOriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Showing + Scenario: AgentOriginatingSystemName + When "AgentOriginatingSystemName" exists in the "Showing" metadata + Then "AgentOriginatingSystemName" MUST be "String" data type + And "AgentOriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: AgentSourceSystemID + When "AgentSourceSystemID" exists in the "Showing" metadata + Then "AgentSourceSystemID" MUST be "String" data type + And "AgentSourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Showing + Scenario: AgentSourceSystemName + When "AgentSourceSystemName" exists in the "Showing" metadata + Then "AgentSourceSystemName" MUST be "String" data type + And "AgentSourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ListingId + When "ListingId" exists in the "Showing" metadata + Then "ListingId" MUST be "String" data type + And "ListingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ListingKey + When "ListingKey" exists in the "Showing" metadata + Then "ListingKey" MUST be "String" data type + And "ListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ListingKeyNumeric + When "ListingKeyNumeric" exists in the "Showing" metadata + Then "ListingKeyNumeric" MUST be "Integer" data type + + @Showing + Scenario: ListingOriginatingSystemID + When "ListingOriginatingSystemID" exists in the "Showing" metadata + Then "ListingOriginatingSystemID" MUST be "String" data type + And "ListingOriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Showing + Scenario: ListingOriginatingSystemName + When "ListingOriginatingSystemName" exists in the "Showing" metadata + Then "ListingOriginatingSystemName" MUST be "String" data type + And "ListingOriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ListingSourceSystemID + When "ListingSourceSystemID" exists in the "Showing" metadata + Then "ListingSourceSystemID" MUST be "String" data type + And "ListingSourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Showing + Scenario: ListingSourceSystemName + When "ListingSourceSystemName" exists in the "Showing" metadata + Then "ListingSourceSystemName" MUST be "String" data type + And "ListingSourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Showing" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @Showing + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "Showing" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + + @Showing + Scenario: OriginatingSystemAgentKey + When "OriginatingSystemAgentKey" exists in the "Showing" metadata + Then "OriginatingSystemAgentKey" MUST be "String" data type + And "OriginatingSystemAgentKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: OriginatingSystemListingKey + When "OriginatingSystemListingKey" exists in the "Showing" metadata + Then "OriginatingSystemListingKey" MUST be "String" data type + And "OriginatingSystemListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: OriginatingSystemShowingKey + When "OriginatingSystemShowingKey" exists in the "Showing" metadata + Then "OriginatingSystemShowingKey" MUST be "String" data type + And "OriginatingSystemShowingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ShowingAgentKey + When "ShowingAgentKey" exists in the "Showing" metadata + Then "ShowingAgentKey" MUST be "String" data type + And "ShowingAgentKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ShowingAgentKeyNumeric + When "ShowingAgentKeyNumeric" exists in the "Showing" metadata + Then "ShowingAgentKeyNumeric" MUST be "Integer" data type + + @Showing + Scenario: ShowingAgentMlsID + When "ShowingAgentMlsID" exists in the "Showing" metadata + Then "ShowingAgentMlsID" MUST be "String" data type + And "ShowingAgentMlsID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Showing + Scenario: ShowingEndTimestamp + When "ShowingEndTimestamp" exists in the "Showing" metadata + Then "ShowingEndTimestamp" MUST be "Timestamp" data type + + @Showing + Scenario: ShowingId + When "ShowingId" exists in the "Showing" metadata + Then "ShowingId" MUST be "String" data type + And "ShowingId" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ShowingKey + When "ShowingKey" exists in the "Showing" metadata + Then "ShowingKey" MUST be "String" data type + And "ShowingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ShowingKeyNumeric + When "ShowingKeyNumeric" exists in the "Showing" metadata + Then "ShowingKeyNumeric" MUST be "Integer" data type + + @Showing + Scenario: ShowingOriginatingSystemID + When "ShowingOriginatingSystemID" exists in the "Showing" metadata + Then "ShowingOriginatingSystemID" MUST be "String" data type + And "ShowingOriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Showing + Scenario: ShowingOriginatingSystemName + When "ShowingOriginatingSystemName" exists in the "Showing" metadata + Then "ShowingOriginatingSystemName" MUST be "String" data type + And "ShowingOriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ShowingRequestedTimestamp + When "ShowingRequestedTimestamp" exists in the "Showing" metadata + Then "ShowingRequestedTimestamp" MUST be "Timestamp" data type + + @Showing + Scenario: ShowingSourceSystemID + When "ShowingSourceSystemID" exists in the "Showing" metadata + Then "ShowingSourceSystemID" MUST be "String" data type + And "ShowingSourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Showing + Scenario: ShowingSourceSystemName + When "ShowingSourceSystemName" exists in the "Showing" metadata + Then "ShowingSourceSystemName" MUST be "String" data type + And "ShowingSourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: ShowingStartTimestamp + When "ShowingStartTimestamp" exists in the "Showing" metadata + Then "ShowingStartTimestamp" MUST be "Timestamp" data type + + @Showing + Scenario: SourceSystemAgentKey + When "SourceSystemAgentKey" exists in the "Showing" metadata + Then "SourceSystemAgentKey" MUST be "String" data type + And "SourceSystemAgentKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: SourceSystemListingKey + When "SourceSystemListingKey" exists in the "Showing" metadata + Then "SourceSystemListingKey" MUST be "String" data type + And "SourceSystemListingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Showing + Scenario: SourceSystemShowingKey + When "SourceSystemShowingKey" exists in the "Showing" metadata + Then "SourceSystemShowingKey" MUST be "String" data type + And "SourceSystemShowingKey" length SHOULD be equal to the RESO Suggested Max Length of 255 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/socialmedia.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/socialmedia.feature new file mode 100644 index 00000000..3cbfe554 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/socialmedia.feature @@ -0,0 +1,139 @@ +# This file was autogenerated on: 20201023121019795 +Feature: SocialMedia + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @SocialMedia + Scenario: ClassName + When "ClassName" exists in the "SocialMedia" metadata + Then "ClassName" MUST be "Single Enumeration" data type + And "ClassName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | BusinessOpportunity | Business Opportunity | + | CommercialLease | Commercial Lease | + | CommercialSale | Commercial Sale | + | Contacts | Contacts | + | CrossProperty | Cross Property | + | Farm | Farm | + | HistoryTransactional | History Transactional | + | Land | Land | + | ManufacturedInPark | Manufactured In Park | + | Media | Media | + | Member | Member | + | Office | Office | + | OpenHouse | Open House | + | Residential | Residential | + | ResidentialIncome | Residential Income | + | ResidentialLease | Residential Lease | + | SavedSearch | Saved Search | + But "ClassName" MUST NOT contain any similar lookups + + @SocialMedia + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "SocialMedia" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + And the following synonyms for "ModificationTimestamp" MUST NOT exist in the metadata + | ModificationDateTime | + | DateTimeModified | + | ModDate | + | DateMod | + | UpdateDate | + | UpdateTimestamp | + + @SocialMedia + Scenario: ResourceName + When "ResourceName" exists in the "SocialMedia" metadata + Then "ResourceName" MUST be "Single Enumeration" data type + And "ResourceName" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Contacts | Contacts | + | Member | Member | + | Office | Office | + | Property | Property | + But "ResourceName" MUST NOT contain any similar lookups + + @SocialMedia + Scenario: ResourceRecordID + When "ResourceRecordID" exists in the "SocialMedia" metadata + Then "ResourceRecordID" MUST be "String" data type + And the following synonyms for "ResourceRecordID" MUST NOT exist in the metadata + | MLNumber | + | MLSNumber | + | ListingNumber | + | AgentID | + | OfficeID | + | ContactID | + And "ResourceRecordID" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SocialMedia + Scenario: ResourceRecordKey + When "ResourceRecordKey" exists in the "SocialMedia" metadata + Then "ResourceRecordKey" MUST be "String" data type + And the following synonyms for "ResourceRecordKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "ResourceRecordKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SocialMedia + Scenario: ResourceRecordKeyNumeric + When "ResourceRecordKeyNumeric" exists in the "SocialMedia" metadata + Then "ResourceRecordKeyNumeric" MUST be "Integer" data type + And the following synonyms for "ResourceRecordKeyNumeric" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + + @SocialMedia + Scenario: SocialMediaKey + When "SocialMediaKey" exists in the "SocialMedia" metadata + Then "SocialMediaKey" MUST be "String" data type + And the following synonyms for "SocialMediaKey" MUST NOT exist in the metadata + | SystemUniqueID | + | ImmediateSourceID | + And "SocialMediaKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @SocialMedia + Scenario: SocialMediaKeyNumeric + When "SocialMediaKeyNumeric" exists in the "SocialMedia" metadata + Then "SocialMediaKeyNumeric" MUST be "Integer" data type + + @SocialMedia + Scenario: SocialMediaType + When "SocialMediaType" exists in the "SocialMedia" metadata + Then "SocialMediaType" MUST be "Single Enumeration" data type + And the following synonyms for "SocialMediaType" MUST NOT exist in the metadata + | MimeType | + And "SocialMediaType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Blog | Blog | + | Digg | Digg | + | Facebook | Facebook | + | FacebookMessenger | Facebook Messenger | + | Googleplus | GooglePlus | + | iMessage | iMessage | + | Instagram | Instagram | + | Linkedin | LinkedIn | + | Pinterest | Pinterest | + | Reddit | Reddit | + | Slack | Slack | + | Snapchat | Snapchat | + | Stumbleupon | StumbleUpon | + | Tumblr | Tumblr | + | Twitter | Twitter | + | Website | Website | + | Youtube | YouTube | + But "SocialMediaType" MUST NOT contain any similar lookups + + @SocialMedia + Scenario: SocialMediaUrlOrId + When "SocialMediaUrlOrId" exists in the "SocialMedia" metadata + Then "SocialMediaUrlOrId" MUST be "String" data type + And "SocialMediaUrlOrId" length SHOULD be equal to the RESO Suggested Max Length of 8000 diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/teammembers.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/teammembers.feature new file mode 100644 index 00000000..8472ad99 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/teammembers.feature @@ -0,0 +1,168 @@ +# This file was autogenerated on: 20201023121019795 +Feature: TeamMembers + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @TeamMembers + Scenario: MemberKey + When "MemberKey" exists in the "TeamMembers" metadata + Then "MemberKey" MUST be "String" data type + And the following synonyms for "MemberKey" MUST NOT exist in the metadata + | AgentKey | + And "MemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @TeamMembers + Scenario: MemberKeyNumeric + When "MemberKeyNumeric" exists in the "TeamMembers" metadata + Then "MemberKeyNumeric" MUST be "Integer" data type + And the following synonyms for "MemberKeyNumeric" MUST NOT exist in the metadata + | AgentKeyNumeric | + + @TeamMembers + Scenario: MemberLoginId + When "MemberLoginId" exists in the "TeamMembers" metadata + Then "MemberLoginId" MUST be "String" data type + And the following synonyms for "MemberLoginId" MUST NOT exist in the metadata + | AgentLoginId | + And "MemberLoginId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @TeamMembers + Scenario: MemberMlsId + When "MemberMlsId" exists in the "TeamMembers" metadata + Then "MemberMlsId" MUST be "String" data type + And the following synonyms for "MemberMlsId" MUST NOT exist in the metadata + | AgentMlsId | + And "MemberMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @TeamMembers + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "TeamMembers" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @TeamMembers + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "TeamMembers" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + + @TeamMembers + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "TeamMembers" metadata + Then "OriginatingSystemID" MUST be "String" data type + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @TeamMembers + Scenario: OriginatingSystemKey + When "OriginatingSystemKey" exists in the "TeamMembers" metadata + Then "OriginatingSystemKey" MUST be "String" data type + And the following synonyms for "OriginatingSystemKey" MUST NOT exist in the metadata + | ProviderKey | + And "OriginatingSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @TeamMembers + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "TeamMembers" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @TeamMembers + Scenario: SourceSystemID + When "SourceSystemID" exists in the "TeamMembers" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @TeamMembers + Scenario: SourceSystemKey + When "SourceSystemKey" exists in the "TeamMembers" metadata + Then "SourceSystemKey" MUST be "String" data type + And the following synonyms for "SourceSystemKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @TeamMembers + Scenario: SourceSystemName + When "SourceSystemName" exists in the "TeamMembers" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @TeamMembers + Scenario: TeamImpersonationLevel + When "TeamImpersonationLevel" exists in the "TeamMembers" metadata + Then "TeamImpersonationLevel" MUST be "Single Enumeration" data type + + @TeamMembers + Scenario: TeamKey + When "TeamKey" exists in the "TeamMembers" metadata + Then "TeamKey" MUST be "String" data type + And "TeamKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @TeamMembers + Scenario: TeamKeyNumeric + When "TeamKeyNumeric" exists in the "TeamMembers" metadata + Then "TeamKeyNumeric" MUST be "Integer" data type + + @TeamMembers + Scenario: TeamMemberKey + When "TeamMemberKey" exists in the "TeamMembers" metadata + Then "TeamMemberKey" MUST be "String" data type + And the following synonyms for "TeamMemberKey" MUST NOT exist in the metadata + | TeamAgentKey | + And "TeamMemberKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @TeamMembers + Scenario: TeamMemberKeyNumeric + When "TeamMemberKeyNumeric" exists in the "TeamMembers" metadata + Then "TeamMemberKeyNumeric" MUST be "Integer" data type + And the following synonyms for "TeamMemberKeyNumeric" MUST NOT exist in the metadata + | TeamAgentKeyNumeric | + + @TeamMembers + Scenario: TeamMemberNationalAssociationId + When "TeamMemberNationalAssociationId" exists in the "TeamMembers" metadata + Then "TeamMemberNationalAssociationId" MUST be "String" data type + And the following synonyms for "TeamMemberNationalAssociationId" MUST NOT exist in the metadata + | TeamAgentNationalAssociationId | + And "TeamMemberNationalAssociationId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @TeamMembers + Scenario: TeamMemberStateLicense + When "TeamMemberStateLicense" exists in the "TeamMembers" metadata + Then "TeamMemberStateLicense" MUST be "String" data type + And the following synonyms for "TeamMemberStateLicense" MUST NOT exist in the metadata + | TeamAgentStateLicense | + And "TeamMemberStateLicense" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @TeamMembers + Scenario: TeamMemberType + When "TeamMemberType" exists in the "TeamMembers" metadata + Then "TeamMemberType" MUST be "Single Enumeration" data type + And the following synonyms for "TeamMemberType" MUST NOT exist in the metadata + | TeamAgentType | + And "TeamMemberType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AdministrationAssistant | Administration Assistant | + | BuyerAgent | Buyer Agent | + | LeadManager | Lead Manager | + | ListingAgent | Listing Agent | + | MarketingAssistant | Marketing Assistant | + | OperationsManager | Operations Manager | + | TeamLead | Team Lead | + | TeamMember | Team Member | + | TransactionCoordinator | Transaction Coordinator | + But "TeamMemberType" MUST NOT contain any similar lookups diff --git a/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/teams.feature b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/teams.feature new file mode 100644 index 00000000..cfd7ab18 --- /dev/null +++ b/src/main/java/org/reso/certification/features/data-dictionary/v1-7-0/teams.feature @@ -0,0 +1,674 @@ +# This file was autogenerated on: 20201023121019795 +Feature: Teams + + Background: + Given a RESOScript or Metadata file are provided + When a RESOScript file is provided + Then Client Settings and Parameters can be read from the RESOScript + And a test container was successfully created from the given RESOScript file + And the test container uses an Authorization Code or Client Credentials for authentication + And valid metadata were retrieved from the server + When a metadata file is provided + Then a test container was successfully created from the given metadata file + And valid metadata are loaded into the test container + + @Teams + Scenario: ModificationTimestamp + When "ModificationTimestamp" exists in the "Teams" metadata + Then "ModificationTimestamp" MUST be "Timestamp" data type + + @Teams + Scenario: OriginalEntryTimestamp + When "OriginalEntryTimestamp" exists in the "Teams" metadata + Then "OriginalEntryTimestamp" MUST be "Timestamp" data type + + @Teams + Scenario: OriginatingSystemID + When "OriginatingSystemID" exists in the "Teams" metadata + Then "OriginatingSystemID" MUST be "String" data type + And "OriginatingSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Teams + Scenario: OriginatingSystemKey + When "OriginatingSystemKey" exists in the "Teams" metadata + Then "OriginatingSystemKey" MUST be "String" data type + And "OriginatingSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Teams + Scenario: OriginatingSystemName + When "OriginatingSystemName" exists in the "Teams" metadata + Then "OriginatingSystemName" MUST be "String" data type + And the following synonyms for "OriginatingSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "OriginatingSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Teams + Scenario: SocialMediaType + When "SocialMediaType" exists in the "Teams" metadata + Then "SocialMediaType" MUST be "Single Enumeration" data type + And "SocialMediaType" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Blog | Blog | + | Digg | Digg | + | Facebook | Facebook | + | FacebookMessenger | Facebook Messenger | + | Googleplus | GooglePlus | + | iMessage | iMessage | + | Instagram | Instagram | + | Linkedin | LinkedIn | + | Pinterest | Pinterest | + | Reddit | Reddit | + | Slack | Slack | + | Snapchat | Snapchat | + | Stumbleupon | StumbleUpon | + | Tumblr | Tumblr | + | Twitter | Twitter | + | Website | Website | + | Youtube | YouTube | + But "SocialMediaType" MUST NOT contain any similar lookups + + @Teams + Scenario: SourceSystemID + When "SourceSystemID" exists in the "Teams" metadata + Then "SourceSystemID" MUST be "String" data type + And the following synonyms for "SourceSystemID" MUST NOT exist in the metadata + | MLSID | + And "SourceSystemID" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Teams + Scenario: SourceSystemKey + When "SourceSystemKey" exists in the "Teams" metadata + Then "SourceSystemKey" MUST be "String" data type + And the following synonyms for "SourceSystemKey" MUST NOT exist in the metadata + | ProviderKey | + And "SourceSystemKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Teams + Scenario: SourceSystemName + When "SourceSystemName" exists in the "Teams" metadata + Then "SourceSystemName" MUST be "String" data type + And the following synonyms for "SourceSystemName" MUST NOT exist in the metadata + | ProviderName | + | MLSID | + And "SourceSystemName" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Teams + Scenario: TeamAddress1 + When "TeamAddress1" exists in the "Teams" metadata + Then "TeamAddress1" MUST be "String" data type + And "TeamAddress1" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Teams + Scenario: TeamAddress2 + When "TeamAddress2" exists in the "Teams" metadata + Then "TeamAddress2" MUST be "String" data type + And "TeamAddress2" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Teams + Scenario: TeamCarrierRoute + When "TeamCarrierRoute" exists in the "Teams" metadata + Then "TeamCarrierRoute" MUST be "String" data type + And the following synonyms for "TeamCarrierRoute" MUST NOT exist in the metadata + | RR | + | CR | + And "TeamCarrierRoute" length SHOULD be equal to the RESO Suggested Max Length of 9 + + @Teams + Scenario: TeamCity + When "TeamCity" exists in the "Teams" metadata + Then "TeamCity" MUST be "String" data type + And "TeamCity" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Teams + Scenario: TeamCountry + When "TeamCountry" exists in the "Teams" metadata + Then "TeamCountry" MUST be "Single Enumeration" data type + And "TeamCountry" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AD | AD | + | AE | AE | + | AF | AF | + | AG | AG | + | AI | AI | + | AL | AL | + | AM | AM | + | AN | AN | + | AO | AO | + | AQ | AQ | + | AR | AR | + | AS | AS | + | AT | AT | + | AU | AU | + | AW | AW | + | AX | AX | + | AZ | AZ | + | BA | BA | + | BB | BB | + | BD | BD | + | BE | BE | + | BF | BF | + | BG | BG | + | BH | BH | + | BI | BI | + | BJ | BJ | + | BL | BL | + | BM | BM | + | BN | BN | + | BO | BO | + | BR | BR | + | BS | BS | + | BT | BT | + | BV | BV | + | BW | BW | + | BY | BY | + | BZ | BZ | + | CA | CA | + | CC | CC | + | CD | CD | + | CF | CF | + | CG | CG | + | CH | CH | + | CI | CI | + | CK | CK | + | CL | CL | + | CM | CM | + | CN | CN | + | CO | CO | + | CR | CR | + | CU | CU | + | CV | CV | + | CX | CX | + | CY | CY | + | CZ | CZ | + | DE | DE | + | DJ | DJ | + | DK | DK | + | DM | DM | + | DO | DO | + | DZ | DZ | + | EC | EC | + | EE | EE | + | EG | EG | + | EH | EH | + | ER | ER | + | ES | ES | + | ET | ET | + | FI | FI | + | FJ | FJ | + | FK | FK | + | FM | FM | + | FO | FO | + | FR | FR | + | GA | GA | + | GB | GB | + | GD | GD | + | GE | GE | + | GF | GF | + | GG | GG | + | GH | GH | + | GI | GI | + | GL | GL | + | GM | GM | + | GN | GN | + | GP | GP | + | GQ | GQ | + | GR | GR | + | GS | GS | + | GT | GT | + | GU | GU | + | GW | GW | + | GY | GY | + | HK | HK | + | HM | HM | + | HN | HN | + | HR | HR | + | HT | HT | + | HU | HU | + | ID | ID | + | IE | IE | + | IL | IL | + | IM | IM | + | IN | IN | + | IO | IO | + | IQ | IQ | + | IR | IR | + | IS | IS | + | IT | IT | + | JE | JE | + | JM | JM | + | JO | JO | + | JP | JP | + | KE | KE | + | KG | KG | + | KH | KH | + | KI | KI | + | KM | KM | + | KN | KN | + | KP | KP | + | KR | KR | + | KW | KW | + | KY | KY | + | KZ | KZ | + | LA | LA | + | LB | LB | + | LC | LC | + | LI | LI | + | LK | LK | + | LR | LR | + | LS | LS | + | LT | LT | + | LU | LU | + | LV | LV | + | LY | LY | + | MA | MA | + | MC | MC | + | MD | MD | + | ME | ME | + | MF | MF | + | MG | MG | + | MH | MH | + | MK | MK | + | ML | ML | + | MM | MM | + | MN | MN | + | MO | MO | + | MP | MP | + | MQ | MQ | + | MR | MR | + | MS | MS | + | MT | MT | + | MU | MU | + | MV | MV | + | MW | MW | + | MX | MX | + | MY | MY | + | MZ | MZ | + | NA | NA | + | NC | NC | + | NE | NE | + | NF | NF | + | NG | NG | + | NI | NI | + | NL | NL | + | NP | NP | + | NR | NR | + | NU | NU | + | NZ | NZ | + | OM | OM | + | OT | OT | + | PA | PA | + | PE | PE | + | PF | PF | + | PG | PG | + | PH | PH | + | PK | PK | + | PL | PL | + | PM | PM | + | PN | PN | + | PR | PR | + | PS | PS | + | PT | PT | + | PW | PW | + | PY | PY | + | QA | QA | + | RE | RE | + | RO | RO | + | RS | RS | + | RU | RU | + | RW | RW | + | SA | SA | + | SB | SB | + | SC | SC | + | SD | SD | + | SE | SE | + | SG | SG | + | SH | SH | + | SI | SI | + | SJ | SJ | + | SK | SK | + | SL | SL | + | SM | SM | + | SN | SN | + | SO | SO | + | SR | SR | + | ST | ST | + | SV | SV | + | SY | SY | + | SZ | SZ | + | TC | TC | + | TD | TD | + | TF | TF | + | TG | TG | + | TH | TH | + | TJ | TJ | + | TK | TK | + | TL | TL | + | TM | TM | + | TN | TN | + | TO | TO | + | TR | TR | + | TT | TT | + | TV | TV | + | TW | TW | + | TZ | TZ | + | UA | UA | + | UG | UG | + | UM | UM | + | US | US | + | UY | UY | + | UZ | UZ | + | VA | VA | + | VC | VC | + | VE | VE | + | VG | VG | + | VI | VI | + | VN | VN | + | VU | VU | + | WF | WF | + | WS | WS | + | YE | YE | + | YT | YT | + | ZA | ZA | + | ZM | ZM | + | ZW | ZW | + But "TeamCountry" MUST NOT contain any similar lookups + + @Teams + Scenario: TeamCountyOrParish + When "TeamCountyOrParish" exists in the "Teams" metadata + Then "TeamCountyOrParish" MUST be "Single Enumeration" data type + And the following synonyms for "TeamCountyOrParish" MUST NOT exist in the metadata + | County | + + @Teams + Scenario: TeamDescription + When "TeamDescription" exists in the "Teams" metadata + Then "TeamDescription" MUST be "String" data type + And "TeamDescription" length SHOULD be equal to the RESO Suggested Max Length of 1024 + + @Teams + Scenario: TeamDirectPhone + When "TeamDirectPhone" exists in the "Teams" metadata + Then "TeamDirectPhone" MUST be "String" data type + And "TeamDirectPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Teams + Scenario: TeamEmail + When "TeamEmail" exists in the "Teams" metadata + Then "TeamEmail" MUST be "String" data type + And "TeamEmail" length SHOULD be equal to the RESO Suggested Max Length of 80 + + @Teams + Scenario: TeamFax + When "TeamFax" exists in the "Teams" metadata + Then "TeamFax" MUST be "String" data type + And "TeamFax" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Teams + Scenario: TeamKey + When "TeamKey" exists in the "Teams" metadata + Then "TeamKey" MUST be "String" data type + And "TeamKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Teams + Scenario: TeamKeyNumeric + When "TeamKeyNumeric" exists in the "Teams" metadata + Then "TeamKeyNumeric" MUST be "Integer" data type + + @Teams + Scenario: TeamLeadKey + When "TeamLeadKey" exists in the "Teams" metadata + Then "TeamLeadKey" MUST be "String" data type + And "TeamLeadKey" length SHOULD be equal to the RESO Suggested Max Length of 255 + + @Teams + Scenario: TeamLeadKeyNumeric + When "TeamLeadKeyNumeric" exists in the "Teams" metadata + Then "TeamLeadKeyNumeric" MUST be "Integer" data type + + @Teams + Scenario: TeamLeadLoginId + When "TeamLeadLoginId" exists in the "Teams" metadata + Then "TeamLeadLoginId" MUST be "String" data type + And "TeamLeadLoginId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Teams + Scenario: TeamLeadMlsId + When "TeamLeadMlsId" exists in the "Teams" metadata + Then "TeamLeadMlsId" MUST be "String" data type + And "TeamLeadMlsId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Teams + Scenario: TeamLeadNationalAssociationId + When "TeamLeadNationalAssociationId" exists in the "Teams" metadata + Then "TeamLeadNationalAssociationId" MUST be "String" data type + And "TeamLeadNationalAssociationId" length SHOULD be equal to the RESO Suggested Max Length of 25 + + @Teams + Scenario: TeamLeadStateLicense + When "TeamLeadStateLicense" exists in the "Teams" metadata + Then "TeamLeadStateLicense" MUST be "String" data type + And "TeamLeadStateLicense" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Teams + Scenario: TeamLeadStateLicenseState + When "TeamLeadStateLicenseState" exists in the "Teams" metadata + Then "TeamLeadStateLicenseState" MUST be "Single Enumeration" data type + And "TeamLeadStateLicenseState" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "TeamLeadStateLicenseState" MUST NOT contain any similar lookups + + @Teams + Scenario: TeamMobilePhone + When "TeamMobilePhone" exists in the "Teams" metadata + Then "TeamMobilePhone" MUST be "String" data type + And "TeamMobilePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Teams + Scenario: TeamName + When "TeamName" exists in the "Teams" metadata + Then "TeamName" MUST be "String" data type + And "TeamName" length SHOULD be equal to the RESO Suggested Max Length of 50 + + @Teams + Scenario: TeamOfficePhone + When "TeamOfficePhone" exists in the "Teams" metadata + Then "TeamOfficePhone" MUST be "String" data type + And "TeamOfficePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Teams + Scenario: TeamOfficePhoneExt + When "TeamOfficePhoneExt" exists in the "Teams" metadata + Then "TeamOfficePhoneExt" MUST be "String" data type + And "TeamOfficePhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Teams + Scenario: TeamPostalCode + When "TeamPostalCode" exists in the "Teams" metadata + Then "TeamPostalCode" MUST be "String" data type + And "TeamPostalCode" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Teams + Scenario: TeamPostalCodePlus4 + When "TeamPostalCodePlus4" exists in the "Teams" metadata + Then "TeamPostalCodePlus4" MUST be "String" data type + And "TeamPostalCodePlus4" length SHOULD be equal to the RESO Suggested Max Length of 4 + + @Teams + Scenario: TeamPreferredPhone + When "TeamPreferredPhone" exists in the "Teams" metadata + Then "TeamPreferredPhone" MUST be "String" data type + And "TeamPreferredPhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Teams + Scenario: TeamPreferredPhoneExt + When "TeamPreferredPhoneExt" exists in the "Teams" metadata + Then "TeamPreferredPhoneExt" MUST be "String" data type + And "TeamPreferredPhoneExt" length SHOULD be equal to the RESO Suggested Max Length of 10 + + @Teams + Scenario: TeamStateOrProvince + When "TeamStateOrProvince" exists in the "Teams" metadata + Then "TeamStateOrProvince" MUST be "Single Enumeration" data type + And "TeamStateOrProvince" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | AB | AB | + | AK | AK | + | AL | AL | + | AR | AR | + | AZ | AZ | + | BC | BC | + | CA | CA | + | CO | CO | + | CT | CT | + | DC | DC | + | DE | DE | + | FL | FL | + | GA | GA | + | HI | HI | + | IA | IA | + | ID | ID | + | IL | IL | + | IN | IN | + | KS | KS | + | KY | KY | + | LA | LA | + | MA | MA | + | MB | MB | + | MD | MD | + | ME | ME | + | MI | MI | + | MN | MN | + | MO | MO | + | MS | MS | + | MT | MT | + | NB | NB | + | NC | NC | + | ND | ND | + | NE | NE | + | NF | NF | + | NH | NH | + | NJ | NJ | + | NM | NM | + | NS | NS | + | NT | NT | + | NU | NU | + | NV | NV | + | NY | NY | + | OH | OH | + | OK | OK | + | ON | ON | + | OR | OR | + | PA | PA | + | PE | PE | + | QC | QC | + | RI | RI | + | SC | SC | + | SD | SD | + | SK | SK | + | TN | TN | + | TX | TX | + | UT | UT | + | VA | VA | + | VI | VI | + | VT | VT | + | WA | WA | + | WI | WI | + | WV | WV | + | WY | WY | + | YT | YT | + But "TeamStateOrProvince" MUST NOT contain any similar lookups + + @Teams + Scenario: TeamStatus + When "TeamStatus" exists in the "Teams" metadata + Then "TeamStatus" MUST be "Single Enumeration" data type + And "TeamStatus" MAY contain any of the following standard lookups + | lookupValue | lookupDisplayName | + | Active | Active | + | Inactive | Inactive | + But "TeamStatus" MUST NOT contain any similar lookups + + @Teams + Scenario: TeamTollFreePhone + When "TeamTollFreePhone" exists in the "Teams" metadata + Then "TeamTollFreePhone" MUST be "String" data type + And "TeamTollFreePhone" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Teams + Scenario: TeamVoiceMail + When "TeamVoiceMail" exists in the "Teams" metadata + Then "TeamVoiceMail" MUST be "String" data type + And "TeamVoiceMail" length SHOULD be equal to the RESO Suggested Max Length of 16 + + @Teams + Scenario: TeamVoiceMailExt + When "TeamVoiceMailExt" exists in the "Teams" metadata + Then "TeamVoiceMailExt" MUST be "String" data type + And "TeamVoiceMailExt" length SHOULD be equal to the RESO Suggested Max Length of 10 diff --git a/src/main/java/org/reso/certification/features/web-api/web-api-server.core.1.0.2.feature b/src/main/java/org/reso/certification/features/web-api/web-api-server.core.1.0.2.feature index 2dd3082c..24063912 100644 --- a/src/main/java/org/reso/certification/features/web-api/web-api-server.core.1.0.2.feature +++ b/src/main/java/org/reso/certification/features/web-api/web-api-server.core.1.0.2.feature @@ -8,7 +8,7 @@ Feature: Web API Server 1.0.2 Core Certification Given a RESOScript file was provided And Client Settings and Parameters were read from the file And a test container was successfully created from the given RESOScript - And the test container uses an authorization_code or client_credentials for authentication + And the test container uses an Authorization Code or Client Credentials for authentication ####################################### @@ -16,7 +16,7 @@ Feature: Web API Server 1.0.2 Core Certification ####################################### @REQ-WA103-END3 @2.4.1 @metadata Scenario: REQ-WA103-END3 - Request and Validate Server Metadata - When XML Metadata are requested from the service root in "ClientSettings_WebAPIURI" + When XML Metadata are requested from the given service root Then the server responds with a status code of 200 And the server has an OData-Version header value of "4.0" or "4.01" And the XML Metadata response is valid XML @@ -46,7 +46,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Single Valued Enumeration Data in "Parameter_SingleValueLookupField" has "Parameter_SingleLookupValue" @@ -58,7 +58,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Multiple Valued Enumeration Data in "Parameter_MultipleValueLookupField" has "Parameter_MultipleLookupValue1" @@ -70,7 +70,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Multiple Valued Enumeration Data in "Parameter_MultipleValueLookupField" has "Parameter_MultipleLookupValue1" And Multiple Valued Enumeration Data in "Parameter_MultipleValueLookupField" has "Parameter_MultipleLookupValue2" @@ -115,7 +115,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Integer data in "Parameter_IntegerField" "eq" "Parameter_IntegerValueLow" @@ -127,7 +127,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Integer data in "Parameter_IntegerField" "ne" "Parameter_IntegerValueLow" @@ -139,7 +139,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Integer data in "Parameter_IntegerField" "gt" "Parameter_IntegerValueLow" @@ -151,7 +151,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Integer data in "Parameter_IntegerField" "ge" "Parameter_IntegerValueLow" @@ -163,7 +163,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Integer data in "Parameter_IntegerField" "lt" "Parameter_IntegerValueLow" @@ -175,7 +175,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Integer data in "Parameter_IntegerField" "le" "Parameter_IntegerValueLow" @@ -187,7 +187,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Single Valued Enumeration Data in "Parameter_FilterHasField" has "Parameter_FilterHasLookupValue" @@ -199,7 +199,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Integer data in "Parameter_IntegerField" "gt" "Parameter_IntegerValueLow" "and" "lt" "Parameter_IntegerValueHigh" @@ -211,7 +211,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Integer data in "Parameter_IntegerField" "gt" "Parameter_IntegerValueLow" "or" "lt" "Parameter_IntegerValueHigh" @@ -223,7 +223,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Integer data in "Parameter_FilterNotField" "ne" "Parameter_FilterNotValue" @@ -235,7 +235,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And Date data in "Parameter_TimestampField" "gt" "Parameter_DateValue" @@ -247,7 +247,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And TimeOfDay data in "Parameter_TimestampField" "lt" "Parameter_TimeValue" @@ -259,7 +259,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And DateTimeOffset data in "Parameter_TimestampField" "lt" "Parameter_DateTimeValue" @@ -271,9 +271,9 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list - And DateTimeOffset data in "Parameter_TimestampField" "le" now() + And DateTimeOffset data in "Parameter_TimestampField" "le" now @REQ-WA103-QO28.1 @2.4.4 Scenario: REQ-WA103-QO28.1 - Query Support: $orderby asc filtered @@ -283,7 +283,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And DateTimeOffset data in "Parameter_TimestampField" is sorted in "asc" order @@ -295,7 +295,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And DateTimeOffset data in "Parameter_TimestampField" is sorted in "asc" order @@ -307,7 +307,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And DateTimeOffset data in "Parameter_TimestampField" is sorted in "desc" order @@ -319,7 +319,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And DateTimeOffset data in "Parameter_TimestampField" is sorted in "desc" order @@ -341,7 +341,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list @REQ-WA103-QR4 @2.4.2 @@ -352,7 +352,7 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And the number of results is less than or equal to "Parameter_TopCount" @@ -364,14 +364,14 @@ Feature: Web API Server 1.0.2 Core Certification And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And a GET request is made to the resolved Url in "REQ-WA103-QR5" with $skip="Parameter_TopCount" Then the server responds with a status code of 200 And the server has an OData-Version header value of "4.0" or "4.01" And the response is valid JSON And the response has results - And resource metadata for "Parameter_EndpointResource" contains the fields in the given select list + And resource metadata contain the fields in the given select list And data are present for fields contained within the given select list And data in the "Parameter_KeyOrKeyNumeric" fields are different in the second request than in the first @@ -406,4 +406,4 @@ Feature: Web API Server 1.0.2 Core Certification When a GET request is made to the resolved Url in "REQ-WA103-RC07" Then the server responds with a status code of 404 # Disable this check for now until Olingo-1380 is fixed - see: https://issues.apache.org/jira/browse/OLINGO-1380 - # And the server has an OData-Version header value of "4.0" or "4.01" + # And the server has an OData-Version header value of "4.0" or "4.01" \ No newline at end of file diff --git a/src/main/java/org/reso/certification/reporting/CertificationReportGenerator.java b/src/main/java/org/reso/certification/reporting/CertificationReportGenerator.java new file mode 100644 index 00000000..5be8d328 --- /dev/null +++ b/src/main/java/org/reso/certification/reporting/CertificationReportGenerator.java @@ -0,0 +1,114 @@ +package org.reso.certification.reporting; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.masterthought.cucumber.Configuration; +import net.masterthought.cucumber.ReportBuilder; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.reso.commander.common.Utils; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import static org.reso.commander.Commander.NOT_OK; +import static org.reso.commander.common.ErrorMsg.getDefaultErrorMessage; + +public class CertificationReportGenerator { + private static final Logger LOG = LogManager.getLogger(CertificationReportGenerator.class); + private static final String PATH_TO_JSON_RESULTS = System.getProperty("pathToJsonResults", null); + private static final String outputDirectoryName = PATH_TO_JSON_RESULTS.substring(0, PATH_TO_JSON_RESULTS.lastIndexOf(File.separator)); //"DD-1.7-report-" + Utils.getTimestamp(); + private static final boolean USE_MINIMAL_REPORT = Boolean.parseBoolean(System.getProperty("minimal", "false")); + private static final String DEFAULT_REPORT_DESCRIPTION = "Certification Report"; + private static final String projectName = System.getProperty("reportDescription", DEFAULT_REPORT_DESCRIPTION); + private static final String MINIMAL_JSON_EXTENSION = ".minimal.json"; + + public static void main(String[] args) { + + if (PATH_TO_JSON_RESULTS == null || !Files.exists(Paths.get(PATH_TO_JSON_RESULTS))) { + LOG.error(getDefaultErrorMessage("path to JSON results does not exist!" + + (PATH_TO_JSON_RESULTS != null ? "\npathToJsonResults=\"" + PATH_TO_JSON_RESULTS + "\"" : ""))); + System.exit(NOT_OK); + } + + List jsonFiles = new ArrayList<>(); + Configuration configuration = new Configuration(new File(outputDirectoryName), projectName); + + if (USE_MINIMAL_REPORT) LOG.info("Using minimal report format..."); + + jsonFiles.add(USE_MINIMAL_REPORT ? filterJSONResults() : PATH_TO_JSON_RESULTS); + + ReportBuilder reportBuilder = new ReportBuilder(jsonFiles, configuration); + reportBuilder.generateReports(); + + //remove minimal report file + if (USE_MINIMAL_REPORT && jsonFiles.size() > 0 && jsonFiles.get(0).contains(MINIMAL_JSON_EXTENSION)) + new File(jsonFiles.get(0)).deleteOnExit(); + } + + /** + * Filters all trailing skipped tests where there are no subsequent errors. + * Depends on the output of the Cucumber Reporting JSON plugin + * + * @return a JSON string with any trailing skipped tests removed + */ + private static String filterJSONResults() { + try { + Gson gson = new Gson(); + JsonArray scenarios = gson.fromJson(new FileReader(PATH_TO_JSON_RESULTS), JsonArray.class); + JsonArray filteredScenarios = new JsonArray(); + JsonArray filteredElements; + + int skippedStepsCount = 0, failedStepsCount = 0; + + for (JsonElement scenario : scenarios) { + filteredElements = new JsonArray(); + JsonArray elements = scenario.getAsJsonObject().getAsJsonArray("elements").getAsJsonArray(); + for (JsonElement element : elements) { + if (!element.getAsJsonObject().get("type").getAsString().contentEquals("background")) { + JsonArray steps = element.getAsJsonObject().get("steps").getAsJsonArray(); + for (JsonElement step : steps) { + JsonObject result = step.getAsJsonObject().get("result").getAsJsonObject(); + if (result.get("status").getAsString().contentEquals("skipped")) { + skippedStepsCount++; + } + + if (result.get("status").getAsString().contentEquals("failed")) { + failedStepsCount++; + } + } + if (skippedStepsCount == 0 || failedStepsCount > 0) { + filteredElements.add(element); + } + skippedStepsCount = 0; + failedStepsCount = 0; + } + } + + if (filteredElements.size() > 0) { + final JsonObject filteredScenario = scenario.deepCopy().getAsJsonObject(); + filteredScenario.getAsJsonObject().remove("elements"); + filteredScenario.getAsJsonObject().add("elements", filteredElements); + filteredScenarios.add(filteredScenario); + } + } + + String outputFilename = PATH_TO_JSON_RESULTS + .substring(PATH_TO_JSON_RESULTS.lastIndexOf(File.separator) + 1) + .replace(".json", MINIMAL_JSON_EXTENSION); + return Utils.createFile(outputDirectoryName, outputFilename, filteredScenarios.toString()).toString(); + + } catch (IOException e) { + e.printStackTrace(); + } + + return null; + } +} diff --git a/src/main/java/org/reso/certification/stepdefs/DataDictionary.java b/src/main/java/org/reso/certification/stepdefs/DataDictionary.java index f3ad05f4..8a5b7265 100644 --- a/src/main/java/org/reso/certification/stepdefs/DataDictionary.java +++ b/src/main/java/org/reso/certification/stepdefs/DataDictionary.java @@ -1,81 +1,582 @@ package org.reso.certification.stepdefs; -import io.cucumber.java8.En; +import com.google.common.collect.Sets; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.google.inject.Inject; +import io.cucumber.datatable.DataTable; +import io.cucumber.java.en.*; +import org.apache.commons.text.similarity.LevenshteinDistance; +import org.apache.http.HttpStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.olingo.client.api.edm.xml.XMLMetadata; +import org.apache.olingo.commons.api.edm.EdmEnumType; +import org.apache.olingo.commons.api.edm.EdmMember; +import org.apache.olingo.commons.api.edm.EdmNamed; +import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.commons.api.edm.provider.CsdlEnumMember; +import org.reso.certification.containers.WebAPITestContainer; +import org.reso.commander.Commander; +import org.reso.commander.common.TestUtils; +import org.reso.commander.common.TestUtils.TypeMappings; +import org.reso.commander.common.Utils; +import org.reso.models.IgnoredItem; +import org.reso.models.Settings; -public class DataDictionary implements En { +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; - public DataDictionary() { +import static org.junit.Assert.*; +import static org.junit.Assume.assumeTrue; +import static org.reso.commander.Commander.NOT_OK; +import static org.reso.commander.common.ErrorMsg.getDefaultErrorMessage; +import static org.reso.commander.common.Utils.pluralize; +import static org.reso.commander.common.Utils.wrapColumns; - /* - * Background Functions - */ - Given("^an XML Metadata file was provided$", () -> { - }); - And("^the given file exists$", () -> { - }); - And("^the file contains valid XML$", () -> { - }); - And("^the file could be read by the Commander$", () -> { - }); +public class DataDictionary { + private static final Logger LOG = LogManager.getLogger(DataDictionary.class); - /* - * Generic Functions - */ - Given("^\"([^\"]*)\" exists in the metadata$", (String fieldName) -> { - }); - And("^\"([^\"]*)\" values are not null$", (String fieldName) -> { - }); - Then("^\"([^\"]*)\" should be \"([^\"]*)\" data type$", (String fieldName, String dataTypeName) -> { - }); + @Inject + WebAPITestContainer container; + //TODO: make this a dynamic property based on DD version + public static final String REFERENCE_WORKSHEET = "RESODataDictionary-1.7.xlsx"; + public static final String REFERENCE_METADATA = "RESODataDictionary-1.7.edmx"; - /* - * Boolean Fields - handled by generic functions - */ + //local variables + private static final AtomicReference currentResourceName = new AtomicReference<>(); + private static final AtomicReference> foundMembers = new AtomicReference<>(new LinkedHashMap<>()); + private static final AtomicReference> foundStandardMembers = new AtomicReference<>(new LinkedHashSet<>()); + private static final AtomicReference> currentLookups = new AtomicReference<>(); + private static final AtomicReference>>> ignoredItems = new AtomicReference<>(new LinkedHashMap<>()); - /* - * Date Fields - */ - And("^\"([^\"]*)\" length should be between the bounds in the metadata$", (String fieldName) -> { - }); - And("^\"([^\"]*)\" length should be less than or equal to the RESO maxlength of (\\d+)$", (String fieldName, Integer maxLength) -> { - }); + private static XMLMetadata referenceMetadata = null; + private static boolean areMetadataValid = false; - /* - * Decimal Fields - */ - And("^\"([^\"]*)\" precision should be between the bounds in the metadata$", (String fieldName) -> { - }); - And("^\"([^\"]*)\" scale should be between the bounds in the metadata$", (String fieldName) -> { - }); - And("^\"([^\"]*)\" precision should be less than or equal to the RESO maxlength of (\\d+)$", (String fieldName, Integer maxLength) -> { - }); - And("^\"([^\"]*)\" scale should be less than or equal to the RESO scale of (\\d+)$", (String fieldName, Integer scale) -> { - }); + //named args + private static final String SHOW_RESPONSES_ARG = "showResponses"; + private static final String USE_STRICT_MODE_ARG = "strict"; + private static final String PATH_TO_METADATA_ARG = "pathToMetadata"; + private static final String PATH_TO_RESOSCRIPT_ARG = "pathToRESOScript"; + private static final String LOOKUP_VALUE = "lookupValue"; + //extract any params here + private final boolean showResponses = Boolean.parseBoolean(System.getProperty(SHOW_RESPONSES_ARG)); + private final boolean strictMode = Boolean.parseBoolean(System.getProperty(USE_STRICT_MODE_ARG)); + private final String pathToMetadata = System.getProperty(PATH_TO_METADATA_ARG); + private final String pathToRESOScript = System.getProperty(PATH_TO_RESOSCRIPT_ARG); - /* - * Integer Fields - handled by generic functions - */ + //derived variables + private final boolean isUsingRESOScript = pathToRESOScript != null; + private final boolean isUsingMetadata = pathToMetadata != null; - /* - * Multi-select Fields - */ - And("^\"([^\"]*)\" enum values can be compiled$", (String fieldName) -> { - }); - And("^\"([^\"]*)\" should only contain enum values found in the metadata$", (String fieldName) -> { + + @Given("a RESOScript or Metadata file are provided") + public void aRESOScriptOrMetadataFileAreProvided() { + if (pathToRESOScript == null && pathToMetadata == null) { + LOG.error(getDefaultErrorMessage("one of pathToRESOScript OR pathToMetadata MUST be present in command arguments, see README")); + System.exit(NOT_OK); + } + } + + @And("a test container was successfully created from the given RESOScript file") + public void aTestContainerWasSuccessfullyCreatedFromTheGivenRESOScriptFile() { + if (isUsingRESOScript) { + container.initialize(); + container.setShowResponses(showResponses); + } + } + + @And("a test container was successfully created from the given metadata file") + public void aMetadataTestContainerWasSuccessfullyCreatedFromTheGivenMetadataFile() { + if (isUsingMetadata) { + container.initialize(pathToMetadata); + container.setShowResponses(showResponses); + } + } + + @When("a RESOScript file is provided") + public void aRESOScriptFileIsProvided() { + if (isUsingRESOScript) { + if (container.getPathToRESOScript() == null) { + container.setPathToRESOScript(System.getProperty("pathToRESOScript")); + } + assertNotNull("ERROR: pathToRESOScript must be present in command arguments, see README", container.getPathToRESOScript()); + LOG.debug("Using RESOScript: " + container.getPathToRESOScript()); + } + } + + @Then("Client Settings and Parameters can be read from the RESOScript") + public void clientSettingsAndParametersCanBeReadFromTheRESOScript() { + if (isUsingRESOScript) { + if (container.getSettings() == null) { + container.setSettings(Settings.loadFromRESOScript(new File(System.getProperty("pathToRESOScript")))); + assertNotNull("ERROR: Settings could not be loaded.", container.getSettings()); + LOG.info("RESOScript loaded successfully!"); + } + } + } + + @And("the test container uses an Authorization Code or Client Credentials for authentication") + public void theTestContainerUsesAnAuthorizationCodeOrClientCredentialsForAuthentication() { + if (isUsingRESOScript) { + assertNotNull(container.getCommander()); + assertTrue("ERROR: Commander must either have a valid Authorization Code or Client Credentials configuration.", + container.getCommander().isAuthTokenClient() + || (container.getCommander().isOAuth2Client() && container.getCommander().hasValidAuthConfig())); + } + } + + @When("a metadata file is provided") + public void aMetadataFileIsProvided() { + boolean result = false; + if (isUsingMetadata) { + result = pathToMetadata != null && Files.exists(Paths.get(pathToMetadata)); + if (!result) { + LOG.error(getDefaultErrorMessage("Path to given metadata file does not exist: " + PATH_TO_METADATA_ARG + "=" + pathToMetadata)); + System.exit(NOT_OK); + } + } + } + + @And("valid metadata are loaded into the test container") + public void validMetadataAreLoadedIntoTheTestContainer() { + if (isUsingMetadata && container.getXMLMetadata() == null) { + try { + final String xmlMetadataString = new String(Files.readAllBytes(Paths.get(pathToMetadata))); + + assertTrue("XML Metadata MUST be valid XML according to the OASIS XSDs!", + Commander.validateXML(xmlMetadataString)); + container.setXMLResponseData(xmlMetadataString); + + container.setXMLMetadata(Commander.deserializeXMLMetadata(xmlMetadataString, container.getCommander().getClient())); + assertTrue("XML Metadata MUST be valid OData XML Metadata!", + Commander.validateMetadata(container.getXMLMetadata(), container.getCommander().getClient())); + + container.setEdm(Commander.deserializeEdm(xmlMetadataString, container.getCommander().getClient())); + assertTrue("Edm metadata MUST be valid!", + Commander.validateMetadata(container.getEdm(), container.getCommander().getClient())); + + //if we have gotten to this point without exceptions, then metadata are valid + container.validateMetadata(); + areMetadataValid = container.hasValidMetadata(); + + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @And("valid metadata were retrieved from the server") + public void validMetadataWereRetrievedFromTheServer() { + boolean result = false; + + if (isUsingRESOScript && container.getShouldValidateMetadata()) { + //request metadata from server using service root in RESOScript file + TestUtils.assertXMLMetadataAreRequestedFromTheServer(container); + + if (container.getResponseCode() != HttpStatus.SC_OK) { + LOG.error(getDefaultErrorMessage("Could not retrieve metadata from", container.getServiceRoot() + "/$metadata")); + System.exit(NOT_OK); + } + + //metadata validation tests + TestUtils.assertValidXMLMetadata(container); + TestUtils.assertXmlMetadataContainsEdm(container); + TestUtils.assertXMLMetadataHasValidServiceDocument(container); + + //build field map and ensure it's not null + assertNotNull(container.getFieldMap()); + + //everything succeeded, mark validation successful + container.setShouldValidateMetadata(false); + + //if we have gotten to this point without exceptions, then metadata are valid + areMetadataValid = container.hasValidMetadata(); + } + } + + @When("{string} exists in the {string} metadata") + public void existsInTheMetadata(String fieldName, String resourceName) { + + if (strictMode && !areMetadataValid) { + LOG.error(getDefaultErrorMessage("Metadata validation failed, but is required to pass when using strict mode!")); + System.exit(NOT_OK); + } + + assertNotNull(getDefaultErrorMessage("field name cannot be null!"), fieldName); + assertNotNull(getDefaultErrorMessage("resource name cannot be null!"), resourceName); + + currentResourceName.set(resourceName); + + if (container.getFieldMap().containsKey(currentResourceName.get())) { + //add keyed hash for the given resource name if it doesn't exist + if (!container.getFieldMap().containsKey(currentResourceName.get())) { + container.getFieldMap().put(currentResourceName.get(), new LinkedHashMap<>()); + } + + //if the field for the given resource contains the given field, then add it to the standard field map + if (container.getFieldMap(currentResourceName.get()).containsKey(fieldName)) { + container.getFieldMap().get(resourceName).put(fieldName, container.getFieldMap(resourceName).get(fieldName)); + } + } + + if (isFieldContainedInMetadata(fieldName)) LOG.info("\nFound Field: " + fieldName); + assumeTrue("Skipped: " + fieldName, isFieldContainedInMetadata(fieldName)); + } + + @Then("{string} MUST be {string} data type") + public void mustBeDataType(String fieldName, String dataTypeName) { + String foundTypeName = container.getFieldMap().get(currentResourceName.get()).get(fieldName).getType(); + LOG.info("Field data type: " + foundTypeName); + assertDataTypeMapping(fieldName, dataTypeName, foundTypeName); + } + + @And("{string} MAY contain any of the following standard lookups") + public void mayContainAnyOfTheFollowingStandardLookups(String fieldName, DataTable dataTable) { + currentLookups.set(dataTable.asMap(String.class, String.class)); + foundMembers.set(getFoundMembers(fieldName)); + foundStandardMembers.set(getFoundStandardMembers(foundMembers.get(), dataTable)); + + if (foundStandardMembers.get().size() == 0) { + LOG.info("No RESO Standard Enumerations found for field: " + fieldName); + } + } + + @And("{string} MUST contain at least one of the following standard lookups") + public void mustContainAtLeastOneOfTheFollowingStandardLookups(String fieldName, DataTable dataTable) { + foundMembers.set(getFoundMembers(fieldName)); + foundStandardMembers.set(getFoundStandardMembers(foundMembers.get(), dataTable)); + + assertTrue(getDefaultErrorMessage(fieldName, "MUST contain at least one standard enumeration!"), + foundStandardMembers.get().size() > 0); + } + + /** + * Gets the set of found enumeration members for the given field + * @param fieldName the field name of the field whose enumeration to get + * @return a map of lookup value and lookup display name + */ + private Map getFoundMembers(String fieldName) { + final FullQualifiedName fqdn = container.getFieldMap(currentResourceName.get()).get(fieldName).getTypeAsFQNObject(); + final EdmEnumType enumType = container.getEdm().getEnumType(fqdn); + + final Map foundMembers = new LinkedHashMap<>(); + enumType.getMemberNames().forEach(name -> foundMembers.put(name, enumType.getMember(name))); + + if (foundMembers.size() > 0) { + LOG.info("Found " + foundMembers.size() + " Enumeration" + + pluralize(foundMembers.size()) + ": " + Utils.wrapColumns("[" + String.join(", ", foundMembers.keySet()) + "]", 80, "\n\t")); + } + + return foundMembers; + } + + /** + * Gets the set of found RESO Standard member names in a given found members Map + * @param members a map of the enumeration members that was found in the metadata for a given field + * @param dataTable data table of standard lookup value and lookup display name items + * @return a set of EdmMembers from the Lookup metadata that contains the standard items in the data table + */ + private Set getFoundStandardMembers(Map members, DataTable dataTable) { + List> rows = dataTable.asMaps(String.class, String.class); + + Set standardMembers = rows.stream().map(row -> row.get(LOOKUP_VALUE)).collect(Collectors.toCollection(LinkedHashSet::new)); + Set foundMembers = members.keySet(); + Set difference = Sets.difference(foundMembers, standardMembers); + Set intersection = Sets.intersection(foundMembers, standardMembers); + + if (intersection.size() > 0) { + LOG.info("Found " + intersection.size() + " RESO Standard Enumeration" + + pluralize(intersection.size()) + ": " + Utils.wrapColumns("[" + String.join(", ", intersection) + "]", "\n\t")); + } + + if (standardMembers.size() > 0) { + LOG.info(standardMembers.size() + " Possible RESO Standard Enumeration" + + pluralize(standardMembers.size()) + ": " + Utils.wrapColumns("[" + String.join(", ", standardMembers) + "]", "\n\t")); + } + + if (difference.size() > 0) { + LOG.info("Found " + difference.size() + " Non-standard Enumeration" + + pluralize(difference.size()) + ": " + Utils.wrapColumns("[" + String.join(", ", difference) + "]", "\n\t")); + } + return intersection.stream().map(members::get).collect(Collectors.toCollection(LinkedHashSet::new)); + } + + /** + * Determines whether the given field name has the correct data type, according to the mappings in the + * Data Dictionary specification and RCP-031. + * @apiNote SEE: https://docs.google.com/document/d/15DFf9kDX_mlGCJVOch2fztl8W5h-yd18N0_03Sb4HwM/edit#heading=h.dw8owdmv988f + * @param fieldName the field name of the field to assert the mapping for + * @param assertedTypeName the asserted type name (from the BDD tests, usually) + * @param foundTypeName the type name that was found in the metadata + */ + protected final void assertDataTypeMapping(String fieldName, String assertedTypeName, String foundTypeName) { + assertNotNull(getDefaultErrorMessage("you must specify a Data Dictionary type name to check!"), assertedTypeName); + assertNotNull(getDefaultErrorMessage("you must specify an Edm type name to check!"), foundTypeName); + EdmEnumType enumType; + boolean isIntegerType; + + final boolean isPrimitiveType = Arrays.stream(new String[] { + TypeMappings.ODataTypes.INT16, + TypeMappings.ODataTypes.INT32, + TypeMappings.ODataTypes.INT64, + TypeMappings.ODataTypes.STRING, + TypeMappings.ODataTypes.DATE, + TypeMappings.ODataTypes.DATETIME_OFFSET, + TypeMappings.ODataTypes.BOOLEAN, + TypeMappings.ODataTypes.DECIMAL, + TypeMappings.ODataTypes.DOUBLE + }).anyMatch(foundTypeName::contentEquals); + + //TODO: make functions + switch (assertedTypeName) { + case TypeMappings.DataDictionaryTypes.STRING: + assertTrue(wrapColumns(getDefaultErrorMessage(fieldName, "MUST map to", TypeMappings.ODataTypes.STRING, "but found", foundTypeName)), + foundTypeName.contentEquals(TypeMappings.ODataTypes.STRING)); + break; + case TypeMappings.DataDictionaryTypes.DATE: + assertTrue(wrapColumns(getDefaultErrorMessage(fieldName, "MUST map to", TypeMappings.ODataTypes.DATE, "but found", foundTypeName)), + foundTypeName.contentEquals(TypeMappings.ODataTypes.DATE)); + break; + case TypeMappings.DataDictionaryTypes.DECIMAL: + assertTrue(wrapColumns(getDefaultErrorMessage(fieldName, "MUST map to", TypeMappings.ODataTypes.DECIMAL, "OR", + TypeMappings.ODataTypes.DOUBLE, "but found", foundTypeName)), + foundTypeName.contentEquals(TypeMappings.ODataTypes.DECIMAL) + || foundTypeName.contentEquals(TypeMappings.ODataTypes.DOUBLE)); + break; + case TypeMappings.DataDictionaryTypes.INTEGER: + isIntegerType = foundTypeName.contentEquals(TypeMappings.ODataTypes.INT16) + || foundTypeName.contentEquals(TypeMappings.ODataTypes.INT32) + || foundTypeName.contentEquals(TypeMappings.ODataTypes.INT64); + + assertTrue(wrapColumns(getDefaultErrorMessage(fieldName, "MUST map to", TypeMappings.ODataTypes.INT64, + "OR", TypeMappings.ODataTypes.INT32, + "OR", TypeMappings.ODataTypes.INT16, "but found", foundTypeName)), + isIntegerType); + break; + case TypeMappings.DataDictionaryTypes.BOOLEAN: + assertTrue(getDefaultErrorMessage(fieldName, "MUST map to", TypeMappings.ODataTypes.BOOLEAN, "but found", foundTypeName), + foundTypeName.contentEquals(TypeMappings.ODataTypes.BOOLEAN)); + break; + case TypeMappings.DataDictionaryTypes.SINGLE_ENUM: + if (foundTypeName.contentEquals(TypeMappings.ODataTypes.STRING)) { + LOG.error(wrapColumns(getDefaultErrorMessage("String types are not allowed for enumerated fields at the current time.", "\nSee RCP-031 for further information:", + "https://members.reso.org/pages/viewpage.action?pageId=67962918#RCP-WEBAPI-031DataDictionaryRepresentationintheWebAPI-DataTypeMappings.1"))); + } + + assertFalse(wrapColumns(getDefaultErrorMessage("Enumerated data type MUST declare a unique nominal type.", + "Found primitive type of", foundTypeName, "\nSee: http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part3-csdl/odata-v4.0-errata03-os-part3-csdl-complete.html#_Toc453752565")), + isPrimitiveType); + + //check for enum type by FQDN in the Edm cached in the container + enumType = container.getEdm().getEnumType(new FullQualifiedName(foundTypeName)); + + isIntegerType = enumType.getUnderlyingType().getFullQualifiedName().getFullQualifiedNameAsString().contentEquals(TypeMappings.ODataTypes.INT16) + || enumType.getUnderlyingType().getFullQualifiedName().getFullQualifiedNameAsString().contentEquals(TypeMappings.ODataTypes.INT32) + || enumType.getUnderlyingType().getFullQualifiedName().getFullQualifiedNameAsString().contentEquals(TypeMappings.ODataTypes.INT64); + + assertTrue(wrapColumns(getDefaultErrorMessage("Enumerated Types MUST use an underlying type of", + TypeMappings.ODataTypes.INT16, "OR", TypeMappings.ODataTypes.INT32, "OR", TypeMappings.ODataTypes.INT64)), isIntegerType); + + assertNotNull(wrapColumns(getDefaultErrorMessage( + "could not find a definition for", foundTypeName, "in the Entity Data Model!")), enumType); + + assertFalse(wrapColumns(getDefaultErrorMessage("IsFlags=\"true\" but MUST be false for single-valued enumerations!")), + enumType.isFlags()); + break; + case TypeMappings.DataDictionaryTypes.MULTI_ENUM: + if (foundTypeName.contentEquals(TypeMappings.ODataTypes.STRING)) { + LOG.error(wrapColumns(getDefaultErrorMessage("String types are not allowed for enumerated fields at the current time.", "\nSee RCP-031 for further information:", + "https://members.reso.org/pages/viewpage.action?pageId=67962918#RCP-WEBAPI-031DataDictionaryRepresentationintheWebAPI-DataTypeMappings.1"))); + } + + assertFalse(wrapColumns(getDefaultErrorMessage("Enumerated data type MUST declare a unique nominal type.", + "Found primitive type of", foundTypeName, + "\nSee: http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part3-csdl/odata-v4.0-errata03-os-part3-csdl-complete.html#_Toc453752565")), + isPrimitiveType); + + //check for enum type by FQDN in the Edm cached in the container + enumType = container.getEdm().getEnumType(new FullQualifiedName(foundTypeName)); + + isIntegerType = + enumType.getUnderlyingType().getFullQualifiedName().getFullQualifiedNameAsString().contentEquals(TypeMappings.ODataTypes.INT16) + || enumType.getUnderlyingType().getFullQualifiedName().getFullQualifiedNameAsString().contentEquals(TypeMappings.ODataTypes.INT32) + || enumType.getUnderlyingType().getFullQualifiedName().getFullQualifiedNameAsString().contentEquals(TypeMappings.ODataTypes.INT64); + + assertTrue(wrapColumns(getDefaultErrorMessage("Enumerated Types MUST use an underlying type of", + TypeMappings.ODataTypes.INT16, "OR", TypeMappings.ODataTypes.INT32, "OR", TypeMappings.ODataTypes.INT64)), + isIntegerType); + + assertNotNull(wrapColumns(getDefaultErrorMessage( + "could not find a definition for", foundTypeName, "in the Entity Data Model!")), enumType); + + boolean isCollection = container.getFieldMap().get(currentResourceName.get()).get(fieldName).isCollection(); + if (!isCollection) { + assertTrue(wrapColumns(getDefaultErrorMessage("Multi-Enumerations MUST have IsFlags=\"true\"")), + enumType.isFlags()); + } + break; + case TypeMappings.DataDictionaryTypes.TIMESTAMP: + assertTrue(wrapColumns(getDefaultErrorMessage(fieldName, "MUST map to", TypeMappings.ODataTypes.DATETIME_OFFSET, "but found", foundTypeName)), + foundTypeName.contentEquals(TypeMappings.ODataTypes.DATETIME_OFFSET)); + break; + default: + fail(wrapColumns(getDefaultErrorMessage("could not find data type mapping for", assertedTypeName))); + break; + } + } + + @And("{string} precision SHOULD be equal to the RESO Suggested Max Precision of {int}") + public void precisionSHOULDBeEqualToTheRESOSuggestedMaxPrecisionOf(String fieldName, Integer suggestedPrecision) { + Integer precision = container.getFieldMap(currentResourceName.get()) != null + && container.getFieldMap(currentResourceName.get()).containsKey(fieldName) + ? container.getFieldMap(currentResourceName.get()).get(fieldName).getPrecision() : null; + + if (!Objects.equals(precision, suggestedPrecision)) { + LOG.warn("Precision for field " + fieldName + " SHOULD be equal to the RESO Suggested Max Precision of " + suggestedPrecision + + " but was " + precision); + } else { + LOG.info("Precision for field " + fieldName + " is equal to the RESO Suggested Max Scale of " + suggestedPrecision); + } + } + + @And("{string} scale SHOULD be equal to the RESO Suggested Max Scale of {int}") + public void scaleSHOULDBeEqualToTheRESOSuggestedMaxScaleOf(String fieldName, Integer suggestedMaxScale) { + Integer scale = container.getFieldMap(currentResourceName.get()) != null + && container.getFieldMap(currentResourceName.get()).containsKey(fieldName) + ? container.getFieldMap(currentResourceName.get()).get(fieldName).getScale() : null; + + if (!Objects.equals(scale, suggestedMaxScale)) { + LOG.warn("Scale for field " + fieldName + " SHOULD be equal to the RESO Suggested Max Scale of " + suggestedMaxScale + + " but was " + scale); + } else { + LOG.info("Scale for field " + fieldName + " is equal to the RESO Suggested Max Scale of " + suggestedMaxScale); + } + } + + @And("{string} length SHOULD be equal to the RESO Suggested Max Length of {int}") + public void lengthSHOULDBeEqualToTheRESOSuggestedMaxLengthOf(String fieldName, Integer suggestedMaxLength) { + Integer length = container.getFieldMap(currentResourceName.get()) != null + && container.getFieldMap(currentResourceName.get()).containsKey(fieldName) + ? container.getFieldMap(currentResourceName.get()).get(fieldName).getMaxLength() : null; + + if (!Objects.equals(length, suggestedMaxLength)) { + LOG.warn("Length for field " + fieldName + " SHOULD be equal to the RESO Suggested Max Length of " + suggestedMaxLength + + " but was " + length); + } else { + LOG.info("Length for field " + fieldName + " is equal to the RESO Suggested Max Length of " + length); + } + } + + @And("{string} MUST contain only standard enumerations") + public void mustContainOnlyStandardEnumerations(String fieldName) { + final String REFERENCE_ENUMS_NAMESPACE = "org.reso.metadata.enums"; + FullQualifiedName fqn = container.getFieldMap().get(currentResourceName.get()).get(fieldName).getTypeAsFQNObject(); + + Set foundMembers = new LinkedHashSet<>(container.getEdm().getEnumType(fqn).getMemberNames()); + Set standardMembers = getReferenceMetadata().getSchema(REFERENCE_ENUMS_NAMESPACE).getEnumType(fieldName) + .getMembers().stream() + .map(CsdlEnumMember::getName) + .collect(Collectors.toCollection(LinkedHashSet::new)); + + assertTrue("\n" + getDefaultErrorMessage("Lookups for field", fieldName, "MUST only contain Standard Enumerations!", + "\nFound the following non-standard enumerations:", Utils.wrapColumns("[" + String.join(", ", Sets.difference(foundMembers, standardMembers)) + "]")) + "\n", + standardMembers.containsAll(foundMembers)); + + LOG.info("PASSED: Field \"" + fieldName + "\" only contains Standard Names!"); + } + + @And("the following synonyms for {string} MUST NOT exist in the metadata") + public void theFollowingSynonymsForMUSTNOTExistInTheMetadata(String fieldName, List synonyms) { + synonyms.forEach(synonym -> + assertFalse(wrapColumns(getDefaultErrorMessage("Synonym", "\"" + synonym + "\"", "of fieldName", "\"" + fieldName + "\"", "found in the metadata!", + "\nSynonyms are not allowed!")), + container.getFieldMap(currentResourceName.get()).containsKey(synonym))); + } + + private static int getDistanceThreshold(String word) { + final double TOLERANCE = 0.25; + return (int) (TOLERANCE * word.length()); + } + + private void populateIgnoredItems() { + final String IGNORED_ITEMS = "ignored.json"; + String ignoredJson = Commander.convertInputStreamToString(Thread.currentThread().getContextClassLoader().getResourceAsStream(IGNORED_ITEMS)); + Type targetClassType = new TypeToken>(){}.getType(); + Collection ignored = new Gson().fromJson(ignoredJson, targetClassType); + ignored.forEach(ignoredItem -> { + if (!ignoredItems.get().containsKey(ignoredItem.getLookup())) { + ignoredItems.get().put(ignoredItem.getLookup(), new LinkedHashMap<>()); + } + ignoredItems.get().get(ignoredItem.getLookup()).put(ignoredItem.getValue(), new LinkedHashSet<>(ignoredItem.getIgnored())); }); + } + + @But("{string} MUST NOT contain any similar lookups") + public void mustNOTContainAnySimilarLookups(String fieldName) { + if (currentLookups.get() == null) return; + + //deserialize the ignored items list + if (ignoredItems.get().size() == 0) populateIgnoredItems(); + + Map similarMembers = new LinkedHashMap<>(); + Set standardMembers = foundStandardMembers.get().stream() + .map(EdmNamed::getName) + .filter(item -> !item.contentEquals(LOOKUP_VALUE)) + .collect(Collectors.toCollection(LinkedHashSet::new)); + Set difference = Sets.difference(foundMembers.get().keySet(), standardMembers); - /* - * Single-select Fields - handled by generic functions - */ + int distance, lastDistance; + for (String nonstandardField : difference) { + lastDistance = 0; + for (String lookupName : currentLookups.get().keySet()) { + //TODO: gross, clean up + if (!(ignoredItems.get().containsKey(fieldName) && ignoredItems.get().get(fieldName).containsKey(lookupName) + && ignoredItems.get().get(fieldName).get(lookupName).contains(nonstandardField))) { + if (lookupName.compareToIgnoreCase(nonstandardField) == 0) { + similarMembers.put(lookupName, foundMembers.get().get(nonstandardField)); + } else { + distance = LevenshteinDistance.getDefaultInstance().apply(lookupName, nonstandardField); + if (distance < getDistanceThreshold(lookupName)) { + if (lastDistance < distance) { + lastDistance = distance; + similarMembers.put(lookupName, foundMembers.get().get(nonstandardField)); + } + } + } + } + } + } - /* - * String Fields - handled by generic functions - */ + assertFalse("\n" + getDefaultErrorMessage("Lookups were found that are similar to RESO Standard Lookup Values!\n\n", + similarMembers.keySet().stream() + .map(member -> "\t{RESO: " + member + ", Yours: " + similarMembers.get(member) + "}") + .collect(Collectors.joining("\n")), + "\n"), similarMembers.size() > 0); + } + + private XMLMetadata getReferenceMetadata() { + if (referenceMetadata == null) { + URL resource = Thread.currentThread().getContextClassLoader().getResource(REFERENCE_METADATA); + assert resource != null; + referenceMetadata = Commander + .deserializeXMLMetadata(Commander.convertInputStreamToString(Commander.deserializeFileFromPath(resource.getPath())), + container.getCommander().getClient()); + } + return referenceMetadata; + } - /* - * Timestamp Fields - handled by generic functions - */ + private boolean isFieldContainedInMetadata(String fieldName) { + return container.getFieldMap().containsKey(currentResourceName.get()) + && container.getFieldMap().get(currentResourceName.get()).containsKey(fieldName); } } diff --git a/src/main/java/org/reso/certification/stepdefs/WebAPIServer.java b/src/main/java/org/reso/certification/stepdefs/WebAPIServer.java new file mode 100644 index 00000000..ef568208 --- /dev/null +++ b/src/main/java/org/reso/certification/stepdefs/WebAPIServer.java @@ -0,0 +1,998 @@ +package org.reso.certification.stepdefs; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.node.POJONode; +import com.google.inject.Inject; +import io.cucumber.java.en.And; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import org.apache.http.HttpStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.olingo.client.api.communication.ODataClientErrorException; +import org.apache.olingo.client.api.data.ResWrap; +import org.apache.olingo.client.api.domain.ClientEntitySet; +import org.apache.olingo.client.api.uri.QueryOption; +import org.apache.olingo.commons.api.data.EntityCollection; +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; +import org.apache.olingo.commons.api.edm.provider.CsdlEntityContainer; +import org.apache.olingo.commons.api.edm.provider.CsdlNavigationProperty; +import org.apache.olingo.commons.api.format.ContentType; +import org.reso.certification.containers.WebAPITestContainer; +import org.reso.commander.Commander; +import org.reso.commander.common.TestUtils; +import org.reso.models.Parameters; +import org.reso.models.Request; +import org.reso.models.Settings; + +import java.sql.Time; +import java.sql.Timestamp; +import java.text.DecimalFormat; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + +import static io.restassured.path.json.JsonPath.from; +import static org.junit.Assert.*; +import static org.reso.certification.containers.WebAPITestContainer.*; +import static org.reso.certification.containers.WebAPITestContainer.ODATA_QUERY_PARAMS.SKIP; +import static org.reso.commander.Commander.*; +import static org.reso.commander.common.ErrorMsg.getAssertResponseCodeErrorMessage; +import static org.reso.commander.common.ErrorMsg.getDefaultErrorMessage; +import static org.reso.commander.common.TestUtils.DateParts.FRACTIONAL; +import static org.reso.commander.common.TestUtils.*; +import static org.reso.commander.common.TestUtils.Operators.*; + +public class WebAPIServer { + private static final Logger LOG = LogManager.getLogger(WebAPIServer.class); + + @Inject + WebAPITestContainer container; + + /** + * XML Metadata Getter + */ + @When("XML Metadata are requested from the given service root") + public void xmlMetadataAreRequestedFromTheGivenServiceRoot() { + TestUtils.assertXMLMetadataAreRequestedFromTheServer(container); + } + + /** + * XML Validation Wrapper + */ + @And("the XML Metadata response is valid XML") + public void theXMLMetadataResponseIsValidXML() { + TestUtils.assertXMLResponseIsValidXML(container); + } + + /** + * Gets XML Metadata from the server and validates them + */ + @And("the XML Metadata returned by the server are valid") + public void theXMLMetadataReturnedByTheServerAreValid() { + TestUtils.assertValidXMLMetadata(container); + } + + /** + * Checks that the given XML Metadata (EDMX) contain an Entity Data Model (Edm) + */ + @And("the XML Metadata returned by the server contains Edm metadata") + public void theXMLMetadataReturnedByTheServerContainsEdmMetadata() { + TestUtils.assertXmlMetadataContainsEdm(container); + } + + /** + * Entity Data Model (Edm) validator + */ + @And("the Edm metadata returned by the server are valid") + public void theEdmMetadataReturnedByTheServerAreValid() { + TestUtils.assertValidEdm(container); + } + + /** + * Finds default Edm entity container at the given Service Root + */ + @And("the metadata contains a valid service document") + public void theMetadataContainsAValidServiceDocument() { + TestUtils.assertXMLMetadataHasValidServiceDocument(container); + } + + /** + * Allows metadata-dependent tests to be run individually + */ + @Given("valid metadata have been retrieved") + public void validMetadataHaveBeenRetrieved() { + TestUtils.assertValidMetadataHaveBeenRetrieved(container); + } + + /** + * Test for asserted response codes + * @param assertedResponseCode the response code to assert + */ + @Then("the server responds with a status code of {int}") + public void theServerRespondsWithAStatusCodeOf(Integer assertedResponseCode) { + try { + LOG.info("Asserted Response Code: " + assertedResponseCode + ", Server Response Code: " + container.getResponseCode()); + + //TODO: clean up logic + if (container.getResponseCode() != null && assertedResponseCode.intValue() != container.getResponseCode().intValue()) { + if (container.getODataClientErrorException() != null) { + + if (container.getODataClientErrorException().getODataError().getMessage() != null) { + LOG.error(getDefaultErrorMessage("Request failed with the following message:", + container.getODataClientErrorException().getODataError().getMessage())); + } else if (container.getODataClientErrorException().getMessage() != null) { + LOG.error(getDefaultErrorMessage("Request failed with the following message:", + container.getODataClientErrorException().getMessage())); + } + + } else if (container.getODataServerErrorException() != null) { + LOG.error(getDefaultErrorMessage("Request failed with the following message:", + container.getODataServerErrorException().toString())); + + if (container.getODataServerErrorException().toString().contains(String.valueOf(HttpStatus.SC_INTERNAL_SERVER_ERROR))) { + container.setResponseCode(HttpStatus.SC_INTERNAL_SERVER_ERROR); + } + } + + //fail for all inner conditions + fail(getAssertResponseCodeErrorMessage(assertedResponseCode, container.getResponseCode())); + } + + //if we make it through without failing, things are good + assertTrue(container.getResponseCode() > 0 && assertedResponseCode > 0); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * Ensures that the server reports one of the given headers + * @param val1 the first header value + * @param val2 the second header value + */ + @And("the server has an OData-Version header value of {string} or {string}") + public void theServerHasAnODataVersionHeaderValueOfOr(String val1, String val2) { + assertNotNull("ERROR: must enter a first value", val1); + assertNotNull("ERROR: must enter a second value", val2); + + assertNotNull("ERROR: must specify an 'OData-Version' in the response header!" + + "\nSee: http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part1-protocol/odata-v4.0-errata03-os-part1-protocol-complete.html#_Toc453752225", + container.getServerODataHeaderVersion()); + + LOG.info("Reported OData-Version header value: '" + container.getServerODataHeaderVersion() + "'"); + + assertTrue("ERROR: the 'OData-Version' response header must either be '" + val1 + "' or '" + val2 + "' (without quotes).", + container.getServerODataHeaderVersion().contentEquals(val1) + || container.getServerODataHeaderVersion().contentEquals(val2)); + } + + /** + * Checks that the resource in Parameter_EndpointResource is within the allowed resources for the + * latest version of the Data Dictionary, currently 1.7. + * @param parameterResourceName the resource name parameter + * @param parameterResourceList the resource list parameter + */ + @And("the given {string} resource exists within {string}") + public void theGivenResourceExistsWithin(String parameterResourceName, String parameterResourceList) { + String + resourceName = Settings.resolveParametersString(parameterResourceName, container.getSettings()), + allowedResourceString = Settings.resolveParametersString(parameterResourceList, container.getSettings()).replace(" ", ""); + List allowedResources = new ArrayList<>(Arrays.asList(allowedResourceString.split(FIELD_SEPARATOR))); + + LOG.info("Resource Name: " + resourceName); + LOG.info("Allowed Resources: " + allowedResourceString.replace(FIELD_SEPARATOR, PRETTY_FIELD_SEPARATOR)); + + assertTrue("ERROR: the given resource name '" + resourceName + "' does not exist in the known resources within '" + parameterResourceList + "'. ", + allowedResources.contains(resourceName)); + } + + /** + * Checks that metadata are accessible and contain the resource name specified in generic.resoscript + * @param parameterResourceName the resource name parameter to check + */ + @And("the metadata contains the {string} resource") + public void theMetadataContainsTheResource(String parameterResourceName) { + final String resourceName = Settings.resolveParametersString(parameterResourceName, container.getSettings()); + AtomicReference entityContainer = new AtomicReference<>(); + + try { + entityContainer.set(TestUtils.findDefaultEntityContainer(container.getEdm(), container.fetchXMLMetadata())); + + assertNotNull("ERROR: server metadata does not contain the given resource name: " + resourceName, + entityContainer.get().getEntitySet(resourceName)); + + LOG.info("Found EntityContainer for the given resource: '" + resourceName + "'"); + + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * Checks the Standard Resources requirement from Section 2.6 of the Web API specification + * @param parameterRequiredResourceList the required resource list parameter to check + */ + @And("the metadata contains at least one resource from {string}") + public void theMetadataContainsAtLeastOneResourceFrom(String parameterRequiredResourceList) { + String requiredResourceString = + Settings.resolveParametersString(parameterRequiredResourceList, container.getSettings()).replace(SINGLE_SPACE, EMPTY_STRING); + List requiredResources = Arrays.asList(requiredResourceString.split(FIELD_SEPARATOR)); + + LOG.info("Searching the default entity container for one of the following Standard Resources (Web API 1.0.2 Section 2.6): " + + requiredResourceString.replace(FIELD_SEPARATOR, PRETTY_FIELD_SEPARATOR)); + + AtomicBoolean found = new AtomicBoolean(false); + requiredResources.forEach(requiredResource -> { + try { + if (!found.get()) + found.set(found.get() || container.getEdm().getEntityContainer().getEntitySet(requiredResource) != null); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + }); + + assertTrue("ERROR: could not find one of the following Standard Resource Names in the default entity container: " + requiredResourceString.replace(FIELD_SEPARATOR, PRETTY_FIELD_SEPARATOR), + found.get()); + + LOG.info("Standard Resource Names requirement met!"); + } + + /** + * GET request by requirementId (see generic.resoscript) + * @param requestId the id of the request to run + */ + @When("a GET request is made to the resolved Url in {string}") + public void aGETRequestIsMadeToTheResolvedUrlIn(String requestId) { + this.prepareAndExecuteRawGetRequest(requestId); + } + + /** + * JSON validation wrapper + */ + @And("the response is valid JSON") + public void theResponseIsValidJSON() { + container.validateJSON(); + } + + /** + * True if response has results, meaning value.length > 0 + */ + @And("the response has results") + public void theResponseHasResults() { + try { + assertTrue("ERROR: no results were found in the '" + JSON_VALUE_PATH + "' path of the JSON response!", + from(container.getResponseData()).getList(JSON_VALUE_PATH, Map.class).size() > 0); + LOG.info("Results count is: " + from(container.getResponseData()).getList(JSON_VALUE_PATH, Map.class).get(0).size()); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * REQ-WA103-END2 - validate DataSystem endpoint, if present + */ + @And("the results match the expected DataSystem JSON schema") + public void theResultsMatchTheExpectedDataSystemJSONSchema() { + container.validateDataSystem(); + assertEquals("ERROR: JSON Schema validation produced errors!", 0, container.getSchemaValidationErrors().size()); + } + + /** + * True if data are present in the response + * @param parameterFieldName the field name to check for response data + */ + @And("the response has singleton results in {string}") + public void theResponseHasSingletonResultsIn(String parameterFieldName) { + try { + String value = Settings.resolveParametersString(parameterFieldName, container.getSettings()); + boolean isPresent = from(container.getResponseData()).get() != null; + assertTrue("ERROR: singleton results not found for '" + value + "'!", isPresent); + LOG.info("Data are present and response value is: " + value); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * REQ-WA103-QR1 - Ensures that the given Unique Id Field has the given Unique Id Value + * @param parameterUniqueIdValue the unique Id value to check + * @param parameterUniqueId the unique Id field to check + */ + @And("the provided {string} is returned in {string}") + public void theProvidedIsReturnedIn(String parameterUniqueIdValue, String parameterUniqueId) { + try { + String expectedValueAsString = Settings.resolveParametersString(parameterUniqueIdValue, container.getSettings()); + Object resolvedValue = from(container.getResponseData()) + .get(Settings.resolveParametersString(parameterUniqueId, container.getSettings())); + + //both of the inputs should be present + assertNotNull(expectedValueAsString); + assertNotNull(resolvedValue); + + //quotes are passed for strings, let's strip them off + expectedValueAsString = expectedValueAsString + .replace("'", "").replace("\"", ""); + + LOG.info("Expected Value is: " + expectedValueAsString); + LOG.info("Resolved value is: " + resolvedValue); + + if (resolvedValue.getClass().isInstance(Integer.class)) { + assertEquals("ERROR: the given Integer value is not equal to the value found on the server!", Integer.parseInt(expectedValueAsString), resolvedValue); + } else { + assertEquals("ERROR: the given String value is not equal to the value found on the server!", expectedValueAsString, resolvedValue.toString()); + } + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * Ensures that the server metadata for the given resource in parameterResourceName contains + * all of the fields in the given parameterSelectList + */ + @And("resource metadata contain the fields in the given select list") + public void resourceMetadataContainsTheFieldsInTheGivenSelectList() { + try { + LOG.info("Searching metadata for fields in given select list: " + container.getSelectList().toString()); + container.getSelectList().forEach(fieldName -> { + //need to skip the expand field when looking through the metadata + if (container.getExpandField() == null || !fieldName.contentEquals(container.getExpandField())) { + try { + assertNotNull("ERROR: Field name '" + fieldName + "' is not present in server metadata!", + container.getCsdlProperty(container.getSettings().getParameters().getValue(Parameters.WELL_KNOWN.RESOURCE_NAME), fieldName)); + LOG.info("Found: '" + fieldName.trim() + "'"); + } catch (Exception ex) { + LOG.error(getDefaultErrorMessage(ex)); + } + } + }); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * REQ-WA103-QR3 - $select + */ + @And("data are present for fields contained within the given select list") + public void dataArePresentForFieldsContainedWithinTheGivenSelectList() { + try { + AtomicInteger numFieldsWithData = new AtomicInteger(); + + DecimalFormat df = new DecimalFormat(); + df.setMaximumFractionDigits(1); + double fill; + + assertNotNull("ERROR: no fields found within the given $select list. Check request Id: " + container.getRequest().getRequestId() + " in your .resoscript file!", + container.getSelectList()); + + LOG.info(QueryOption.SELECT + " list is: " + container.getSelectList()); + + AtomicInteger numResults = new AtomicInteger(); + //iterate over the items and count the number of fields with data to determine whether there are data present + from(container.getResponseData()).getList(JSON_VALUE_PATH, HashMap.class).forEach(item -> { + numResults.getAndIncrement(); + container.getSelectList().forEach(field -> { + if (item.get(field) != null) { + numFieldsWithData.getAndIncrement(); + } + }); + }); + + LOG.info("Number of Results: " + numResults.get()); + LOG.info("Number of Fields: " + container.getSelectList().size()); + LOG.info("Fields with Data: " + numFieldsWithData.get()); + + if (numResults.get() > 0 && container.getSelectList().size() > 0) { + fill = ((100.0 * numFieldsWithData.get()) / (numResults.get() * container.getSelectList().size())); + LOG.info("Percent Fill: " + df.format(fill) + "%"); + } else { + LOG.info("Percent Fill: 0% - no fields with data found!"); + } + assertTrue("ERROR: no fields with data could be found from the given $select list!", numFieldsWithData.get() > 0); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * True if results count less than or equal to limit + * @param limitParameter the parameter containing the limit to test + */ + @And("the number of results is less than or equal to {string}") + public void theNumberOfResultsIsLessThanOrEqualTo(String limitParameter) { + try { + int count = from(container.getResponseData()).getList(JSON_VALUE_PATH, HashMap.class).size(), + limit = Integer.parseInt(Settings.resolveParametersString(limitParameter, container.getSettings())); + LOG.info("Results count is: " + count + ", Limit is: " + limit); + assertTrue("ERROR: number of results exceeds that specified in '" + limitParameter + "'!", count <= limit); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * Makes a GET Request for the given request Id so that skip may be tested. + * REQ-WA103-QR5 - $skip + * @param requestId the request Id to test skip on + * @param skipCountParam the skip count parameter to be used + */ + @And("a GET request is made to the resolved Url in {string} with $skip={string}") + public void aGETRequestIsMadeToTheResolvedUrlInWithSkip(String requestId, String skipCountParam) { + try { + int skipCount = Integer.parseInt(Settings.resolveParametersString(skipCountParam, container.getSettings())); + LOG.info("Skip count is: " + skipCount); + + container.setRequest(requestId); + + //preserve initial response data for later comparisons + container.setInitialResponseData(container.getResponseData()); + + //TODO: convert to OData filter factory + container.setRequestUri(Commander.prepareURI( + Settings.resolveParameters(container.getSettings().getRequest(requestId), container.getSettings()).getUrl() + + AMPERSAND + SKIP + EQUALS + skipCount)); + container.executePreparedRawGetRequest(); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * Tests that data in the given unique Id field are different between two pages of data. + * Requires that the data have been previously fetched + * @param parameterUniqueId the unique Id field to compare results with + */ + @And("data in the {string} fields are different in the second request than in the first") + public void dataInTheFieldsAreDifferentInTheSecondRequestThanInTheFirst(String parameterUniqueId) { + try { + List l1 = from(container.getInitialResponseData()).getJsonObject(JSON_VALUE_PATH); + List l2 = from(container.getResponseData()).getJsonObject(JSON_VALUE_PATH); + + int combinedCount = l1.size() + l2.size(); + Set combined = new LinkedHashSet<>(l1); + + new POJONode(l1); + if (container.getShowResponses()) LOG.info("Response Page 1: " + l1); + + combined.addAll(l2); + new POJONode(l2); + if (container.getShowResponses()) LOG.info("Response Page 2: " + l2); + + assertEquals("ERROR: repeated data found, expected unique data on each page!", combinedCount, combined.size()); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * Assert HTTP Response Code given asserted OData version + * @param assertedHttpResponseCode the Integer response code to assert + * @param assertedODataVersion the version that response code is supposed to apply to + */ + @Then("the server responds with a status code of {int} if the server reports OData-Version {string}") + public void theServerRespondsWithAStatusCodeOfIfTheServerReportsODataVersion(Integer assertedHttpResponseCode, String assertedODataVersion) { + try { + boolean versionsMatch = container.getServerODataHeaderVersion().equals(assertedODataVersion), + responseCodesMatch = container.getResponseCode().intValue() == assertedHttpResponseCode.intValue(); + + LOG.info("Asserted OData Version: " + assertedODataVersion + ", Server Version: " + container.getServerODataHeaderVersion()); + + if (versionsMatch) { + LOG.info("Asserted Response Code: " + assertedHttpResponseCode + ", Response code: " + container.getResponseCode()); + assertTrue("ERROR: asserted response code (" + assertedHttpResponseCode + ") does not match the one returned from the server (" + container.getResponseCode() + ") !", responseCodesMatch); + } else { + LOG.info("Test skipped! Only applies when the asserted version matches the reported server version."); + } + } catch (Exception ex) { + //Don't fail tests like in other cases because get requests may generate exceptions that we want to + //continue past and test. Log exceptions to DEBUG instead. + LOG.debug(ex.toString()); + } + } + + /** + * Compares field data (LHS) to a given parameter value (RHS). The operator is passed as a string, + * and is used to select among the supported comparisons. + * @param parameterFieldName the field name with data to compare on the LHS + * @param op the binary operator to be used for comparisons + * @param parameterAssertedValue the asserted value to use on the RHS + */ + @And("Integer data in {string} {string} {string}") + public void integerDataIn(String parameterFieldName, String op, String parameterAssertedValue) { + try { + String fieldName = Settings.resolveParametersString(parameterFieldName, container.getSettings()); + int assertedValue = Integer.parseInt(Settings.resolveParametersString(parameterAssertedValue, container.getSettings())); + + LOG.info("fieldName: " + fieldName + ", op: " + op + ", assertedValue: " + assertedValue); + assertTrue(TestUtils.compareIntegerPayloadToAssertedValue(container.getResponseData(), fieldName, op, assertedValue)); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * True if data in the lhs expression and rhs expressions pass the AND or OR condition given in andOrOp + * @param parameterFieldName the field name to test + * @param opLhs the binary operator for the LHS comparison + * @param parameterAssertedLhsValue the asserted LHS value + * @param andOrOp 'and' or 'or', depending on whether the LHS and RHS are AND'd or ORd together + * @param opRhs the binary operator to use for the RHS comparison + * @param parameterAssertedRhsValue the asserted RHS value + */ + @And("Integer data in {string} {string} {string} {string} {string} {string}") + public void integerDataIn(String parameterFieldName, String opLhs, String parameterAssertedLhsValue, String andOrOp, String opRhs, String parameterAssertedRhsValue) { + try { + String fieldName = Settings.resolveParametersString(parameterFieldName, container.getSettings()); + Integer assertedLhsValue = Integer.parseInt(Settings.resolveParametersString(parameterAssertedLhsValue, container.getSettings())), + assertedRhsValue = Integer.parseInt(Settings.resolveParametersString(parameterAssertedRhsValue, container.getSettings())); + + String op = andOrOp.toLowerCase(); + boolean isAndOp = op.contains(AND); + + //these should default to true when And and false when Or for the purpose of boolean comparisons + AtomicBoolean lhsResult = new AtomicBoolean(isAndOp); + AtomicBoolean rhsResult = new AtomicBoolean(isAndOp); + AtomicBoolean itemResult = new AtomicBoolean(isAndOp); + + AtomicReference + lhsValue = new AtomicReference<>(), + rhsValue = new AtomicReference<>(); + + //iterate through response data and ensure that with data, the statement fieldName "op" assertValue is true + from(container.getResponseData()).getList(JSON_VALUE_PATH, HashMap.class).forEach(item -> { + lhsValue.set(Integer.parseInt(item.get(fieldName).toString())); + rhsValue.set(Integer.parseInt(item.get(fieldName).toString())); + + + lhsResult.set(compare(lhsValue.get(), opLhs, assertedLhsValue)); + rhsResult.set(compare(rhsValue.get(), opRhs, assertedRhsValue)); + + if (op.contentEquals(AND)) { + itemResult.set(lhsResult.get() && rhsResult.get()); + LOG.info("Assert True: " + lhsResult.get() + " AND " + rhsResult.get() + " ==> " + itemResult.get()); + assertTrue(itemResult.get()); + } else if (op.contentEquals(OR)) { + itemResult.set(lhsResult.get() || rhsResult.get()); + LOG.info("Assert True: " + lhsResult.get() + " OR " + rhsResult.get() + " ==> " + itemResult.get()); + assertTrue(itemResult.get()); + } + }); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * Date Comparison glue + * @param parameterFieldName date field to compare + * @param op binary date comparison operator + * @param parameterAssertedValue asserted value to compare + */ + @And("Date data in {string} {string} {string}") + public void dateDataIn(String parameterFieldName, String op, String parameterAssertedValue) { + try { + String fieldName = Settings.resolveParametersString(parameterFieldName, container.getSettings()); + AtomicReference fieldValue = new AtomicReference<>(); + AtomicReference assertedValue = new AtomicReference<>(); + + assertedValue.set(TestUtils.parseDateFromEdmDateString(Settings.resolveParametersString(parameterAssertedValue, container.getSettings()))); + LOG.info("Asserted value is: " + assertedValue.get().toString()); + + from(container.getResponseData()).getList(JSON_VALUE_PATH, HashMap.class).forEach(item -> { + try { + fieldValue.set(TestUtils.parseDateFromEdmDateTimeOffsetString(item.get(fieldName).toString())); + assertTrue(compare(fieldValue.get(), op, assertedValue.get())); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + }); + } catch (Exception ex) { + fail(getDefaultErrorMessage(ex)); + } + } + + /** + * Time comparison glue + * @param parameterFieldName time of day field to compare + * @param op binary time of day comparison operator + * @param parameterAssertedValue asserted value to compare + */ + @And("TimeOfDay data in {string} {string} {string}") + public void timeOfDayDataIn(String parameterFieldName, String op, String parameterAssertedValue) { + try { + String fieldName = Settings.resolveParametersString(parameterFieldName, container.getSettings()); + AtomicReference