commit b02af637d4cd72d0ba126481380b320ee0ea8dfe Author: Gerhard Scheikl Date: Wed Apr 1 09:38:50 2026 +0200 initial commit after project creation diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..008c4f5 --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +# These are retrieved from your project at app.tina.io +NEXT_PUBLIC_TINA_CLIENT_ID=*** +TINA_TOKEN=*** +# This is set by default CI with Netlify/Vercel/Github, but can be overriden +NEXT_PUBLIC_TINA_BRANCH=*** +# This is being used for the sitemap +NEXT_PUBLIC_SITE_URL=*** +# This displays the Theme selection's dropdown +NEXT_PUBLIC_ENABLE_THEME_SELECTION=*** + +NEXT_PUBLIC_GTM_ID=*** + +# Optional: Add these to specify GitHub repository details for fetching metadata like last edited date and author. +# Create one at https://github.com/settings/tokens with 'public_repo' scope +GITHUB_TOKEN=*** +GITHUB_REPO=*** +GITHUB_OWNER=*** \ No newline at end of file diff --git a/.github/.env b/.github/.env new file mode 100644 index 0000000..2550e2b --- /dev/null +++ b/.github/.env @@ -0,0 +1,2 @@ +NEXT_PUBLIC_BASE_PATH='/tinadocs' +NEXT_PUBLIC_SITE_URL='https://tina.io' \ No newline at end of file diff --git a/.github/.gitignore b/.github/.gitignore new file mode 100644 index 0000000..1e18f27 --- /dev/null +++ b/.github/.gitignore @@ -0,0 +1 @@ +!.env \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..39b404c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,39 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + labels: + - 'Type: Dependencies' + commit-message: + prefix: "⬆️ Actions" + rebase-strategy: auto + + # Maintain dependencies for npm + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + labels: + - 'Type: Dependencies' + commit-message: + prefix: "⬆️ NPM" + rebase-strategy: auto + allow: + - dependency-name: "tinacms" + - dependency-name: "@tinacms/*" + ignore: + - dependency-name: "yup" + groups: + tinacms: + patterns: + - "@tinacms/*" + - "tinacms" diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml new file mode 100644 index 0000000..e513b15 --- /dev/null +++ b/.github/workflows/build-and-deploy.yml @@ -0,0 +1,127 @@ +# Sample workflow for building and deploying a Next.js site to GitHub Pages +# +# To get started with Next.js see: https://nextjs.org/docs/getting-started +# +name: Deploy Next.js site to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: [main] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Detect package manager + id: detect-package-manager + run: | + if [ -f "${{ github.workspace }}/yarn.lock" ]; then + echo "✅ Detected yarn" + echo "manager=yarn" >> $GITHUB_OUTPUT + echo "command=install" >> $GITHUB_OUTPUT + echo "runner=yarn" >> $GITHUB_OUTPUT + exit 0 + elif [ -f "${{ github.workspace }}/pnpm-lock.yaml" ]; then + echo "✅ Detected pnpm" + echo "manager=pnpm" >> $GITHUB_OUTPUT + echo "command=install" >> $GITHUB_OUTPUT + echo "runner=pnpm" >> $GITHUB_OUTPUT + exit 0 + elif [ -f "${{ github.workspace }}/package.json" ]; then + echo "✅ Detected npm" + echo "manager=npm" >> $GITHUB_OUTPUT + echo "command=ci" >> $GITHUB_OUTPUT + echo "runner=npx --no-install" >> $GITHUB_OUTPUT + exit 0 + else + echo "❌ Unable to determine package manager" + exit 1 + fi + + - name: Setup pnpm + if: steps.detect-package-manager.outputs.manager == 'pnpm' + uses: pnpm/action-setup@v4 + with: + version: 9.15.2 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: ${{ steps.detect-package-manager.outputs.manager }} + + - name: "Setup Pages #1" + run: | + touch public/.nojekyll + - name: "Setup Pages #2" + uses: actions/configure-pages@v5 + with: + # Automatically inject basePath in your Next.js configuration file and disable + # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). + # + # You may remove this line if you want to manage the configuration yourself. + static_site_generator: next + + - name: Restore cache + uses: actions/cache@v4 + with: + path: | + .next/cache + # Generate a new cache whenever packages or source files change. + key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/pnpm-lock.yaml', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} + # If source files changed but packages didn't, rebuild from a prior cache. + restore-keys: | + ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/pnpm-lock.yaml', '**/yarn.lock') }}- + + - name: Install dependencies + run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} + + - name: Build with Next.js & TinaCMS + run: ${{ steps.detect-package-manager.outputs.runner }} export + env: + NEXT_PUBLIC_TINA_CLIENT_ID: ${{ secrets.NEXT_PUBLIC_TINA_CLIENT_ID }} + NEXT_PUBLIC_TINA_BRANCH: ${{ github.ref_name }} + TINA_TOKEN: ${{ secrets.TINA_TOKEN }} + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./.next + + search-tests: + needs: build + uses: ./.github/workflows/search-test.yml + with: + base_url: https://tina-docs-red.vercel.app/ + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..7c3a14c --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,29 @@ +name: Lint and Check + +on: + pull_request: + branches: [main] + +jobs: + lint-and-check: + name: Run Biome Lint and Check + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + + - name: Enable Corepack + run: corepack enable + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run Biome Lint & Formatter + run: pnpm lint src/ tina/ + diff --git a/.github/workflows/pr-open.yml b/.github/workflows/pr-open.yml new file mode 100644 index 0000000..434a6e8 --- /dev/null +++ b/.github/workflows/pr-open.yml @@ -0,0 +1,76 @@ +name: Build Pull request +on: + pull_request: + types: [opened, synchronize, reopened] +env: + NEXT_PUBLIC_TINA_CLIENT_ID: ${{ secrets.NEXT_PUBLIC_TINA_CLIENT_ID }} + TINA_TOKEN: ${{ secrets.TINA_TOKEN }} + NEXT_PUBLIC_TINA_BRANCH: ${{ github.head_ref }} +jobs: + build: + runs-on: ubuntu-latest + name: Build sample + outputs: + NEXT_PUBLIC_BASE_PATH: ${{ steps.setup-base-path.outputs.NEXT_PUBLIC_BASE_PATH }} + + steps: + - uses: actions/checkout@v4 + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + + - uses: pnpm/action-setup@v4 + name: Install pnpm + id: pnpm-install + with: + version: 9.15.2 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Load .env file + uses: xom9ikk/dotenv@v2 + with: + path: ./.github + + - name: Setup Base Path + id: setup-base-path + run: | + echo "NEXT_PUBLIC_BASE_PATH=${{ env.NEXT_PUBLIC_BASE_PATH }}" >> $GITHUB_OUTPUT + + - name: Build + run: pnpm build + + slugify-branch: + runs-on: ubuntu-latest + outputs: + slug: ${{ steps.slug.outputs.slug }} + steps: + - name: Slugify branch name + id: slug + run: | + SLUG=$(echo "${{ github.head_ref }}" | tr '/' '-' | tr -d '.' | tr '[:upper:]' '[:lower:]') + echo "slug=$SLUG" >> $GITHUB_OUTPUT + + search-tests: + needs: [build, slugify-branch] + uses: ./.github/workflows/search-test.yml + with: + base_url: https://tina-docs-git-${{ needs.slugify-branch.outputs.slug }}-tinacms.vercel.app + NEXT_PUBLIC_BASE_PATH: ${{ needs.build.outputs.NEXT_PUBLIC_BASE_PATH }} \ No newline at end of file diff --git a/.github/workflows/search-test.yml b/.github/workflows/search-test.yml new file mode 100644 index 0000000..7c3ab39 --- /dev/null +++ b/.github/workflows/search-test.yml @@ -0,0 +1,89 @@ +name: Search Functionality Tests + +on: + workflow_dispatch: + inputs: + base_url: + description: 'Base URL to test (required)' + required: true + type: string + workflow_call: + inputs: + base_url: + description: 'Base URL to test (required)' + required: true + type: string + NEXT_PUBLIC_BASE_PATH: + description: 'Base path (required)' + required: true + type: string + +jobs: + test-search: + name: Test Search Functionality + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.15.2 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Install Playwright browsers + run: npx playwright install --with-deps + + - name: Run search tests + run: pnpm test + env: + BASE_URL: ${{ inputs.base_url }} + NEXT_PUBLIC_BASE_PATH: ${{ inputs.NEXT_PUBLIC_BASE_PATH || '' }} + + - name: Upload test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-results + path: | + test-results/ + playwright-report/ + retention-days: 7 + + report-results: + name: Report Test Results + runs-on: ubuntu-latest + needs: [test-search] + if: always() + + steps: + - name: Download test results + uses: actions/download-artifact@v4 + with: + path: test-results/ + + - name: Create test summary + run: | + echo "## Search Functionality Test Results" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + if [ -f "test-results/test-results/test-results/results.json" ]; then + echo "### Search Tests ✅" >> $GITHUB_STEP_SUMMARY + echo "Search tests completed successfully." >> $GITHUB_STEP_SUMMARY + else + echo "### Search Tests ❌" >> $GITHUB_STEP_SUMMARY + echo "Search tests failed or were not run." >> $GITHUB_STEP_SUMMARY + fi + + echo "" >> $GITHUB_STEP_SUMMARY + echo "Check the artifacts for detailed test reports." >> $GITHUB_STEP_SUMMARY diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dc1c942 --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build +/public/pagefind/ + +# misc +.DS_Store +*.pem +robots.txt + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel + +.yarn + +# exports +/public/exports + +#sitemaps +/public/sitemap.xml +/public/sitemap-0.xml +/playwright-report +/test-results diff --git a/.nftignore b/.nftignore new file mode 100644 index 0000000..aa6071e --- /dev/null +++ b/.nftignore @@ -0,0 +1,30 @@ +# Next.js serverless function ignore file +# Exclude webpack cache and build artifacts +.next/cache/** +.next/static/** +.next/server/chunks/** + +# Exclude git files +.git/** +.github/** + +# Exclude public assets (except those needed by API) +public/img/** +public/admin/** + +# Exclude large dependencies not needed in serverless functions +node_modules/@swc/core-linux-x64-gnu/** +node_modules/@swc/core-linux-x64-musl/** +node_modules/@esbuild/** +node_modules/webpack/** +node_modules/terser/** +node_modules/monaco-editor/** + +# Exclude development files +*.map +*.development.js + +# Exclude documentation and readme files +*.md +README* +CHANGELOG* \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..b009dfb --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +lts/* diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..b23ea53 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "bradlc.vscode-tailwindcss", + "biomejs.biome", + "graphql.vscode-graphql", + "biomejs.biome-vscode" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..24e6c97 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,23 @@ +{ + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports.biome": "always" + }, + "editor.defaultFormatter": "biomejs.biome", + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true, + "node_modules": true + }, + "files.watcherExclude": { + "**/.git/objects/**": true, + "**/.git/subtree-cache/**": true, + "**/node_modules/*/**": true, + "**/.turbo/**": true, + "**/.next/**": true + } +} diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..958b7a5 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,126 @@ +# AGENTS.md + +This file provides guidance to AI coding agents working in this repository. + +## About TinaDocs + +TinaDocs is a **public starter/template** — anyone can fork it and deploy their own documentation site. Keep this in mind when making changes: + +- Never hardcode deployment-specific values (URLs, org names, branding). Use environment variables or TinaCMS settings instead. +- New features that not every user will want must be toggleable via TinaCMS settings or environment variables — don't assume all consumers want the same feature set. +- Avoid dependencies on specific hosting providers. Support multiple deployment modes (Vercel, GitHub Pages, static export). + +## Architecture + +TinaDocs is a documentation platform built on **Next.js 15 (App Router)** with **TinaCMS** for git-based content management, **Pagefind** for static search, and **Tailwind CSS** with a 6-theme system. + +**Content flow:** MDX files in `content/docs/` → TinaCMS schema (`tina/collections/`) → auto-generated GraphQL client (`tina/__generated__/`) → Next.js pages. Never edit files in `tina/__generated__/`. + +### Key directories + +- `src/app/` — Next.js App Router pages and API routes +- `src/components/tina-markdown/` — Markdown rendering: `standard-elements/` (headings, code blocks, tables) and `embedded-elements/` (API refs, callouts, recipes) +- `tina/collections/` — TinaCMS collection schemas (docs, API schemas, navigation, settings) +- `tina/templates/markdown-embeds/` — Embeddable content templates (accordion, callout, code-tabs, card-grid, etc.) +- `tina/customFields/` — Custom CMS field components (theme selector, file upload, Monaco editor) +- `src/styles/global.css` — Theme definitions via CSS custom properties (6 themes, light/dark) + +## Commands + +```bash +pnpm install # Install deps (pnpm 9.15.2 required) +pnpm dev # Dev server with Turbopack (localhost:3000, CMS at /admin) +pnpm build # Production build (TinaCMS + Next.js + Pagefind + sitemap) +pnpm lint # Biome linter check +pnpm lint:fix # Auto-fix lint issues +pnpm test # Playwright E2E tests (Chromium) +pnpm test:ui # Playwright interactive UI +pnpm build-local-pagefind # Rebuild search index locally +npx playwright test tests/e2e/some-test.spec.ts # Run a single test +``` + +## Coding Standards + +- Use `@/` path aliases for imports: `@/components`, `@/utils`, `@/app`, `@/tina`, `@/services`, `@/hooks`, `@/styles`, `@/content`, `@/lib`, `@/types`, `@/config` +- Use Biome for formatting: 2-space indent, double quotes, semicolons, trailing commas (ES5) +- No `console.log` — use `noConsole: error` +- No `.forEach()` — use `for...of` or `.map()` +- Self-close empty JSX elements + +## Key Patterns + +### Fetching TinaCMS data in pages + +```typescript +import { fetchTinaData } from "@/services/tina/fetch-tina-data"; +import client from "@/tina/__generated__/client"; + +async function getData(slug: string) { + return await fetchTinaData(client.queries.docs, slug); +} + +export default async function DocsPage({ + params, +}: { + params: Promise<{ slug: string[] }>; +}) { + const { slug } = await params; + const data = await getData(slug.join("/")); + + return ( + + ); +} +``` + +### Adding a new embeddable template + +1. **Define template** in `tina/templates/markdown-embeds/my-embed.template.tsx`: + +```typescript +export const MyEmbedTemplate = { + name: "myEmbed", + label: "My Embed", + fields: [ + { type: "string", name: "title", label: "Title" }, + { type: "rich-text", name: "body", label: "Body" }, + ], +}; +``` + +2. **Create component** in `src/components/tina-markdown/embedded-elements/my-embed.tsx`: + +```typescript +import { tinaField } from "tinacms/dist/react"; +import { TinaMarkdown, type TinaMarkdownContent } from "tinacms/dist/rich-text"; +import { MarkdownComponentMapping } from "../markdown-component-mapping"; + +export default function MyEmbed(props: { title: string; body?: TinaMarkdownContent }) { + return ( +
+

{props.title}

+ +
+ ); +} +``` + +3. **Register template** in `tina/collections/docs.tsx` — add to the `templates` array in the `body` rich-text field +4. **Map component** in `src/components/tina-markdown/markdown-component-mapping.tsx`: + +```typescript +myEmbed: (props) => , +``` + +### TinaCMS component conventions + +- Use `tinaField(props, "fieldName")` on `data-tina-field` attributes for visual editing +- Render nested rich-text with `` +- Define variant/config mappings as `const` objects with `as const` + +## Environment + +Copy `.env.example`. Required: `NEXT_PUBLIC_TINA_CLIENT_ID`, `TINA_TOKEN`, `NEXT_PUBLIC_TINA_BRANCH` (from app.tina.io). Optional: `NEXT_PUBLIC_SITE_URL`, `NEXT_PUBLIC_GTM_ID`, `NEXT_PUBLIC_BASE_PATH`. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..74542ed --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,3 @@ +# CLAUDE.md + +Get instructions from AGENTS.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + 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 + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..dc850df --- /dev/null +++ b/README.md @@ -0,0 +1,446 @@ +# 🚀 TinaDocs - Your Complete Documentation Solution + +> **Modern documentation made simple and powerful** + +TinaDocs is a complete documentation solution built with [Tina CMS](https://tina.io/) that combines developer-friendly tools with content creator accessibility. + +![TinaDocs Starter](./public/docs-starter.png) +**Figure: Landing Page of TinaDocs** + +## ✨ Why Choose TinaDocs + +### **Rich Feature Set** +- **🔍 Fast search** - Powered by Pagefind for instant content discovery +- **📊 API documentation** - Generate beautiful API docs from your OpenAPI specs +- **📑 Multi-tab interfaces** - Organize complex information with tabbed layouts +- **🎨 Custom theming** - Make your docs match your brand +- **✏️ Visual editing** - Content creators can edit directly through TinaCMS +- **📱 Responsive design** - Works great on all devices +- **⚡ Performance optimized** - Built with Next.js for fast load times + +### **What Makes It Special** +- **Modern stack** - Clean, maintainable codebase +- **Developer-friendly** - Easy to customize and extend +- **Content creator-friendly** - Non-technical team members can contribute +- **SEO optimized** - Built-in best practices for search visibility + +--- + +## 🚀 Quick Start with npx + +The fastest way to get started with TinaDocs is using npx: + +```bash +npx create-tina-app@latest my-docs --template tina-docs +``` + +This command will: +- Download and set up TinaDocs in a new directory called `my-docs` +- Prompt you to select your preferred theme during setup +- Configure the basic project structure +- Install all necessary dependencies + +### **Available Themes** + +When using npx, you can choose from these beautiful themes: + +- **Default** - Clean black and white design +- **Tina** - TinaCMS-inspired theme with orange accents +- **Blossom** - Elegant pink/rose color scheme +- **Lake** - Professional blue color palette +- **Pine** - Natural green tones +- **Indigo** - Modern purple/indigo design + +--- + +## 📖 How to Use TinaDocs + +There are two ways you can use TinaDocs: + +• **For developers** – as a launching point to develops a highly custom docs solution. TinaCMS is based on markdown. Use this code as a basis to [implement custom components](https://tina.io/docs/reference/types/rendering-markdown#linking-to-react-components) to be used in MDX to fit your use case. Follow the Getting Started guide below. + +• **Quickest experience** – use as is and deploy in minutes via TinaCloud for a docs setup that you still hold all the keys and data for, and get to using right away. + + +> 💡 TinaCMS integrates tighly with GitHub, and has a powerful [editorial workflow](https://tina.io/docs/tina-cloud/editorial-workflow) based on GitHub's branch protection features. + +## 🛠️ Getting Started + +### **Step 1: Install Dependencies** + +> 💡 We recommend `pnpm` for faster installs. [Learn why pnpm is great](https://www.ssw.com.au/rules/best-package-manager-for-node/) for Node.js projects. + +```bash +pnpm install +``` + +### **Step 2: Start Development Server** + +```bash +pnpm dev +``` + +Open [http://localhost:3000](http://localhost:3000) to see your docs in action. + +--- + +## 🌐 Production Setup + +### **Step 3: Set Up GitHub and TinaCloud** + +1. **Add your docs to GitHub**: Push your local repository to GitHub if you haven't already +2. **Create a TinaCloud account**: Sign up at [app.tina.io](https://app.tina.io) +3. **Link your repository**: Connect your GitHub repository to TinaCloud through the dashboard +Note: if you don’t see your repo in the list, click the button “Configure your TinaCloud permissions on GitHub” at the bottom of the page +4. **Sync Media**: In your TinaCloud project, click on Media and then "Sync Media". This will import your media files (like images) from your GitHub repository into Tina’s Media Manager so they’re available in the visual editor. + +### **Step 4: Configure Environment** + +1. Rename `.env.example` to `.env` +2. Add your Tina credentials: + +```env +NEXT_PUBLIC_TINA_CLIENT_ID= +TINA_TOKEN= +NEXT_PUBLIC_TINA_BRANCH= +NEXT_PUBLIC_ENABLE_THEME_SELECTION= +``` + +If you want to test `pnpm build` locally, you need to add: +```env +NEXT_PUBLIC_SITE_URL=http://localhost:3000 +``` + +**Theme Preview Mode:** +To enable a theme selector in the UI for previewing all themes, add: +```env +NEXT_PUBLIC_ENABLE_THEME_SELECTION=true +``` + +> 💡 **Note:** The theme selector allows you to preview different themes in real-time, but these changes are temporary and won't persist when you open a new browser window/tab. To make a theme permanent, update the `Selected Them` field in your Settings through TinaCMS. + +### **Step 5 (Optional): Enable GitHub Metadata** + +To display commit history and last updated information on your documentation pages: + + +1. Create a GitHub personal access token: + - Go to [GitHub Settings > Developer settings > Personal access tokens > Tokens (classic)](https://github.com/settings/tokens) + - Click "Generate new token (classic)" + - Set the scope to `public_repo` + - Choose an expiration setting: + - Select "No expiration" for a permanent token, OR + - Choose an expiration period and set up a process to regenerate the token before it expires + - Generate the token and add it to your `.env` file + +2. Add the following to your `.env` file & deployment settings: + +```env +GITHUB_TOKEN= +GITHUB_OWNER= +GITHUB_REPO= +``` + +> 💡 **Note:** The `GITHUB_TOKEN` field is optional. However, if you choose to provide it, you must also provide `GITHUB_OWNER` and `GITHUB_REPO`. If you're deploying to Vercel, the `GITHUB_OWNER` and `GITHUB_REPO` fields will be automatically populated from Vercel's environment variables (`VERCEL_GIT_REPO_OWNER` and `VERCEL_GIT_REPO_SLUG`), so you only need to provide the `GITHUB_TOKEN`. + + +### **Step 6: Build for Production** + +```bash +pnpm build +``` + +--- + +## 🚀 Deployment + +### **Step 7: Deploy to Vercel** + +TinaDocs works great with Vercel. Check out our [deployment guide](https://tina.io/docs/tina-cloud/deployment-options/vercel) for detailed instructions. + +--- + +## 🔍 Search Setup + +TinaDocs includes fast search powered by [Pagefind](https://pagefind.app/), which indexes your content during the build process. + +### **How to Build the Search Index** + +To generate or update the search index, run: + + +```bash +pnpm build-local-pagefind +``` +This command: + +- Builds the project + +- Generates the search index + +- Saves the index files to `public/pagefind/` + +The search index is automatically updated every time you run the build. + +--- + +### **Custom Theming** + +Want to create your own custom theme? TinaDocs includes a comprehensive theming system that allows you to create custom color schemes. See the [Custom Theming section](#-custom-theming) below for detailed instructions on how to create and implement your own themes. + +--- + +## 🎨 Custom Theming + +TinaDocs includes a comprehensive theming system that allows you to create custom color schemes. The theme system is built on CSS custom properties (variables) and supports both light and dark modes. + +### **How Themes Work** + +Themes in TinaDocs are implemented using CSS custom properties defined in `src/styles/global.css`. Each theme has: + +- **Brand colors** (primary, secondary, tertiary) with hover states and gradients +- **Neutral colors** for backgrounds, text, and borders +- **Glass effects** for modern UI elements +- **Dark mode variants** for each theme + +### **Theme Structure** + +Each theme follows this pattern in `global.css`: + +```css +/* LIGHT MODE */ +.theme-your-theme { + --brand-primary: #your-primary-color; + --brand-primary-hover: #your-primary-hover; + --brand-primary-light: #your-primary-light; + --brand-primary-text: #your-primary-text; + --brand-primary-contrast: #your-primary-contrast; + + --brand-primary-gradient-start: #your-gradient-start; + --brand-primary-gradient-end: #your-gradient-end; + + /* ... more brand colors ... */ + + --neutral-background: #your-background; + --neutral-surface: #your-surface; + --neutral-text: #your-text; + --neutral-border: #your-border; + + --background-color: #your-page-background; +} + +/* DARK MODE */ +.theme-your-theme.dark { + /* Dark mode variants of all the above colors */ +} +``` + +### **Creating a Custom Theme** + +To create a new custom theme, follow these steps: + +#### **1. Add CSS Variables to `src/styles/global.css`** + +Add your theme's CSS variables after the existing themes: + +```css +/* YOUR CUSTOM THEME */ +.theme-custom { + --brand-primary: #your-primary-color; + --brand-primary-hover: #your-primary-hover; + --brand-primary-light: #your-primary-light; + --brand-primary-text: #your-primary-text; + --brand-primary-contrast: #your-primary-contrast; + + --brand-primary-gradient-start: #your-gradient-start; + --brand-primary-gradient-end: #your-gradient-end; + + --brand-secondary: #your-secondary-color; + --brand-secondary-hover: #your-secondary-hover; + --brand-secondary-light: #your-secondary-light; + --brand-secondary-text: #your-secondary-text; + --brand-secondary-contrast: #your-secondary-contrast; + + --brand-secondary-gradient-start: #your-secondary-gradient-start; + --brand-secondary-gradient-end: #your-secondary-gradient-end; + + --brand-tertiary: #your-tertiary-color; + --brand-tertiary-hover: #your-tertiary-hover; + --brand-tertiary-light: #your-tertiary-light; + --brand-tertiary-text: #your-tertiary-text; + --brand-tertiary-contrast: #your-tertiary-contrast; + + --brand-tertiary-gradient-start: #your-tertiary-gradient-start; + --brand-tertiary-gradient-end: #your-tertiary-gradient-end; + + --glass-gradient-start: rgba(255, 255, 255, 0.1); + --glass-gradient-end: rgba(255, 255, 255, 0.4); + + --neutral-background: #your-background; + --neutral-background-secondary: #your-secondary-background; + --neutral-surface: #your-surface; + --neutral-text: #your-text; + --neutral-text-secondary: #your-secondary-text; + --neutral-border: #your-border; + --neutral-border-subtle: #your-subtle-border; + + --background-color: #your-page-background; +} + +.theme-custom.dark { + /* Dark mode variants - invert or adjust colors for dark mode */ + --brand-primary: #your-dark-primary; + --brand-primary-hover: #your-dark-primary-hover; + /* ... continue with all other variables ... */ + + --neutral-background: #your-dark-background; + --neutral-surface: #your-dark-surface; + --neutral-text: #your-dark-text; + /* ... etc ... */ +} +``` + +#### **2. Add Theme to TinaCMS Selector** + +Update `tina/customFields/theme-selector.tsx` to include your new theme: + +```typescript +const themes = [ + // ... existing themes ... + { + value: "custom", + label: "Custom", + description: "Your custom theme description", + colors: { + primary: "#your-primary-color", + secondary: "#your-secondary-color", + accent: "#your-accent-color", + }, + }, +]; +``` + +#### **3. Add Theme to UI Selector** + +Update `src/components/ui/theme-selector.tsx` to include your theme in the themes array: + +```typescript +const themes = ["default", "tina", "blossom", "lake", "pine", "indigo", "custom"]; +``` + +#### **4. Apply Your Theme** + +1. **Temporary preview**: Use the theme selector in the UI (if enabled) +2. **Permanent change**: Update the "Selected Theme" field in TinaCMS Settings + +### **Color Guidelines** + +When creating custom themes, consider these guidelines: + +- **Primary colors**: Use for main actions, links, and important UI elements +- **Secondary colors**: Use for supporting elements and secondary actions +- **Tertiary colors**: Use for accents and highlights +- **Neutral colors**: Ensure good contrast ratios for accessibility +- **Dark mode**: Test your theme in both light and dark modes + +### **Theme Testing** + +To test your custom theme: + +1. Enable theme preview: `NEXT_PUBLIC_ENABLE_THEME_SELECTION=true` +2. Use the theme selector in the bottom-right corner +3. Test in both light and dark modes +4. Verify accessibility with sufficient contrast ratios + +### **Theme Examples** + +The existing themes demonstrate different approaches: + +- **Default**: Minimalist monochrome design +- **Tina**: Brand-focused with orange and blue +- **Blossom**: Warm, elegant pink tones +- **Lake**: Professional blue palette +- **Pine**: Natural, organic green theme +- **Indigo**: Modern purple/violet design + +Each theme includes comprehensive color variations for different UI states and accessibility considerations. + +--- + +## 🛠️ Utility Scripts + +TinaDocs includes helpful utility scripts to manage your documentation project: + +### **Documentation Reset** + +Completely reset your documentation structure to start fresh: + +```bash +pnpm run cleanup +``` + +**What it does:** +- ✅ Removes all directories within `content/docs/` (preserves only `index.mdx`) +- ✅ Removes all API schema files in `content/apiSchema/` +- ✅ Removes docs-assets and landing-assets image directories +- ✅ Completely removes the API tab from navigation +- ✅ Clears Next.js cache (`.next` folder) to prevent stale page references +- ✅ Provides a clean documentation slate for new content +- ✅ Validates project structure before running +- ✅ **Requires interactive confirmation** - asks for explicit "yes" to proceed + +> **🚨 CRITICAL WARNING:** +> +> **This command PERMANENTLY DELETES all documentation content.** +> +> - ❌ **If you've already made changes**, running cleanup will DELETE your work +> - ✅ **Run cleanup FIRST** if you want a clean slate, then make your changes +> - ✅ **Commit your changes to git** before running cleanup if you want to preserve them +> +> **This action cannot be undone unless you have committed your changes to version control.** + +> **⚠️ Important:** After running cleanup, you must restart your development server with `pnpm dev` to ensure Next.js rebuilds the site without cached references to deleted pages. + +For detailed information about available scripts, see [`scripts/README.md`](./scripts/README.md). + +--- + +## 📚 Learn More + +- [Tina Documentation](https://tina.io/docs) - Explore Tina's full capabilities +- [Getting Started Guide](https://tina.io/docs/setup-overview/) - Quick setup walkthrough +- [GitHub Repository](https://github.com/tinacms/tinacms) - Contribute or report issues + +--- + +### API Documentation + +TinaDocs provides comprehensive API documentation capabilities powered by OpenAPI specifications. Generate beautiful, interactive API documentation directly from your OpenAPI/Swagger JSON files. + +#### **Supported Features** + +**🔄 Dynamic Content Management** +- **Upload OpenAPI specs** - Import your API specifications through TinaCMS +- **Auto-generated navigation** - Create menu structures based on API tags and endpoints +- **Bulk page generation** - Generate entire documentation sections from your spec +- **Real-time updates** - Update documentation when your API spec changes + +#### **What's Not Supported** + +Currently, TinaDocs does not support: +- **Header configuration APIs** - Custom header management endpoints +- **WebSocket APIs** - Real-time communication endpoints +- **GraphQL schemas** - GraphQL introspection schemas (use REST API docs instead) + +#### **Getting Started with API Docs** + +1. **Upload your OpenAPI spec** through the API Schema collection in TinaCMS +2. **Create API reference pages** using the API Reference component +3. **Generate navigation structure** with the "Group of API References" template +4. **Customize the display** by selecting specific endpoints and tags + +For detailed instructions, see the [API Documentation Guide](content/docs/api-documentation/overview.mdx) and [OpenAPI Spec Documentation](content/docs/tinadocs-features/openapi-spec-docs.mdx). + +--- + +**Ready to improve your documentation?** Give TinaDocs a try! diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..9b76a52 --- /dev/null +++ b/biome.json @@ -0,0 +1,76 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "files": { + "maxSize": 10485760, + "ignore": [ + ".next/**", + "node_modules/**", + "dist/**", + "public/**", + "content/**", + "coverage/**", + "tina/__generated__/**", + "tina/tina-lock.json", + "src/styles/**", + "src/utils/tina/compare-markdown.ts" + ] + }, + "formatter": { + "enabled": true, + "useEditorconfig": false, + "formatWithErrors": true, + "indentStyle": "space", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 80, + "attributePosition": "auto", + "bracketSpacing": true + }, + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "suspicious": { + "noConsole": "error", + "noExplicitAny": "off", + "noArrayIndexKey": "off" + }, + "style": { + "useSelfClosingElements": "error", + "useTemplate": "error", + "noParameterAssign": "off" + }, + "a11y": { + "useSemanticElements": "error", + "useButtonType": "error", + "noLabelWithoutControl": "off", + "useKeyWithClickEvents": "off", + "useIframeTitle": "off", + "noSvgWithoutTitle": "off" + }, + "correctness": { + "noChildrenProp": "off", + "useExhaustiveDependencies": "error" + }, + "complexity": { + "noForEach": "error", + "useOptionalChain": "error", + "noBannedTypes": "off" + } + } + }, + "javascript": { + "formatter": { + "jsxQuoteStyle": "double", + "quoteProperties": "asNeeded", + "trailingCommas": "es5", + "semicolons": "always", + "arrowParentheses": "always", + "bracketSameLine": false, + "quoteStyle": "double", + "attributePosition": "auto", + "bracketSpacing": true + } + } +} diff --git a/content/apiSchema/Swagger-Petstore.json b/content/apiSchema/Swagger-Petstore.json new file mode 100644 index 0000000..133f6e9 --- /dev/null +++ b/content/apiSchema/Swagger-Petstore.json @@ -0,0 +1,3 @@ +{ + "apiSchema": "{\n \"swagger\": \"2.0\",\n \"info\": {\n \"description\": \"This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.\",\n \"version\": \"1.0.7\",\n \"title\": \"Swagger Petstore\",\n \"termsOfService\": \"http://swagger.io/terms/\",\n \"contact\": {\n \"email\": \"apiteam@swagger.io\"\n },\n \"license\": {\n \"name\": \"Apache 2.0\",\n \"url\": \"http://www.apache.org/licenses/LICENSE-2.0.html\"\n }\n },\n \"host\": \"petstore.swagger.io\",\n \"basePath\": \"/v2\",\n \"tags\": [\n {\n \"name\": \"pet\",\n \"description\": \"Everything about your Pets\",\n \"externalDocs\": {\n \"description\": \"Find out more\",\n \"url\": \"http://swagger.io\"\n }\n },\n {\n \"name\": \"store\",\n \"description\": \"Access to Petstore orders\"\n },\n {\n \"name\": \"user\",\n \"description\": \"Operations about user\",\n \"externalDocs\": {\n \"description\": \"Find out more about our store\",\n \"url\": \"http://swagger.io\"\n }\n }\n ],\n \"schemes\": [\n \"https\",\n \"http\"\n ],\n \"paths\": {\n \"/pet/{petId}/uploadImage\": {\n \"post\": {\n \"tags\": [\n \"pet\"\n ],\n \"summary\": \"uploads an image\",\n \"description\": \"\",\n \"operationId\": \"uploadFile\",\n \"consumes\": [\n \"multipart/form-data\"\n ],\n \"produces\": [\n \"application/json\"\n ],\n \"parameters\": [\n {\n \"name\": \"petId\",\n \"in\": \"path\",\n \"description\": \"ID of pet to update\",\n \"required\": true,\n \"type\": \"integer\",\n \"format\": \"int64\"\n },\n {\n \"name\": \"additionalMetadata\",\n \"in\": \"formData\",\n \"description\": \"Additional data to pass to server\",\n \"required\": false,\n \"type\": \"string\"\n },\n {\n \"name\": \"file\",\n \"in\": \"formData\",\n \"description\": \"file to upload\",\n \"required\": false,\n \"type\": \"file\"\n }\n ],\n \"responses\": {\n \"200\": {\n \"description\": \"successful operation\",\n \"schema\": {\n \"$ref\": \"#/definitions/ApiResponse\"\n }\n }\n },\n \"security\": [\n {\n \"petstore_auth\": [\n \"write:pets\",\n \"read:pets\"\n ]\n }\n ]\n }\n },\n \"/pet\": {\n \"post\": {\n \"tags\": [\n \"pet\"\n ],\n \"summary\": \"Add a new pet to the store\",\n \"description\": \"\",\n \"operationId\": \"addPet\",\n \"consumes\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"in\": \"body\",\n \"name\": \"body\",\n \"description\": \"Pet object that needs to be added to the store\",\n \"required\": true,\n \"schema\": {\n \"$ref\": \"#/definitions/Pet\"\n }\n }\n ],\n \"responses\": {\n \"405\": {\n \"description\": \"Invalid input\"\n }\n },\n \"security\": [\n {\n \"petstore_auth\": [\n \"write:pets\",\n \"read:pets\"\n ]\n }\n ]\n },\n \"put\": {\n \"tags\": [\n \"pet\"\n ],\n \"summary\": \"Update an existing pet\",\n \"description\": \"\",\n \"operationId\": \"updatePet\",\n \"consumes\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"in\": \"body\",\n \"name\": \"body\",\n \"description\": \"Pet object that needs to be added to the store\",\n \"required\": true,\n \"schema\": {\n \"$ref\": \"#/definitions/Pet\"\n }\n }\n ],\n \"responses\": {\n \"400\": {\n \"description\": \"Invalid ID supplied\"\n },\n \"404\": {\n \"description\": \"Pet not found\"\n },\n \"405\": {\n \"description\": \"Validation exception\"\n }\n },\n \"security\": [\n {\n \"petstore_auth\": [\n \"write:pets\",\n \"read:pets\"\n ]\n }\n ]\n }\n },\n \"/pet/findByStatus\": {\n \"get\": {\n \"tags\": [\n \"pet\"\n ],\n \"summary\": \"Finds Pets by status\",\n \"description\": \"Multiple status values can be provided with comma separated strings\",\n \"operationId\": \"findPetsByStatus\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"status\",\n \"in\": \"query\",\n \"description\": \"Status values that need to be considered for filter\",\n \"required\": true,\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\n \"available\",\n \"pending\",\n \"sold\"\n ],\n \"default\": \"available\"\n },\n \"collectionFormat\": \"multi\"\n }\n ],\n \"responses\": {\n \"200\": {\n \"description\": \"successful operation\",\n \"schema\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/Pet\"\n }\n }\n },\n \"400\": {\n \"description\": \"Invalid status value\"\n }\n },\n \"security\": [\n {\n \"petstore_auth\": [\n \"write:pets\",\n \"read:pets\"\n ]\n }\n ]\n }\n },\n \"/pet/findByTags\": {\n \"get\": {\n \"tags\": [\n \"pet\"\n ],\n \"summary\": \"Finds Pets by tags\",\n \"description\": \"Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.\",\n \"operationId\": \"findPetsByTags\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"tags\",\n \"in\": \"query\",\n \"description\": \"Tags to filter by\",\n \"required\": true,\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"collectionFormat\": \"multi\"\n }\n ],\n \"responses\": {\n \"200\": {\n \"description\": \"successful operation\",\n \"schema\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/Pet\"\n }\n }\n },\n \"400\": {\n \"description\": \"Invalid tag value\"\n }\n },\n \"security\": [\n {\n \"petstore_auth\": [\n \"write:pets\",\n \"read:pets\"\n ]\n }\n ],\n \"deprecated\": true\n }\n },\n \"/pet/{petId}\": {\n \"get\": {\n \"tags\": [\n \"pet\"\n ],\n \"summary\": \"Find pet by ID\",\n \"description\": \"Returns a single pet\",\n \"operationId\": \"getPetById\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"petId\",\n \"in\": \"path\",\n \"description\": \"ID of pet to return\",\n \"required\": true,\n \"type\": \"integer\",\n \"format\": \"int64\"\n }\n ],\n \"responses\": {\n \"200\": {\n \"description\": \"successful operation\",\n \"schema\": {\n \"$ref\": \"#/definitions/Pet\"\n }\n },\n \"400\": {\n \"description\": \"Invalid ID supplied\"\n },\n \"404\": {\n \"description\": \"Pet not found\"\n }\n },\n \"security\": [\n {\n \"api_key\": []\n }\n ]\n },\n \"post\": {\n \"tags\": [\n \"pet\"\n ],\n \"summary\": \"Updates a pet in the store with form data\",\n \"description\": \"\",\n \"operationId\": \"updatePetWithForm\",\n \"consumes\": [\n \"application/x-www-form-urlencoded\"\n ],\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"petId\",\n \"in\": \"path\",\n \"description\": \"ID of pet that needs to be updated\",\n \"required\": true,\n \"type\": \"integer\",\n \"format\": \"int64\"\n },\n {\n \"name\": \"name\",\n \"in\": \"formData\",\n \"description\": \"Updated name of the pet\",\n \"required\": false,\n \"type\": \"string\"\n },\n {\n \"name\": \"status\",\n \"in\": \"formData\",\n \"description\": \"Updated status of the pet\",\n \"required\": false,\n \"type\": \"string\"\n }\n ],\n \"responses\": {\n \"405\": {\n \"description\": \"Invalid input\"\n }\n },\n \"security\": [\n {\n \"petstore_auth\": [\n \"write:pets\",\n \"read:pets\"\n ]\n }\n ]\n },\n \"delete\": {\n \"tags\": [\n \"pet\"\n ],\n \"summary\": \"Deletes a pet\",\n \"description\": \"\",\n \"operationId\": \"deletePet\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"api_key\",\n \"in\": \"header\",\n \"required\": false,\n \"type\": \"string\"\n },\n {\n \"name\": \"petId\",\n \"in\": \"path\",\n \"description\": \"Pet id to delete\",\n \"required\": true,\n \"type\": \"integer\",\n \"format\": \"int64\"\n }\n ],\n \"responses\": {\n \"400\": {\n \"description\": \"Invalid ID supplied\"\n },\n \"404\": {\n \"description\": \"Pet not found\"\n }\n },\n \"security\": [\n {\n \"petstore_auth\": [\n \"write:pets\",\n \"read:pets\"\n ]\n }\n ]\n }\n },\n \"/store/inventory\": {\n \"get\": {\n \"tags\": [\n \"store\"\n ],\n \"summary\": \"Returns pet inventories by status\",\n \"description\": \"Returns a map of status codes to quantities\",\n \"operationId\": \"getInventory\",\n \"produces\": [\n \"application/json\"\n ],\n \"parameters\": [],\n \"responses\": {\n \"200\": {\n \"description\": \"successful operation\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"integer\",\n \"format\": \"int32\"\n }\n }\n }\n },\n \"security\": [\n {\n \"api_key\": []\n }\n ]\n }\n },\n \"/store/order\": {\n \"post\": {\n \"tags\": [\n \"store\"\n ],\n \"summary\": \"Place an order for a pet\",\n \"description\": \"\",\n \"operationId\": \"placeOrder\",\n \"consumes\": [\n \"application/json\"\n ],\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"in\": \"body\",\n \"name\": \"body\",\n \"description\": \"order placed for purchasing the pet\",\n \"required\": true,\n \"schema\": {\n \"$ref\": \"#/definitions/Order\"\n }\n }\n ],\n \"responses\": {\n \"200\": {\n \"description\": \"successful operation\",\n \"schema\": {\n \"$ref\": \"#/definitions/Order\"\n }\n },\n \"400\": {\n \"description\": \"Invalid Order\"\n }\n }\n }\n },\n \"/store/order/{orderId}\": {\n \"get\": {\n \"tags\": [\n \"store\"\n ],\n \"summary\": \"Find purchase order by ID\",\n \"description\": \"For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions\",\n \"operationId\": \"getOrderById\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"orderId\",\n \"in\": \"path\",\n \"description\": \"ID of pet that needs to be fetched\",\n \"required\": true,\n \"type\": \"integer\",\n \"maximum\": 10,\n \"minimum\": 1,\n \"format\": \"int64\"\n }\n ],\n \"responses\": {\n \"200\": {\n \"description\": \"successful operation\",\n \"schema\": {\n \"$ref\": \"#/definitions/Order\"\n }\n },\n \"400\": {\n \"description\": \"Invalid ID supplied\"\n },\n \"404\": {\n \"description\": \"Order not found\"\n }\n }\n },\n \"delete\": {\n \"tags\": [\n \"store\"\n ],\n \"summary\": \"Delete purchase order by ID\",\n \"description\": \"For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors\",\n \"operationId\": \"deleteOrder\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"orderId\",\n \"in\": \"path\",\n \"description\": \"ID of the order that needs to be deleted\",\n \"required\": true,\n \"type\": \"integer\",\n \"minimum\": 1,\n \"format\": \"int64\"\n }\n ],\n \"responses\": {\n \"400\": {\n \"description\": \"Invalid ID supplied\"\n },\n \"404\": {\n \"description\": \"Order not found\"\n }\n }\n }\n },\n \"/user/createWithList\": {\n \"post\": {\n \"tags\": [\n \"user\"\n ],\n \"summary\": \"Creates list of users with given input array\",\n \"description\": \"\",\n \"operationId\": \"createUsersWithListInput\",\n \"consumes\": [\n \"application/json\"\n ],\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"in\": \"body\",\n \"name\": \"body\",\n \"description\": \"List of user object\",\n \"required\": true,\n \"schema\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/User\"\n }\n }\n }\n ],\n \"responses\": {\n \"default\": {\n \"description\": \"successful operation\"\n }\n }\n }\n },\n \"/user/{username}\": {\n \"get\": {\n \"tags\": [\n \"user\"\n ],\n \"summary\": \"Get user by user name\",\n \"description\": \"\",\n \"operationId\": \"getUserByName\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"username\",\n \"in\": \"path\",\n \"description\": \"The name that needs to be fetched. Use user1 for testing. \",\n \"required\": true,\n \"type\": \"string\"\n }\n ],\n \"responses\": {\n \"200\": {\n \"description\": \"successful operation\",\n \"schema\": {\n \"$ref\": \"#/definitions/User\"\n }\n },\n \"400\": {\n \"description\": \"Invalid username supplied\"\n },\n \"404\": {\n \"description\": \"User not found\"\n }\n }\n },\n \"put\": {\n \"tags\": [\n \"user\"\n ],\n \"summary\": \"Updated user\",\n \"description\": \"This can only be done by the logged in user.\",\n \"operationId\": \"updateUser\",\n \"consumes\": [\n \"application/json\"\n ],\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"username\",\n \"in\": \"path\",\n \"description\": \"name that need to be updated\",\n \"required\": true,\n \"type\": \"string\"\n },\n {\n \"in\": \"body\",\n \"name\": \"body\",\n \"description\": \"Updated user object\",\n \"required\": true,\n \"schema\": {\n \"$ref\": \"#/definitions/User\"\n }\n }\n ],\n \"responses\": {\n \"400\": {\n \"description\": \"Invalid user supplied\"\n },\n \"404\": {\n \"description\": \"User not found\"\n }\n }\n },\n \"delete\": {\n \"tags\": [\n \"user\"\n ],\n \"summary\": \"Delete user\",\n \"description\": \"This can only be done by the logged in user.\",\n \"operationId\": \"deleteUser\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"username\",\n \"in\": \"path\",\n \"description\": \"The name that needs to be deleted\",\n \"required\": true,\n \"type\": \"string\"\n }\n ],\n \"responses\": {\n \"400\": {\n \"description\": \"Invalid username supplied\"\n },\n \"404\": {\n \"description\": \"User not found\"\n }\n }\n }\n },\n \"/user/login\": {\n \"get\": {\n \"tags\": [\n \"user\"\n ],\n \"summary\": \"Logs user into the system\",\n \"description\": \"\",\n \"operationId\": \"loginUser\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"name\": \"username\",\n \"in\": \"query\",\n \"description\": \"The user name for login\",\n \"required\": true,\n \"type\": \"string\"\n },\n {\n \"name\": \"password\",\n \"in\": \"query\",\n \"description\": \"The password for login in clear text\",\n \"required\": true,\n \"type\": \"string\"\n }\n ],\n \"responses\": {\n \"200\": {\n \"description\": \"successful operation\",\n \"headers\": {\n \"X-Expires-After\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"date in UTC when token expires\"\n },\n \"X-Rate-Limit\": {\n \"type\": \"integer\",\n \"format\": \"int32\",\n \"description\": \"calls per hour allowed by the user\"\n }\n },\n \"schema\": {\n \"type\": \"string\"\n }\n },\n \"400\": {\n \"description\": \"Invalid username/password supplied\"\n }\n }\n }\n },\n \"/user/logout\": {\n \"get\": {\n \"tags\": [\n \"user\"\n ],\n \"summary\": \"Logs out current logged in user session\",\n \"description\": \"\",\n \"operationId\": \"logoutUser\",\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [],\n \"responses\": {\n \"default\": {\n \"description\": \"successful operation\"\n }\n }\n }\n },\n \"/user/createWithArray\": {\n \"post\": {\n \"tags\": [\n \"user\"\n ],\n \"summary\": \"Creates list of users with given input array\",\n \"description\": \"\",\n \"operationId\": \"createUsersWithArrayInput\",\n \"consumes\": [\n \"application/json\"\n ],\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"in\": \"body\",\n \"name\": \"body\",\n \"description\": \"List of user object\",\n \"required\": true,\n \"schema\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/User\"\n }\n }\n }\n ],\n \"responses\": {\n \"default\": {\n \"description\": \"successful operation\"\n }\n }\n }\n },\n \"/user\": {\n \"post\": {\n \"tags\": [\n \"user\"\n ],\n \"summary\": \"Create user\",\n \"description\": \"This can only be done by the logged in user.\",\n \"operationId\": \"createUser\",\n \"consumes\": [\n \"application/json\"\n ],\n \"produces\": [\n \"application/json\",\n \"application/xml\"\n ],\n \"parameters\": [\n {\n \"in\": \"body\",\n \"name\": \"body\",\n \"description\": \"Created user object\",\n \"required\": true,\n \"schema\": {\n \"$ref\": \"#/definitions/User\"\n }\n }\n ],\n \"responses\": {\n \"default\": {\n \"description\": \"successful operation\"\n }\n }\n }\n }\n },\n \"securityDefinitions\": {\n \"api_key\": {\n \"type\": \"apiKey\",\n \"name\": \"api_key\",\n \"in\": \"header\"\n },\n \"petstore_auth\": {\n \"type\": \"oauth2\",\n \"authorizationUrl\": \"https://petstore.swagger.io/oauth/authorize\",\n \"flow\": \"implicit\",\n \"scopes\": {\n \"read:pets\": \"read your pets\",\n \"write:pets\": \"modify pets in your account\"\n }\n }\n },\n \"definitions\": {\n \"ApiResponse\": {\n \"type\": \"object\",\n \"properties\": {\n \"code\": {\n \"type\": \"integer\",\n \"format\": \"int32\",\n \"description\": \"Response status code\"\n },\n \"type\": {\n \"type\": \"string\",\n \"description\": \"Type description\"\n },\n \"message\": {\n \"type\": \"string\",\n \"description\": \"Associated message\"\n }\n }\n },\n \"Category\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"integer\",\n \"format\": \"int64\",\n \"description\": \"Unique identifier\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Descriptive name or label\"\n }\n },\n \"xml\": {\n \"name\": \"Category\"\n }\n },\n \"Pet\": {\n \"type\": \"object\",\n \"required\": [\n \"name\",\n \"photoUrls\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"integer\",\n \"format\": \"int64\",\n \"description\": \"Unique identifier\"\n },\n \"category\": {\n \"$ref\": \"#/definitions/Category\",\n \"description\": \"Category grouping the item\"\n },\n \"name\": {\n \"type\": \"string\",\n \"example\": \"doggie\",\n \"description\": \"Descriptive name or label\"\n },\n \"photoUrls\": {\n \"type\": \"array\",\n \"xml\": {\n \"wrapped\": true\n },\n \"items\": {\n \"type\": \"string\",\n \"xml\": {\n \"name\": \"photoUrl\"\n }\n },\n \"description\": \"URLs pointing to pet photos\"\n },\n \"tags\": {\n \"type\": \"array\",\n \"xml\": {\n \"wrapped\": true\n },\n \"items\": {\n \"xml\": {\n \"name\": \"tag\"\n },\n \"$ref\": \"#/definitions/Tag\"\n },\n \"description\": \"Associated tags for categorization\"\n },\n \"status\": {\n \"type\": \"string\",\n \"description\": \"Current availability status\",\n \"enum\": [\n \"available\",\n \"pending\",\n \"sold\"\n ]\n }\n },\n \"xml\": {\n \"name\": \"Pet\"\n }\n },\n \"Tag\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"integer\",\n \"format\": \"int64\",\n \"description\": \"Unique identifier\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Descriptive name or label\"\n }\n },\n \"xml\": {\n \"name\": \"Tag\"\n }\n },\n \"Order\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"integer\",\n \"format\": \"int64\",\n \"description\": \"Unique identifier\"\n },\n \"petId\": {\n \"type\": \"integer\",\n \"format\": \"int64\",\n \"description\": \"ID of the pet\"\n },\n \"quantity\": {\n \"type\": \"integer\",\n \"format\": \"int32\",\n \"description\": \"Number of items ordered\"\n },\n \"shipDate\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Date the item is to be shipped\"\n },\n \"status\": {\n \"type\": \"string\",\n \"description\": \"Current availability status\",\n \"enum\": [\n \"placed\",\n \"approved\",\n \"delivered\"\n ]\n },\n \"complete\": {\n \"type\": \"boolean\",\n \"description\": \"Indicates if the order is complete\"\n }\n },\n \"xml\": {\n \"name\": \"Order\"\n }\n },\n \"User\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"integer\",\n \"format\": \"int64\",\n \"description\": \"Unique identifier\"\n },\n \"username\": {\n \"type\": \"string\",\n \"description\": \"User's unique username\"\n },\n \"firstName\": {\n \"type\": \"string\",\n \"description\": \"User's first name\"\n },\n \"lastName\": {\n \"type\": \"string\",\n \"description\": \"User's last name\"\n },\n \"email\": {\n \"type\": \"string\",\n \"description\": \"User's email address\"\n },\n \"password\": {\n \"type\": \"string\",\n \"description\": \"User's account password\"\n },\n \"phone\": {\n \"type\": \"string\",\n \"description\": \"User's contact number\"\n },\n \"userStatus\": {\n \"type\": \"integer\",\n \"format\": \"int32\",\n \"description\": \"Status indicator of user\"\n }\n },\n \"xml\": {\n \"name\": \"User\"\n }\n }\n },\n \"externalDocs\": {\n \"description\": \"Find out more about Swagger\",\n \"url\": \"http://swagger.io\"\n }\n}" +} \ No newline at end of file diff --git a/content/apiSchema/spec.json b/content/apiSchema/spec.json new file mode 100644 index 0000000..3769970 --- /dev/null +++ b/content/apiSchema/spec.json @@ -0,0 +1,3 @@ +{ + "apiSchema": "{\r\n \"x-generator\": \"NSwag v14.0.0.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))\",\r\n \"openapi\": \"3.0.0\",\r\n \"info\": {\r\n \"title\": \"My Title\",\r\n \"version\": \"1.0.0\"\r\n },\r\n \"paths\": {\r\n \"/api/AppSettings\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"AppSettings\"\r\n ],\r\n \"operationId\": \"AppSettings_Get\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AppSettings\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/Buildings\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Buildings\"\r\n ],\r\n \"operationId\": \"Buildings_GetBuildings\",\r\n \"requestBody\": {\r\n \"x-name\": \"query\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/GetBuildingsQuery\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/BuildingsVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/CurrentUser\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"CurrentUser\"\r\n ],\r\n \"operationId\": \"CurrentUser_Get\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UserVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Activities/{id}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Activities\"\r\n ],\r\n \"operationId\": \"Activities_Get\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ActivityVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Activities\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Activities\"\r\n ],\r\n \"operationId\": \"Activities_Upsert\",\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertActivityCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Activities/UpsertGroundBorne\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Activities\"\r\n ],\r\n \"operationId\": \"Activities_UpsertGroundBorne\",\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertGroundBorneActivityCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Activities/GetComplianceRatings/{activityId}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Activities\"\r\n ],\r\n \"operationId\": \"Activities_GetComplianceRatings\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"activityId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ActivityComplianceRatingVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Activities/Delete/{activityId}\": {\r\n \"delete\": {\r\n \"tags\": [\r\n \"Activities\"\r\n ],\r\n \"operationId\": \"Activities_Delete\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"activityId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"responses\": {\r\n \"204\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Activities/UpdateActivityToggle\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Activities\"\r\n ],\r\n \"operationId\": \"Activities_UpdateActivityToggle\",\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateActivityToggleCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Activities/Clone/{activityId}\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Activities\"\r\n ],\r\n \"operationId\": \"Activities_Clone\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"activityId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Activities/CloneGroundBorne/{activityId}\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Activities\"\r\n ],\r\n \"operationId\": \"Activities_CloneGroundBorne\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"activityId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/{id}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_Get\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AssessmentVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"delete\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_Delete\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"204\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/UpsertAssessment\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_UpsertAssessment\",\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertAssessmentCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/UpdateAssessmentPeriod\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_UpdateAssessmentPeriod\",\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateAssessmentPeriodCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/GetComplianceTablePage\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_GetComplianceTablePage\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"AssessmentId\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"StartIndex\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 2\r\n },\r\n {\r\n \"name\": \"Length\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 3\r\n },\r\n {\r\n \"name\": \"SortField\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 4\r\n },\r\n {\r\n \"name\": \"SortDirection\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 5\r\n },\r\n {\r\n \"name\": \"Filter\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 6\r\n },\r\n {\r\n \"name\": \"LandUseFilter\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 7\r\n },\r\n {\r\n \"name\": \"ImpactClassFilter\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 8\r\n },\r\n {\r\n \"name\": \"VibrationImpactFilter\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 9\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ComplianceTablePageVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/GetGroundBorneComplianceTablePage\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_GetGroundBorneComplianceTablePage\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"AssessmentId\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"StartIndex\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 2\r\n },\r\n {\r\n \"name\": \"Length\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 3\r\n },\r\n {\r\n \"name\": \"SortField\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 4\r\n },\r\n {\r\n \"name\": \"SortDirection\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 5\r\n },\r\n {\r\n \"name\": \"Filter\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 6\r\n },\r\n {\r\n \"name\": \"LandUseFilter\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 7\r\n },\r\n {\r\n \"name\": \"ImpactClassFilter\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 8\r\n },\r\n {\r\n \"name\": \"VibrationImpactFilter\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 9\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/GroundBorneComplianceTablePageVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/GetComplianceTableReport\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_GetComplianceTableReport\",\r\n \"requestBody\": {\r\n \"x-name\": \"request\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/GetComplianceTableReportQuery\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/GetComplianceRatings/{assessmentId}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_GetComplianceRatings\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/AssessmentComplianceRatingVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/GetReport\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_GetReport\",\r\n \"requestBody\": {\r\n \"x-name\": \"query\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/GetAssessmentReportQuery\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/Clone/{assessmentId}\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_Clone\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/CloneGroundBorne/{assessmentId}\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_CloneGroundBorne\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/SubmitAssessment/{assessmentId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_SubmitAssessment\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/ApproveAssessment/{assessmentId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_ApproveAssessment\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/RejectAssessment/{assessmentId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_RejectAssessment\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/SkipAssessmentApprover/{assessmentId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_SkipAssessmentApprover\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"userId\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/SendAssessmentReminder/{assessmentId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_SendAssessmentReminder\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"userId\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"responses\": {\r\n \"204\": {\r\n \"description\": \"\"\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Assessments/Recalculate/{assessmentId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Assessments\"\r\n ],\r\n \"operationId\": \"Assessments_Recalculate\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"assessmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/List\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetList\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectSummaryDto\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{id}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_Get\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProjectVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"delete\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_Delete\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"204\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/GetCalendar/{id}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetCalendar\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/GetProjectCalendarVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/GetRecommendedReceiverData\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetRecommendedReceiverData\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/GetProjectRecommendedReceiverDataVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/Create\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_Create\",\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/CreateProjectCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_Upsert\",\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertProjectCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{id}/UpdateProjectVibrationDefinition\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpdateProjectVibrationDefinition\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateProjectVibrationDefinitionCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{id}/UpdateApprovalPipeline\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpdateApprovalPipeline\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateApprovalPipelineCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{id}/UpdateImpactClassDefinition\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpdateImpactClassDefinition\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateImpactClassDefinitionCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{id}/UpdateDefaultNMLs\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpdateDefaultNMLs\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateDefaultNMLCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{id}/UpdateVibrationImpactDefinition\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpdateVibrationImpactDefinition\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateVibrationImpactDefinitionCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{id}/TogglePreferredNoiseLevelMeasurement\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_TogglePreferredNoiseLevelMeasurement\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{projectId}/ToggleReceiverVisibility/{receiverId}\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_ToggleReceiverVisibility\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"receiverId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{projectId}/UpdateReceiver\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpdateReceiver\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateReceiverCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 2\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/{projectId}/UpdateReceivers\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpdateReceivers\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateReceiversCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 2\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/GetMinorWorksReports\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetMinorWorksReports\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/MinorWorksTemplateDto\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/GetDefaultAssessmentPeriodDefinitions\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetDefaultAssessmentPeriodDefinitions\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriodDefinitionVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/GroundBorneList\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetGroundBorneList\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundborneEquipmentDto\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/projects/Projects/ExportMap\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_ExportMap\",\r\n \"requestBody\": {\r\n \"x-name\": \"mapData\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ExportMapCommandDto\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/EquipmentsCategories\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"EquipmentsCategories\"\r\n ],\r\n \"operationId\": \"EquipmentsCategories_GetAll\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/EquipmentCategoryVM\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"put\": {\r\n \"tags\": [\r\n \"EquipmentsCategories\"\r\n ],\r\n \"operationId\": \"EquipmentsCategories_Upsert\",\r\n \"requestBody\": {\r\n \"x-name\": \"request\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertEquipmentCategoriesCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Equipments\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Equipments\"\r\n ],\r\n \"operationId\": \"Equipments_Get\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/EquipmentSummaryVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Equipments/UpsertEquipment\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Equipments\"\r\n ],\r\n \"operationId\": \"Equipments_UpsertEquipment\",\r\n \"requestBody\": {\r\n \"x-name\": \"request\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertEquipmentCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Equipments/DeleteEquipment/{id}\": {\r\n \"delete\": {\r\n \"tags\": [\r\n \"Equipments\"\r\n ],\r\n \"operationId\": \"Equipments_DeleteEquipment\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/GroundBorneEquipments\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"GroundBorneEquipments\"\r\n ],\r\n \"operationId\": \"GroundBorneEquipments_Get\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundBorneEquipmentVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/GroundBorneEquipments/UpsertGroundBorneEquipment\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"GroundBorneEquipments\"\r\n ],\r\n \"operationId\": \"GroundBorneEquipments_UpsertGroundBorneEquipment\",\r\n \"requestBody\": {\r\n \"x-name\": \"request\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertGroundBorneEquipmentCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/GroundBorneEquipments/UpsertGroundBorneProjectEquipment\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"GroundBorneEquipments\"\r\n ],\r\n \"operationId\": \"GroundBorneEquipments_UpsertGroundBorneProjectEquipment\",\r\n \"requestBody\": {\r\n \"x-name\": \"request\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertGroundBorneProjectEquipmentCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/{projectId}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetSummary\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProjectSummaryVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertAssessmentReportTemplate/{projectId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertAssessmentReportTemplate\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"multipart/form-data\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"file\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\",\r\n \"nullable\": true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertMapLayer/{projectId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertMapLayer\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"multipart/form-data\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"file\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\",\r\n \"nullable\": true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/DeleteMapLayer/{projectId}\": {\r\n \"delete\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_DeleteMapLayer\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"filename\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 2\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertGroundOverlay/{projectId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertGroundOverlay\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"name\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 2\r\n },\r\n {\r\n \"name\": \"north\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"x-position\": 3\r\n },\r\n {\r\n \"name\": \"south\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"x-position\": 4\r\n },\r\n {\r\n \"name\": \"east\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"x-position\": 5\r\n },\r\n {\r\n \"name\": \"west\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"x-position\": 6\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"multipart/form-data\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"file\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\",\r\n \"nullable\": true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/DeleteGroundOverlay/{projectId}\": {\r\n \"delete\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_DeleteGroundOverlay\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"groundOverlayName\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/DownloadAssessmentReportTemplate/{attachmentId}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_DownloadAssessmentReportTemplate\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"attachmentId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertReceiverData/{projectId}/{fileType}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertReceiverData\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"fileType\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ModelingDataFileType\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"multipart/form-data\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"file\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\",\r\n \"nullable\": true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertAdditionalReceiverData/{projectId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertAdditionalReceiverData\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"multipart/form-data\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"file\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\",\r\n \"nullable\": true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertAdditionalSourceLocationData/{projectId}\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertAdditionalSourceLocationData\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"multipart/form-data\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"file\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\",\r\n \"nullable\": true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/QueueReceiverDataValidation/{projectId}\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_QueueReceiverDataValidation\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/QueueReceiverDataImport/{projectId}\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_QueueReceiverDataImport\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertModelingData/{projectId}/modelingdata\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertModelingData\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"multipart/form-data\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"file\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\",\r\n \"nullable\": true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/DeleteModelingData/{projectId}/modelingdata\": {\r\n \"delete\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_DeleteModelingData\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertComplianceTableReportTemplate/{projectId}/ComplianceTableReportTempate\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertComplianceTableReportTemplate\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"multipart/form-data\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"file\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\",\r\n \"nullable\": true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/DeleteComplianceTableReportTemplate/{projectId}/ComplianceTableReportTempate\": {\r\n \"delete\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_DeleteComplianceTableReportTemplate\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/GetModelingData/{id}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetModelingData\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/GetModelingDataFile/{id}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetModelingDataFile\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n },\r\n {\r\n \"name\": \"modelingDataFileType\",\r\n \"in\": \"query\",\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ModelingDataFileType\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/{id}/ToggleMultiFloorResultsCommand\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_ToggleMultiFloorResultsCommand\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/{id}/UpdateGroundBorneEquipmentUsages\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpdateGroundBorneEquipmentUsages\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"id\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"request\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdateGroundBorneEquipmentUsagesCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/GetMinorWorksReport/{reportName}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_GetMinorWorksReport\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"reportName\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertMinorWorksReport/{reportName}\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertMinorWorksReport\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"reportName\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 2\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertMinorWorksReportCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertMinorWorksReportFile/{reportName}\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertMinorWorksReportFile\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"reportName\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"content\": {\r\n \"multipart/form-data\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"file\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\",\r\n \"nullable\": true\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/DeleteMinorWorksReport\": {\r\n \"delete\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_DeleteMinorWorksReport\",\r\n \"requestBody\": {\r\n \"x-name\": \"reportName\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Projects/UpsertAssessmentPeriods\": {\r\n \"post\": {\r\n \"tags\": [\r\n \"Projects\"\r\n ],\r\n \"operationId\": \"Projects_UpsertAssessmentPeriods\",\r\n \"requestBody\": {\r\n \"x-name\": \"periods\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriodDefinitionVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/octet-stream\": {\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"binary\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/UserManuals\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"UserManuals\"\r\n ],\r\n \"operationId\": \"UserManuals_Get\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UserManualsVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Users/GetUserByEmail/{email}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"operationId\": \"Users_GetUserByEmail\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"email\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UserVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Users/GetAllGlobalRoles\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"operationId\": \"Users_GetAllGlobalRoles\",\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/GlobalRolesVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Users/GetAllProjectRoles/{projectId}\": {\r\n \"get\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"operationId\": \"Users_GetAllProjectRoles\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"projectId\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/ProjectRolesVM\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Users/UpsertGlobalRoleByEmail\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"operationId\": \"Users_UpsertGlobalRoleByEmail\",\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertGlobalRoleCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Users/DeleteGlobalRoleByEmail/{email}\": {\r\n \"delete\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"operationId\": \"Users_DeleteGlobalRoleByEmail\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"email\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"responses\": {\r\n \"204\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Users/UpsertProjectRoleByEmail\": {\r\n \"put\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"operationId\": \"Users_UpsertProjectRoleByEmail\",\r\n \"requestBody\": {\r\n \"x-name\": \"command\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpsertProjectRoleCommand\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 1\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"/api/admin/Users/DeleteProjectRoleByEmail/{email}\": {\r\n \"delete\": {\r\n \"tags\": [\r\n \"Users\"\r\n ],\r\n \"operationId\": \"Users_DeleteProjectRoleByEmail\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"email\",\r\n \"in\": \"path\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\"\r\n },\r\n \"x-position\": 1\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"x-name\": \"projectId\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n },\r\n \"required\": true,\r\n \"x-position\": 2\r\n },\r\n \"responses\": {\r\n \"204\": {\r\n \"description\": \"\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"components\": {\r\n \"schemas\": {\r\n \"AppSettings\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"auth0Domain\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"auth0CallbackUrl\": {\r\n \"type\": \"string\",\r\n \"format\": \"uri\",\r\n \"nullable\": true\r\n },\r\n \"auth0LogoutUrl\": {\r\n \"type\": \"string\",\r\n \"format\": \"uri\",\r\n \"nullable\": true\r\n },\r\n \"auth0ClientId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"deploymentEnvironmentName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"deploymentReleaseNumber\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"deploymentCreatedTimestamp\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"applicationInsightsConnectionString\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"googleMapsApiKey\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"mapScreenshotEndpoint\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"mapScreenshotKey\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"movingPointSourceEnabled\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"advancedMapMarkersEnabled\": {\r\n \"type\": \"boolean\"\r\n }\r\n }\r\n },\r\n \"BuildingsVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"buildings\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/BuildingDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"BuildingDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"location\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/PointDto\"\r\n }\r\n ]\r\n },\r\n \"address\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"landUse\": {\r\n \"$ref\": \"#/components/schemas/LandUse\"\r\n },\r\n \"objectId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"isHeritageListed\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"area\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n }\r\n }\r\n },\r\n \"PointDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"latitude\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"longitude\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n }\r\n }\r\n },\r\n \"LandUse\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"SingleResidential\",\r\n \"MultiResidential\",\r\n \"Residential\",\r\n \"Commercial\",\r\n \"Industrial\",\r\n \"Educational\",\r\n \"PlacesOfWorship\",\r\n \"OtherSensitiveReceivers\",\r\n \"ActiveRecreation\",\r\n \"PassiveRecreation\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3,\r\n 4,\r\n 5,\r\n 6,\r\n 7,\r\n 8,\r\n 9\r\n ]\r\n },\r\n \"GetBuildingsQuery\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"southWestBoundary\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/PointDto\"\r\n }\r\n ]\r\n },\r\n \"northEastBoundary\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/PointDto\"\r\n }\r\n ]\r\n },\r\n \"areas\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PolygonDto\"\r\n }\r\n },\r\n \"assessmentRangeMetres\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n },\r\n \"PolygonDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"points\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PointDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"UserVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"email\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"fullName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"picture\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"organizationName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"globalRoles\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UserGlobalRoleVM\"\r\n }\r\n },\r\n \"projectRoles\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UserProjectRoleVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"UserGlobalRoleVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"userId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"roleType\": {\r\n \"$ref\": \"#/components/schemas/GlobalRoleType\"\r\n }\r\n }\r\n },\r\n \"GlobalRoleType\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"Administrator\",\r\n \"MinorWorksUser\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1\r\n ]\r\n },\r\n \"UserProjectRoleVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"userId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"roleType\": {\r\n \"$ref\": \"#/components/schemas/ProjectRoleType\"\r\n }\r\n }\r\n },\r\n \"ProjectRoleType\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"AssessmentManager\",\r\n \"AssessmentCoordinator\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1\r\n ]\r\n },\r\n \"ActivityVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectType\": {\r\n \"$ref\": \"#/components/schemas/ProjectType\"\r\n },\r\n \"projectFriendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"assessmentFriendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"enabled\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"startDateTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"endDateTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"swl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"isMovingPointSource\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"movingPointSourceRoute\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"movingPointSourceRouteDistance\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"movingPointSourceSpeed\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"groundBorneEquipmentUsage\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/ActivityGroundBorneEquipmentUsageVM\"\r\n }\r\n ]\r\n },\r\n \"equipmentUsages\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ActivityEquipmentUsageVM\"\r\n }\r\n },\r\n \"selectedSourceLocations\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ActivityActivitySourceLocationVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"ProjectType\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"Standard\",\r\n \"MinorWorks\",\r\n \"GroundBorne\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2\r\n ]\r\n },\r\n \"ActivityGroundBorneEquipmentUsageVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"ActivityEquipmentUsageVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"equipmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"equipmentName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"quantity\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"usageFactor\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"equipmentPenalty\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"equipmentSWL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"equipmentLMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"reduction\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"swl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"lMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vibrationStandard\": {\r\n \"$ref\": \"#/components/schemas/VibrationStandardType\"\r\n },\r\n \"equipmentSafeWorkingDistanceBritishStandard\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSafeWorkingDistanceDinResi\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSafeWorkingDistanceDinHeritage\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSafeWorkingDistanceHumanComfort\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"peakParticleVelocityReference\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"referenceDistance\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"attenuationCoefficient\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"isCustom\": {\r\n \"type\": \"boolean\"\r\n }\r\n }\r\n },\r\n \"VibrationStandardType\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"None\",\r\n \"BritishStandard\",\r\n \"DINResi\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2\r\n ]\r\n },\r\n \"ActivityActivitySourceLocationVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"activityId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"sourceLocationId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n },\r\n \"UpsertActivityCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"swl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"lMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"startDateTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"endDateTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"enabled\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"isMovingPointSource\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"movingPointSourceRoute\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"movingPointSourceRouteDistance\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"movingPointSourceSpeed\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"equipmentUsages\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UpsertActivityCommandEquipmentUsageVM\"\r\n }\r\n },\r\n \"selectedSourceLocations\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ActivitySourceLocationVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"UpsertActivityCommandEquipmentUsageVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"equipmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"quantity\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"usageFactor\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"reduction\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"swl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"lMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"equipmentName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSWL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"equipmentLMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"equipmentPenalty\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"equipmentSafeWorkingDistanceBritishStandard\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSafeWorkingDistanceDinResi\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSafeWorkingDistanceDinHeritage\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSafeWorkingDistanceHumanComfort\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"peakParticleVelocityReference\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"referenceDistance\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"attenuationCoefficient\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"isCustom\": {\r\n \"type\": \"boolean\"\r\n }\r\n }\r\n },\r\n \"ActivitySourceLocationVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"activityId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"sourceLocationId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n },\r\n \"UpsertGroundBorneActivityCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"swl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"lMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"startDateTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"endDateTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"enabled\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"groundBorneEquipmentUsageId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"selectedSourceLocations\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ActivitySourceLocationVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"ActivityComplianceRatingVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"calculatedAssessmentPeriod\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n },\r\n \"selectedAssessmentPeriod\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n },\r\n \"receiverComplianceRatings\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ActivityReceiverComplianceRatingVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"AssessmentPeriod\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"Period0\",\r\n \"Period1\",\r\n \"Period2\",\r\n \"Period3\",\r\n \"Period4\",\r\n \"Period5\",\r\n \"Period6\",\r\n \"Period7\",\r\n \"Period8\",\r\n \"Period9\",\r\n \"Period10\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3,\r\n 4,\r\n 5,\r\n 6,\r\n 7,\r\n 8,\r\n 9,\r\n 10\r\n ]\r\n },\r\n \"ActivityReceiverComplianceRatingVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"receiverId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"receiverObjectId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"nml\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vml\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"laEq\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"gbVibration\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"gbNoise\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"highlyAffected\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"sleepDisturbed\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"sleepDisturbanceExceedence\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"complianceRating\": {\r\n \"$ref\": \"#/components/schemas/ComplianceRating\"\r\n },\r\n \"vibrationLevel\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vibrationExceedences\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactClassification\"\r\n }\r\n },\r\n \"vibrationImpactClassification\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactClassification\"\r\n }\r\n }\r\n },\r\n \"ComplianceRating\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"None\",\r\n \"LevelOne\",\r\n \"LevelTwo\",\r\n \"LevelThree\",\r\n \"LevelFour\",\r\n \"LevelFive\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3,\r\n 4,\r\n 5\r\n ]\r\n },\r\n \"VibrationImpactClassification\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"None\",\r\n \"HumanComfort\",\r\n \"Cosmetic\",\r\n \"Heritage\",\r\n \"Exceeds\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3,\r\n 4\r\n ]\r\n },\r\n \"UpdateActivityToggleCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"toggle\": {\r\n \"type\": \"boolean\"\r\n }\r\n }\r\n },\r\n \"AssessmentVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectType\": {\r\n \"$ref\": \"#/components/schemas/ProjectType\"\r\n },\r\n \"projectFriendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"expiryDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\",\r\n \"nullable\": true\r\n },\r\n \"isExpired\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"selectedWorkingPeriodType\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n }\r\n ]\r\n },\r\n \"selectedAssessmentPeriodTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\",\r\n \"nullable\": true\r\n },\r\n \"calculatedWorkingPeriodType\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n },\r\n \"firstActivityStart\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"lastActivityEnd\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"vibrationStandard\": {\r\n \"$ref\": \"#/components/schemas/VibrationStandardType\"\r\n },\r\n \"assessmentStatusUpdateRecords\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentStatusUpdateRecordVM\"\r\n }\r\n },\r\n \"activities\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentActivityVM\"\r\n }\r\n },\r\n \"noiseMitigationMeasures\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"approvers\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectApproverVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"AssessmentStatusUpdateRecordVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"createdOn\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"createdByFullName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"createdByEmail\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"approvalUserId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"fromAssessmentStatus\": {\r\n \"$ref\": \"#/components/schemas/AssessmentStatus\"\r\n },\r\n \"assessmentStatusUpdate\": {\r\n \"$ref\": \"#/components/schemas/AssessmentStatusUpdate\"\r\n },\r\n \"toAssessmentStatus\": {\r\n \"$ref\": \"#/components/schemas/AssessmentStatus\"\r\n }\r\n }\r\n },\r\n \"AssessmentStatus\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"Created\",\r\n \"InProgress\",\r\n \"Submitted\",\r\n \"Approved\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3\r\n ]\r\n },\r\n \"AssessmentStatusUpdate\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"Submit\",\r\n \"Reject\",\r\n \"Approve\",\r\n \"Skip\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3\r\n ]\r\n },\r\n \"AssessmentActivityVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectType\": {\r\n \"$ref\": \"#/components/schemas/ProjectType\"\r\n },\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"startDateTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"endDateTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"createdOn\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"isMovingPointSource\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"enabled\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"swl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"groundBorneEquipmentUsage\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/ActivityGroundBorneEquipmentUsageVM\"\r\n }\r\n ]\r\n },\r\n \"equipmentUsages\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentActivityEquipmentUsageVM\"\r\n }\r\n },\r\n \"selectedSourceLocations\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentActivitySourceLocationVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"AssessmentActivityEquipmentUsageVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"equipmentName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"quantity\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"usageFactor\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"reduction\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"swl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"lMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"equipmentSafeWorkingDistanceBritishStandard\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSafeWorkingDistanceDinResi\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSafeWorkingDistanceDinHeritage\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"equipmentSafeWorkingDistanceHumanComfort\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"isCustom\": {\r\n \"type\": \"boolean\"\r\n }\r\n }\r\n },\r\n \"AssessmentActivitySourceLocationVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"activityId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"sourceLocationId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n },\r\n \"ProjectApproverVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"sortOrder\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"userId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"email\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"UpsertAssessmentCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"requestedBy\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"justification\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"selectedWorkingPeriodType\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n }\r\n ]\r\n },\r\n \"selectedAssessmentPeriodTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\",\r\n \"nullable\": true\r\n },\r\n \"noiseMitigationMeasures\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n },\r\n \"UpdateAssessmentPeriodCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"selectedWorkingPeriodType\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n }\r\n ]\r\n },\r\n \"selectedAssessmentPeriodTime\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"ComplianceTablePageVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"totalRows\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"rows\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ComplianceTablePageReceiverVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"ComplianceTablePageReceiverVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"receiverId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"floor\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"addressFriendlyName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"ncaFriendlyName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"nml\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"rbl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"landUse\": {\r\n \"$ref\": \"#/components/schemas/LandUse\"\r\n },\r\n \"activitySWLs\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ActivitySwlVM\"\r\n }\r\n },\r\n \"predictedCumulativeLAEq\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"predictedCumulativeLMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"highlyAffected\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"sleepDisturbed\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"heritage\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"impactClass\": {\r\n \"$ref\": \"#/components/schemas/ComplianceRating\"\r\n },\r\n \"vibrationLevel\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vibrationExceedences\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactClassification\"\r\n }\r\n },\r\n \"vibrationImpactClassification\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactClassification\"\r\n }\r\n }\r\n },\r\n \"ActivitySwlVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"activityId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"activityFriendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"predictedActivityLAEq\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"predictedActivityVibration\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"predictedActivityNoiseLevel\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"enabled\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"vibrationLevel\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vibrationExceedences\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactClassification\"\r\n }\r\n }\r\n }\r\n },\r\n \"GroundBorneComplianceTablePageVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"totalRows\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"rows\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundBorneComplianceTablePageReceiverVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"GroundBorneComplianceTablePageReceiverVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"receiverId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"receiverObjectId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"floor\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"addressFriendlyName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"ncaFriendlyName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"nml\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"rbl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vml\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"landUse\": {\r\n \"$ref\": \"#/components/schemas/LandUse\"\r\n },\r\n \"activitySWLs\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ActivitySwlVM\"\r\n }\r\n },\r\n \"predictedCumulativeGroundBorneVibration\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"predictedCumulativeGroundBorneNoiseLevel\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"highlyAffected\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"sleepDisturbed\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"impactClass\": {\r\n \"$ref\": \"#/components/schemas/ComplianceRating\"\r\n },\r\n \"vibrationImpactClassification\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactClassification\"\r\n }\r\n }\r\n },\r\n \"GetComplianceTableReportQuery\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"sortField\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"sortOrder\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"filter\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"landUseFilter\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"impactClassFilter\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"vibrationImpactFilter\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"AssessmentComplianceRatingVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"workingPeriodType\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n },\r\n \"selectedWorkingPeriodType\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n },\r\n \"receiverComplianceRatings\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentReceiverComplianceRatingVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"AssessmentReceiverComplianceRatingVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"receiverId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"receiverObjectId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"nml\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vml\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"laEq\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"lMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"gbVibration\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"gbNoise\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"highlyAffected\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"sleepDisturbed\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"sleepDisturbanceExceedence\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"complianceRating\": {\r\n \"$ref\": \"#/components/schemas/ComplianceRating\"\r\n },\r\n \"vibrationLevel\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vibrationExceedences\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactClassification\"\r\n }\r\n },\r\n \"vibrationImpactClassification\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactClassification\"\r\n }\r\n }\r\n },\r\n \"GetAssessmentReportQuery\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"base64Image\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"attachedBase64Images\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AttachedImage\"\r\n }\r\n },\r\n \"complianceRatings\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ComplianceRatingFilter\"\r\n }\r\n },\r\n \"receiverSortField\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"receiverSortOrder\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"AttachedImage\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"base64Image\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"ComplianceRatingFilter\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"complianceRating\": {\r\n \"$ref\": \"#/components/schemas/ComplianceRating\"\r\n },\r\n \"includeAll\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"includeTop\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n },\r\n \"ProjectSummaryDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"displayName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"owningOrganizationName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"owningOrganizationLogo\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"modelingDataState\": {\r\n \"$ref\": \"#/components/schemas/ModelingDataState\"\r\n },\r\n \"hasModelingResultData\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"projectType\": {\r\n \"$ref\": \"#/components/schemas/ProjectType\"\r\n }\r\n }\r\n },\r\n \"ModelingDataState\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"None\",\r\n \"Uploaded\",\r\n \"Validating\",\r\n \"Validated\",\r\n \"Importing\",\r\n \"Imported\",\r\n \"ErrorImporting\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3,\r\n 4,\r\n 5,\r\n 6\r\n ]\r\n },\r\n \"ProjectVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"owningOrganizationName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"owningOrganizationLogo\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"modelingDataState\": {\r\n \"$ref\": \"#/components/schemas/ModelingDataState\"\r\n },\r\n \"vibrationStandard\": {\r\n \"$ref\": \"#/components/schemas/VibrationStandardType\"\r\n },\r\n \"hasModelingResultData\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"progressReportTemplateUploaded\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"preferredNoiseLevelMeasurement\": {\r\n \"$ref\": \"#/components/schemas/PreferredNoiseLevelMeasurement\"\r\n },\r\n \"projectType\": {\r\n \"$ref\": \"#/components/schemas/ProjectType\"\r\n },\r\n \"showMultiFloorResults\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"showVibrationResults\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"vibrationMeasurementType\": {\r\n \"$ref\": \"#/components/schemas/VibrationMeasurementType\"\r\n },\r\n \"additionalMapLayers\": {\r\n \"type\": \"object\",\r\n \"nullable\": true,\r\n \"additionalProperties\": {\r\n \"type\": \"string\",\r\n \"format\": \"uri\"\r\n }\r\n },\r\n \"groundOverlays\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundOverlayVM\"\r\n }\r\n },\r\n \"assessments\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectAssessmentVM\"\r\n }\r\n },\r\n \"groundBorneEquipmentUsages\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundBorneEquipmentUsageVM\"\r\n }\r\n },\r\n \"receivers\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectReceiverVM\"\r\n }\r\n },\r\n \"sourceLocations\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectSourceLocationVM\"\r\n }\r\n },\r\n \"approvalPipeline\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectApproverVM\"\r\n }\r\n },\r\n \"impactClassDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ImpactClassDefinitionVM\"\r\n }\r\n },\r\n \"vibrationImpactDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactDefinitionVM\"\r\n }\r\n },\r\n \"assessmentPeriodDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriodDefinitionVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"PreferredNoiseLevelMeasurement\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"NML\",\r\n \"RBL\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1\r\n ]\r\n },\r\n \"VibrationMeasurementType\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"Screening\",\r\n \"Quantitative\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1\r\n ]\r\n },\r\n \"GroundOverlayVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"url\": {\r\n \"type\": \"string\",\r\n \"format\": \"uri\",\r\n \"nullable\": true\r\n },\r\n \"north\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"south\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"east\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"west\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n }\r\n }\r\n },\r\n \"ProjectAssessmentVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectType\": {\r\n \"$ref\": \"#/components/schemas/ProjectType\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"isExpired\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"expiryDate\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\",\r\n \"nullable\": true\r\n },\r\n \"createdOn\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"assessmentStatusUpdateRecords\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectAssessmentStatusUpdateRecordVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"ProjectAssessmentStatusUpdateRecordVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"createdOn\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\"\r\n },\r\n \"createdByFullName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"createdByEmail\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"fromAssessmentStatus\": {\r\n \"$ref\": \"#/components/schemas/AssessmentStatus\"\r\n },\r\n \"assessmentStatusUpdate\": {\r\n \"$ref\": \"#/components/schemas/AssessmentStatusUpdate\"\r\n },\r\n \"toAssessmentStatus\": {\r\n \"$ref\": \"#/components/schemas/AssessmentStatus\"\r\n }\r\n }\r\n },\r\n \"GroundBorneEquipmentUsageVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"groundBorneEquipmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"vibrationFactor\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vibrationExponent\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"noiseLevelFactor\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"noiseLevelExponent\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n }\r\n }\r\n },\r\n \"ProjectReceiverVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"objectId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"floor\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"noiseCatchmentAreaName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"phoneNumber\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"referenceNumber\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"assessmentPeriodNMLs\": {\r\n \"type\": \"object\",\r\n \"nullable\": true,\r\n \"additionalProperties\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n }\r\n },\r\n \"assessmentPeriodRBLs\": {\r\n \"type\": \"object\",\r\n \"nullable\": true,\r\n \"additionalProperties\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n }\r\n },\r\n \"vml\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"address\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/ProjectAddressVM\"\r\n }\r\n ]\r\n },\r\n \"landUse\": {\r\n \"$ref\": \"#/components/schemas/LandUse\"\r\n },\r\n \"isHeritageListed\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"hidden\": {\r\n \"type\": \"boolean\"\r\n }\r\n }\r\n },\r\n \"ProjectAddressVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"latitude\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"longitude\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n }\r\n }\r\n },\r\n \"ProjectSourceLocationVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"objectId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"polygonCoordinates\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"ImpactClassDefinitionVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"assessmentPeriod\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n },\r\n \"complianceRating\": {\r\n \"$ref\": \"#/components/schemas/ComplianceRating\"\r\n },\r\n \"classLabelShortName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"classLabelLongName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"exceedLowerBound\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"exceedUpperBound\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"hexColour\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"rangeDescription\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"VibrationImpactDefinitionVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"vibrationImpactClassification\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactClassification\"\r\n },\r\n \"hexColour\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"AssessmentPeriodDefinitionVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"assessmentPeriod\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"canBeSleepDisturbed\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"assessmentPeriodTimeslots\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriodTimeslotVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"AssessmentPeriodTimeslotVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"assessmentPeriodDefinitionId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"startHour\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"endHour\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"dayOfWeek\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n }\r\n }\r\n },\r\n \"GetProjectCalendarVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"calendarItems\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectAssessmentCalendarItemVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"ProjectAssessmentCalendarItemVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"assessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"calculatedWorkingPeriodType\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n },\r\n \"firstActivityStart\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\",\r\n \"nullable\": true\r\n },\r\n \"lastActivityEnd\": {\r\n \"type\": \"string\",\r\n \"format\": \"date-time\",\r\n \"nullable\": true\r\n },\r\n \"complianceRating\": {\r\n \"$ref\": \"#/components/schemas/ComplianceRating\"\r\n }\r\n }\r\n },\r\n \"GetProjectRecommendedReceiverDataVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"recommendedReceiverData\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/RecommendedReceiverDataDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"RecommendedReceiverDataDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"dayNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"weekendDayNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"eveningNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"nightNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"sleepNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"dayRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"weekendDayRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"eveningRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"nightRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"sleepRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"CreateProjectCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"reportName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"preferredNoiseLevelMeasurement\": {\r\n \"$ref\": \"#/components/schemas/PreferredNoiseLevelMeasurement\"\r\n },\r\n \"sourceLocations\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PolygonDto\"\r\n }\r\n },\r\n \"buildings\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/BuildingDto\"\r\n }\r\n },\r\n \"assessmentRangeMetres\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectReceiverData\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/ProjectReceiverDataDto\"\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n \"ProjectReceiverDataDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"receiverTypeName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"receiverTypeDescription\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"usingCustomValues\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"dayNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"weekendDayNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"eveningNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"nightNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"sleepNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"dayRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"weekendDayRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"eveningRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"nightRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"sleepRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"UpsertProjectCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"owningOrganizationName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"owningOrganizationLogo\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"projectType\": {\r\n \"$ref\": \"#/components/schemas/ProjectType\"\r\n },\r\n \"modelingDataState\": {\r\n \"$ref\": \"#/components/schemas/ModelingDataState\"\r\n },\r\n \"vibrationStandard\": {\r\n \"$ref\": \"#/components/schemas/VibrationStandardType\"\r\n },\r\n \"preferredNoiseLevelMeasurement\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/PreferredNoiseLevelMeasurement\"\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n \"UpdateProjectVibrationDefinitionCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"vibrationStandard\": {\r\n \"$ref\": \"#/components/schemas/VibrationStandardType\"\r\n },\r\n \"vibrationMeasurementType\": {\r\n \"$ref\": \"#/components/schemas/VibrationMeasurementType\"\r\n }\r\n }\r\n },\r\n \"UpdateApprovalPipelineCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"pipeline\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectApproverVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"UpdateImpactClassDefinitionCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"impactClassDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ImpactClassDefinitionVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"UpdateDefaultNMLCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"defaults\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/DefaultNMLVM\"\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n \"DefaultNMLVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"landUse\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/LandUse\"\r\n }\r\n ]\r\n },\r\n \"noiseCatchmentAreaName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"defaultAssessmentPeriodLevels\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/DefaultAssessmentPeriodLevelVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"DefaultAssessmentPeriodLevelVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"defaultNMLId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"assessmentPeriod\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n },\r\n \"nml\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"rbl\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"UpdateVibrationImpactDefinitionCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"vibrationImpactDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactDefinitionVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"UpdateReceiverCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"eagerRecalculateAssessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"receiverId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"landUse\": {\r\n \"$ref\": \"#/components/schemas/LandUse\"\r\n }\r\n }\r\n },\r\n \"UpdateReceiversCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"eagerRecalculateAssessmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"receiverObjectId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"landUse\": {\r\n \"$ref\": \"#/components/schemas/LandUse\"\r\n },\r\n \"isHeritageListed\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"visible\": {\r\n \"type\": \"boolean\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"MinorWorksTemplateDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"reportName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"assessmentTemplateUploaded\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"complianceTableTemplateUploaded\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"defaults\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/MinorWorksDefaultNMLDto\"\r\n }\r\n },\r\n \"impactClassDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/MinorWorksImpactClassDefinitionDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"MinorWorksDefaultNMLDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"landUse\": {\r\n \"nullable\": true,\r\n \"oneOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/LandUse\"\r\n }\r\n ]\r\n },\r\n \"dayNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"weekendDayNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"eveningNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"nightNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"sleepNML\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"dayRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"weekendDayRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"eveningRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"nightRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"sleepRBL\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"MinorWorksImpactClassDefinitionDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"assessmentPeriod\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriod\"\r\n },\r\n \"complianceRating\": {\r\n \"$ref\": \"#/components/schemas/ComplianceRating\"\r\n },\r\n \"classLabelShortName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"classLabelLongName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"exceedLowerBound\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"exceedUpperBound\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"hexColour\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"rangeDescription\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"GroundborneEquipmentDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"displayName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"modelingDataState\": {\r\n \"$ref\": \"#/components/schemas/ModelingDataState\"\r\n },\r\n \"hasModelingResultData\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"groundBorneEquipmentUsages\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundBorneEquipmentUsageVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"ExportMapCommandDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"assessmentName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"sourceLocations\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/SourceLocationDto\"\r\n }\r\n },\r\n \"movingPointSourceRoute\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"movingPointSourceRouteColour\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"markers\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/MarkerDto\"\r\n }\r\n },\r\n \"layers\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UrlDto\"\r\n }\r\n },\r\n \"overlays\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UrlDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"SourceLocationDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"objectId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"colour\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"opacity\": {\r\n \"type\": \"number\",\r\n \"format\": \"decimal\"\r\n },\r\n \"coordinates\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n },\r\n \"MarkerDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"colour\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"objectId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"title\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"coordinates\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"isHeritage\": {\r\n \"type\": \"boolean\"\r\n }\r\n }\r\n },\r\n \"UrlDto\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"url\": {\r\n \"type\": \"string\",\r\n \"format\": \"uri\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"EquipmentCategoryVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"UpsertEquipmentCategoriesCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"equipmentCategories\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/EquipmentCategoryVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"EquipmentSummaryVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"soundPowerLevel\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"lMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"defaultUsagePercentage\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"penalty\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"safeWorkingDistanceBritishStandard\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"safeWorkingDistanceDinResi\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"safeWorkingDistanceDinHeritage\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"safeWorkingDistanceHumanComfort\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"peakParticleVelocityReference\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"referenceDistance\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"attenuationCoefficient\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"categoryId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"category\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"vibrationStandard\": {\r\n \"$ref\": \"#/components/schemas/VibrationStandardType\"\r\n }\r\n }\r\n },\r\n \"UpsertEquipmentCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"equipmentId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"categoryId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"soundPowerLevel\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"lMax\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"defaultUsagePercentage\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"penalty\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"safeWorkingDistanceBritishStandard\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"safeWorkingDistanceDinResi\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"safeWorkingDistanceDinHeritage\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"safeWorkingDistanceHumanComfort\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"peakParticleVelocityReference\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"referenceDistance\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n },\r\n \"attenuationCoefficient\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"GroundBorneEquipmentVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"vibrationFactor\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"vibrationExponent\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"noiseLevelFactor\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n },\r\n \"noiseLevelExponent\": {\r\n \"type\": \"number\",\r\n \"format\": \"double\"\r\n }\r\n }\r\n },\r\n \"UpsertGroundBorneEquipmentCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"groundBorneEquipments\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundBorneEquipmentVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"UpsertGroundBorneProjectEquipmentCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"groundBorneEquipmentUsages\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundBorneEquipmentUsageVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"ProjectSummaryVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"friendlyId\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"displayName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"owningOrganizationName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"owningOrganizationLogo\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"progressReportTemplateUri\": {\r\n \"type\": \"string\",\r\n \"format\": \"uri\",\r\n \"nullable\": true\r\n },\r\n \"progressReportTemplateUploaded\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"complianceTableReportTemplateUri\": {\r\n \"type\": \"string\",\r\n \"format\": \"uri\",\r\n \"nullable\": true\r\n },\r\n \"complianceTableReportTemplateUploaded\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"modelingDataState\": {\r\n \"$ref\": \"#/components/schemas/ModelingDataState\"\r\n },\r\n \"vibrationStandard\": {\r\n \"$ref\": \"#/components/schemas/VibrationStandardType\"\r\n },\r\n \"vibrationMeasurementType\": {\r\n \"$ref\": \"#/components/schemas/VibrationMeasurementType\"\r\n },\r\n \"modelingDataErrors\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"modelingResultsDataErrors\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"modelingResultsDataErrorLines\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"modelingDataErrorLines\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"modelingDataInformation\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"modelingDataInformationLines\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"hasModelingResultData\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"receiversUploaded\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"sourceLocationsUploaded\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"projectType\": {\r\n \"$ref\": \"#/components/schemas/ProjectType\"\r\n },\r\n \"showMultiFloorResults\": {\r\n \"type\": \"boolean\"\r\n },\r\n \"additionalMapLayers\": {\r\n \"type\": \"object\",\r\n \"nullable\": true,\r\n \"additionalProperties\": {\r\n \"type\": \"string\",\r\n \"format\": \"uri\"\r\n }\r\n },\r\n \"groundOverlays\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundOverlayVM\"\r\n }\r\n },\r\n \"approvalPipeline\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectApproverVM\"\r\n }\r\n },\r\n \"impactClassDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ImpactClassDefinitionVM\"\r\n }\r\n },\r\n \"vibrationImpactDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/VibrationImpactDefinitionVM\"\r\n }\r\n },\r\n \"defaultNMLs\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/DefaultNMLVM\"\r\n }\r\n },\r\n \"groundBorneEquipmentUsages\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundBorneEquipmentUsageVM\"\r\n }\r\n },\r\n \"assessmentPeriodDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/AssessmentPeriodDefinitionVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"ModelingDataFileType\": {\r\n \"type\": \"integer\",\r\n \"description\": \"\",\r\n \"x-enumNames\": [\r\n \"ModelResults\",\r\n \"Receivers\",\r\n \"SourceLocations\"\r\n ],\r\n \"enum\": [\r\n 0,\r\n 1,\r\n 2\r\n ]\r\n },\r\n \"UpdateGroundBorneEquipmentUsagesCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"groundBorneEquipmentUsages\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GroundBorneEquipmentUsageVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"UpsertMinorWorksReportCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"reportName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"defaults\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/MinorWorksDefaultNMLDto\"\r\n }\r\n },\r\n \"impactClassDefinitions\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/MinorWorksImpactClassDefinitionDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"UserManualsVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"userManuals\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/UserManualVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"UserManualVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"order\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"title\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"description\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"videoUrl\": {\r\n \"type\": \"string\",\r\n \"format\": \"uri\",\r\n \"nullable\": true\r\n }\r\n }\r\n },\r\n \"GlobalRolesVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"roles\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/GlobalRoleVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"GlobalRoleVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"fullName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"email\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"roleType\": {\r\n \"$ref\": \"#/components/schemas/GlobalRoleType\"\r\n }\r\n }\r\n },\r\n \"ProjectRolesVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"roles\": {\r\n \"type\": \"array\",\r\n \"nullable\": true,\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/ProjectRoleVM\"\r\n }\r\n }\r\n }\r\n },\r\n \"ProjectRoleVM\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"userId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"fullName\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"email\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"roleType\": {\r\n \"$ref\": \"#/components/schemas/ProjectRoleType\"\r\n }\r\n }\r\n },\r\n \"UpsertGlobalRoleCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"email\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"roleType\": {\r\n \"$ref\": \"#/components/schemas/GlobalRoleType\"\r\n }\r\n }\r\n },\r\n \"UpsertProjectRoleCommand\": {\r\n \"type\": \"object\",\r\n \"additionalProperties\": false,\r\n \"properties\": {\r\n \"projectId\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"email\": {\r\n \"type\": \"string\",\r\n \"nullable\": true\r\n },\r\n \"roleType\": {\r\n \"$ref\": \"#/components/schemas/ProjectRoleType\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}" +} \ No newline at end of file diff --git a/content/docs/api-documentation/overview.mdx b/content/docs/api-documentation/overview.mdx new file mode 100644 index 0000000..c80e3c8 --- /dev/null +++ b/content/docs/api-documentation/overview.mdx @@ -0,0 +1,8 @@ +--- +title: Overview +last_edited: '2025-07-15T07:33:40.077Z' +--- + +TinaDocs supports documenting your API directly from an OpenAPI .json specification (OAS). This allows you to generate structured, editable documentation blocks that reflect real API endpoints—without manually copying and pasting details. + +This tab has been used to provide some miscellaneous example documentation, based on an OAS. diff --git a/content/docs/api-documentation/pet/get-pet-findbystatus.mdx b/content/docs/api-documentation/pet/get-pet-findbystatus.mdx new file mode 100644 index 0000000..94d9bca --- /dev/null +++ b/content/docs/api-documentation/pet/get-pet-findbystatus.mdx @@ -0,0 +1,23 @@ +--- +description: Multiple status values can be provided with comma separated strings +seo: + title: Finds Pets by Status + description: Multiple status values can be provided with comma separated strings +title: Finds Pets by Status +last_edited: '2025-07-15T07:40:42.267Z' +auto_generated: true +--- + +Multiple status values can be provided with comma separated strings + +## Endpoint Details + +**Method:** `GET` + + + +**Path:** `/pet/findByStatus` + +## API Reference + + diff --git a/content/docs/api-documentation/pet/get-pet-findbytags.mdx b/content/docs/api-documentation/pet/get-pet-findbytags.mdx new file mode 100644 index 0000000..fa689bb --- /dev/null +++ b/content/docs/api-documentation/pet/get-pet-findbytags.mdx @@ -0,0 +1,27 @@ +--- +description: >- + Multiple tags can be provided with comma separated strings. Use tag1, tag2, + tag3 for testing. +seo: + title: Finds Pets by Tags + description: >- + Multiple tags can be provided with comma separated strings. Use tag1, tag2, + tag3 for testing. +title: Finds Pets by Tags +last_edited: '2025-07-15T07:40:41.760Z' +auto_generated: true +--- + +Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + +## Endpoint Details + +**Method:** `GET` + + + +**Path:** `/pet/findByTags` + +## API Reference + + diff --git a/content/docs/api-documentation/pet/post-pet-petid-uploadimage.mdx b/content/docs/api-documentation/pet/post-pet-petid-uploadimage.mdx new file mode 100644 index 0000000..a9500b6 --- /dev/null +++ b/content/docs/api-documentation/pet/post-pet-petid-uploadimage.mdx @@ -0,0 +1,21 @@ +--- +description: 'API endpoint for POST /pet/{petId}/uploadImage' +seo: + title: Uploads an Image + description: 'API endpoint for POST /pet/{petId}/uploadImage' +title: Uploads an Image +last_edited: '2025-07-15T07:40:41.566Z' +auto_generated: true +--- + +## Endpoint Details + +**Method:** `POST` + + + +**Path:** `/pet/{petId}/uploadImage` + +## API Reference + + diff --git a/content/docs/api-documentation/pet/post-pet-petid.mdx b/content/docs/api-documentation/pet/post-pet-petid.mdx new file mode 100644 index 0000000..4f5a678 --- /dev/null +++ b/content/docs/api-documentation/pet/post-pet-petid.mdx @@ -0,0 +1,21 @@ +--- +description: 'API endpoint for POST /pet/{petId}' +seo: + title: Updates a Pet in the Store with Form Data + description: 'API endpoint for POST /pet/{petId}' +title: Updates a Pet in the Store with Form Data +last_edited: '2025-07-15T07:40:41.851Z' +auto_generated: true +--- + +## Endpoint Details + +**Method:** `POST` + + + +**Path:** `/pet/{petId}` + +## API Reference + + diff --git a/content/docs/api-documentation/pet/post-pet.mdx b/content/docs/api-documentation/pet/post-pet.mdx new file mode 100644 index 0000000..c21e44d --- /dev/null +++ b/content/docs/api-documentation/pet/post-pet.mdx @@ -0,0 +1,21 @@ +--- +description: API endpoint for POST /pet +seo: + title: Add a New Pet to the Store + description: API endpoint for POST /pet +title: Add a New Pet to the Store +last_edited: '2025-07-15T07:40:42.182Z' +auto_generated: true +--- + +## Endpoint Details + +**Method:** `POST` + + + +**Path:** `/pet` + +## API Reference + + diff --git a/content/docs/api-documentation/pet/put-pet.mdx b/content/docs/api-documentation/pet/put-pet.mdx new file mode 100644 index 0000000..6d8abac --- /dev/null +++ b/content/docs/api-documentation/pet/put-pet.mdx @@ -0,0 +1,21 @@ +--- +description: API endpoint for PUT /pet +seo: + title: Update an Existing Pet + description: API endpoint for PUT /pet +title: Update an Existing Pet +last_edited: '2025-07-15T07:40:41.710Z' +auto_generated: true +--- + +## Endpoint Details + +**Method:** `PUT` + + + +**Path:** `/pet` + +## API Reference + + diff --git a/content/docs/api-documentation/user/get-user-logout.mdx b/content/docs/api-documentation/user/get-user-logout.mdx new file mode 100644 index 0000000..b191ab7 --- /dev/null +++ b/content/docs/api-documentation/user/get-user-logout.mdx @@ -0,0 +1,20 @@ +--- +seo: + title: Logs Out Current Logged in User Session + description: API endpoint for GET /user/logout +title: Logs Out Current Logged in User Session +last_edited: '2025-07-15T07:40:41.523Z' +auto_generated: true +--- + +## Endpoint Details + +**Method:** `GET` + + + +**Path:** `/user/logout` + +## API Reference + + diff --git a/content/docs/api-documentation/user/post-user.mdx b/content/docs/api-documentation/user/post-user.mdx new file mode 100644 index 0000000..254c7a5 --- /dev/null +++ b/content/docs/api-documentation/user/post-user.mdx @@ -0,0 +1,22 @@ +--- +seo: + title: Create User + description: This can only be done by the logged in user. +title: Create User +last_edited: '2025-07-15T07:40:41.468Z' +auto_generated: true +--- + +This can only be done by the logged in user. + +## Endpoint Details + +**Method:** `POST` + + + +**Path:** `/user` + +## API Reference + + diff --git a/content/docs/examples/internal-document-example.mdx b/content/docs/examples/internal-document-example.mdx new file mode 100644 index 0000000..29d738a --- /dev/null +++ b/content/docs/examples/internal-document-example.mdx @@ -0,0 +1,128 @@ +--- +seo: + title: Q1 Campaign Launch - Marketing Team + description: Internal guide for launching our new product features in Q1 +title: Internal Document Example +last_edited: '2025-07-15T07:37:45.447Z' +--- + + + 🤖 This example is AI generated, any references to real places or people are incidental. + } + variant="warning" +/> + +**Marketing Team Internal Documentation** + +This guide outlines the complete campaign strategy, timeline, and deliverables for our Q1 feature launch. + + + **Campaign Deadline**: All assets must be finalized by **March 15th** for the March 20th launch. + } + variant="warning" +/> + +## Campaign Overview + +**Product**: Enhanced Analytics Dashboard\ +**Target Audience**: Enterprise customers, data analysts, product managers\ +**Launch Date**: March 20, 2025\ +**Campaign Duration**: 8 weeks (Pre-launch + 6 weeks active) + +## Key Messaging & Positioning + +### Primary Message + +"Transform raw data into actionable insights with our most powerful analytics dashboard yet." + +### Supporting Points + +* 3x faster query performance +* Real-time collaboration features +* Advanced visualization tools +* Enterprise-grade security + + + All messaging must align with our established brand voice: **Professional, innovative, and customer-focused**. Reference the brand guidelines doc for tone specifics. + } + variant="info" +/> + +## Campaign Timeline & Deliverables + +| Week | Phase | Key Deliverables | Owner | Status | +| -------- | ------------- | ----------------------------------------- | ------------ | -------------- | +| Week 1-2 | Pre-Launch | Blog posts, case studies, email sequences | Content Team | ✅ Complete | +| Week 3 | Soft Launch | Partner announcements, beta user outreach | Partnerships | 🟡 In Progress | +| Week 4 | Launch Week | Press release, social campaign, webinar | PR & Social | ⏳ Pending | +| Week 5-6 | Amplification | Customer stories, retargeting ads | Growth Team | ⏳ Pending | +| Week 7-8 | Optimization | A/B testing, performance analysis | Analytics | ⏳ Pending | + +## Content Calendar + +### Blog Content + +* **March 5**: "The Future of Data Analytics" (Thought Leadership) +* **March 12**: "Customer Success Story: TechCorp's 200% ROI" (Case Study) +* **March 20**: "Introducing Enhanced Analytics Dashboard" (Product Launch) +* **March 27**: "5 Ways to Maximize Your Analytics ROI" (How-To Guide) + +### Social Media + +* **LinkedIn**: B2B focused, 3 posts/week +* **Twitter**: Industry news & quick tips, daily posts +* **YouTube**: Product demo video, launch day + + + Remember to use campaign hashtag **#DataDrivenDecisions** consistently across all channels. Pre-schedule posts using Hootsuite. + } + variant="success" +/> + +## Budget Allocation + +| Channel | Budget | Expected ROI | Notes | +| ----------------- | ----------- | ------------ | --------------------------- | +| Paid Social | $15,000 | 4:1 | Focus on LinkedIn & Twitter | +| Google Ads | $25,000 | 3.5:1 | Target high-intent keywords | +| Content Marketing | $8,000 | 6:1 | Video production & design | +| Events/Webinars | $12,000 | 5:1 | Lead generation focus | +| **Total** | **$60,000** | **4.2:1** | Q1 campaign budget | + +## Success Metrics + +**Primary KPIs**: + +* 500 new trial sign-ups (target) +* 150 demo requests +* $200K pipeline generated +* 25% increase in organic traffic + +**Secondary Metrics**: + +* Email open rates >22% +* Social engagement +40% +* Webinar attendance >300 +* Press coverage in 5+ publications + + + Track all metrics in our **Campaign Dashboard**. Weekly check-ins every Tuesday at 10 AM to review performance and adjust tactics. + } + variant="idea" +/> + +## Emergency Contacts & Escalation + +**Campaign Manager**: Sarah Kim (@sarah-kim, ext. 2845)\ +**Creative Director**: Mike Chen (@mike-creative, ext. 2901)\ +**PR Lead**: Jessica Torres (@jess-pr, ext. 2756)\ +**Analytics**: David Park (@david-analytics, ext. 2612) + +*** + +*Document Owner: Marketing Team | Next Review: March 1, 2025* diff --git a/content/docs/examples/library-api-example.mdx b/content/docs/examples/library-api-example.mdx new file mode 100644 index 0000000..edcd70a --- /dev/null +++ b/content/docs/examples/library-api-example.mdx @@ -0,0 +1,211 @@ +--- +seo: + title: TinaDocs – Type Definition +title: Library (API) Example +last_edited: '2025-07-15T07:43:31.405Z' +tocIsHidden: false +--- + +> This example content is a random page taken from the [PlateJS documentation](https://platejs.org/docs/api/slate/location-ref). + +Location references are objects that keep specific locations (paths, points, or ranges) in a document synced over time as new operations are applied to the editor. + +You can access their `current` property at any time for the up-to-date location value. You can access their `current` property at any time for the up-to-date location value. + +## Types + +*** + +#### `PathRef` + +Path reference objects keep a specific path in a document synced over time. Created using `editor.api.pathRef`. + + Path | null" + } + ]} +/> + +#### `PointRef` + +Point reference objects keep a specific point in a document synced over time. Created using `editor.api.pointRef`. + + Point | null" + } + ]} +/> + +#### `RangeRef` + +Range reference objects keep a specific range in a document synced over time. Created using `editor.api.rangeRef`. + + TRange | null" + } + ]} +/> + +Example usage of a RangeRef: + +```typescript +const selectionRef = editor.api.rangeRef(editor.selection, { + affinity: 'inward', +}) +// Operations that might change the selection +Transforms.unwrapNodes(editor) +// Restore the selection using the ref +Transforms.select(editor, selectionRef.unref()) +``` + +## `PathRefApi` + +*** + +#### `transform` + +Transform a path reference by an operation. + + + +## `PointRefApi` + +*** + +#### `transform` + +Transform a point reference by an operation. + + + +## `RangeRefApi` + +*** + +#### `transform` + +Transform a range reference by an operation. + + diff --git a/content/docs/examples/pet-store-all-routes.mdx b/content/docs/examples/pet-store-all-routes.mdx new file mode 100644 index 0000000..6ec6597 --- /dev/null +++ b/content/docs/examples/pet-store-all-routes.mdx @@ -0,0 +1,6 @@ +--- +title: Pet Store – All Routes +last_edited: '2025-07-15T07:34:30.319Z' +--- + + diff --git a/content/docs/going-live/deploying-your-docs.mdx b/content/docs/going-live/deploying-your-docs.mdx new file mode 100644 index 0000000..e7d3966 --- /dev/null +++ b/content/docs/going-live/deploying-your-docs.mdx @@ -0,0 +1,118 @@ +--- +title: Deploying Your Docs +last_edited: '2025-10-27T04:14:52.046Z' +auto_generated: false +--- + +Once you've set up your TinaDocs site locally and configured TinaCloud, the next step is deploying it to a hosting provider. This guide will walk you through the process, with a focus on deploying to Vercel. + +### Prerequisites + +Before deploying, ensure you have: + +1. A TinaCloud project set up (see [Setting Up TinaCloud](/docs/tinacloud/overview)) +2. Your repository fully configured with TinaCMS +3. Environment variables for `NEXT_PUBLIC_TINA_CLIENT_ID` and `TINA_TOKEN` + +### Setting Up Environment Variables + +For your deployment to work correctly, you must set the following environment variables on your hosting provider: + +```javascript +NEXT_PUBLIC_TINA_CLIENT_ID= +TINA_TOKEN= +``` + +You can find these values in your TinaCloud dashboard: + +* Client ID: In the "Overview" tab of your project +* Token: In the "Tokens" tab of your project + +### Configuring Your Build Command + +To ensure the TinaCMS admin interface is built alongside your site, your build command should run `tinacms build` before your site's build command: + +```bash +tinacms build && next build +``` + +This creates the admin interface at `/admin/index.html` in your final build. + +### Deploying to Vercel (Recommended) + +Vercel is the recommended hosting provider for TinaDocs sites due to its seamless integration with Next.js. + +#### Step 1: Connect Your Repository + +1. Log in to [Vercel](https://vercel.com) +2. Click "Add New Project" +3. Connect your GitHub repository +4. Select the repository containing your TinaDocs site + +#### Step 2: Configure Build Settings + +In the configuration screen: + +1. Leave the framework preset as "Next.js" +2. Modify the build command if needed: + * If your package.json has a build script like `"build": "tinacms build && next build"`, you can leave the default setting + * Otherwise, set the build command to: `tinacms build && next build` + +![Vercel Build Settings](/img/vercel-build-settings.png) + +#### Step 3: Set Environment Variables + +Add your TinaCMS environment variables: + +1. Expand the "Environment Variables" section +2. Add the following variables: + * `NEXT_PUBLIC_TINA_CLIENT_ID` = Your TinaCloud Client ID + * `TINA_TOKEN` = Your TinaCloud Read-Only Token +3. Add any other environment variables your project requires + +#### Step 4: Deploy + +Click "Deploy" and Vercel will build and deploy your TinaDocs site. + +#### Step 5: Configure Branch Settings (Optional) + +For production branch settings: + +1. Go to your project settings in Vercel +2. Navigate to "Git" section +3. Configure your production branch (typically "main") + +### Other Deployment Options + +#### Netlify + +1. Connect your GitHub repository to Netlify +2. Set the build command to: `tinacms build && next build` +3. Set the publish directory to: `out` (for static export) or `.next` (for server rendering) +4. Add the TinaCMS environment variables in the Netlify dashboard + +#### GitHub Pages + +1. Create a GitHub workflow file (`.github/workflows/deploy.yml`) +2. Configure the workflow to set environment variables +3. Use the `tinacms build && next build` command +4. Set up GitHub Pages to deploy from your build output + +### Testing Your Deployment + +After deploying, verify that: + +1. Your site is accessible at your domain +2. The TinaCMS admin interface works at `/admin/index.html` +3. You can log in and make edits that are saved to your repository + +### Troubleshooting + +If you encounter issues: + +* **Admin page not found**: Ensure your build command includes `tinacms build` +* **Authentication failures**: Check that your environment variables are correctly set +* **Content not updating**: Verify your TinaCloud project has the correct site URL configured +* **Branch issues**: Ensure your branch configuration in `tina/config.js` is correct + +For more details, visit the [official TinaCMS deployment documentation](/docs/tinacloud/deployment-options/vercel). diff --git a/content/docs/going-live/tinacloud/configuring-tinacloud.mdx b/content/docs/going-live/tinacloud/configuring-tinacloud.mdx new file mode 100644 index 0000000..9fde3ca --- /dev/null +++ b/content/docs/going-live/tinacloud/configuring-tinacloud.mdx @@ -0,0 +1,80 @@ +--- +title: Configuring TinaCloud +last_edited: '2025-08-07T23:37:23.124Z' +auto_generated: false +--- + + + Rather watch a video? Check out our video below. + } +/> + + + +TinaCloud connects your website to GitHub via an indexed datalayer, allowing editors to make changes directly through your site's interface. + +You can also set this up yourself with custom database, git and auth logic. + +**If using GitHub, we recommend going with TinaCloud**. To read more about TinaCloud, see the [TinaCloud documentation](https://tina.io/docs/tina-cloud/introduction). + +## Create Your TinaCloud account + +1. Go to [https://app.tina.io/signin](https://app.tina.io/signin). +2. Click "Authenticate with GitHub". +3. Sign in with your GitHub account. +4. Authorise Tina. + +You should now be redirected to the TinaCloud dashboard. + +## Creating a Project in TinaCloud + +1. **Authorize GitHub**: When setting up a project, you'll need to authenticate with GitHub. A popup window will ask for permission to give Tina.io access to your GitHub repositories. +2. **Choose Your Repository**: After GitHub authorization, select the repository that contains your site's content. If you don't see your repository in the list, you may need to reconfigure your Tina.io permissions in GitHub. +3. **Configure the Project**: Set up the following properties: + * **Project Name**: This appears when users log in to the project + * **Site URL(s)**: Enter both your local URL (e.g., `http://localhost:3000`) and production URL (e.g., `https://yourdomain.com`) + * **Glob Patterns**: If you're using dynamic preview deployments, you can enter patterns like `https://-*-.vercel.app` +4. **Sync Media**: Click on the 'Media' tab and then 'Sync Media'. This will import your media files from your GitHub repository into Tina's Media Manager so they're available in the visual editor. + +## Connecting Your Project to the Editor + +Once your project is created, you'll need to connect it to your site: + +1. **Run the Backend Init Command**: + +```bash + npx @tinacms/cli init backend +``` + +This command will: + +* Prompt for your Client ID (found in the "Overview" tab of your project) +* Prompt for a Read Only Token (found in the "Tokens" tab) +* Populate your `.env` file with the necessary environment variables + +1. **Update Your Configuration**: Ensure your `tina/config.js` file correctly references the environment variables: + +```javascript + export default defineConfig({ + token: process.env.TINA_TOKEN, + clientId: process.env.NEXT_PUBLIC_TINA_CLIENT_ID, + branch: process.env.NEXT_PUBLIC_TINA_BRANCH || '', + // other config options... + }) +``` + +> **Important**: These environment variables must also be set in your deployment workflow. See our [deployment guide](/docs/set-up/deploying-your-docs) for more information. + +By following these steps, your TinaCloud project will be connected to your repository, enabling content editing directly through your site's interface. + +## Using the Editor with TinaCloud + +Edits made via the TinaCloud (as opposed to the local) editor are automatically pushed to your Git repository. + +Access the local editors by running `pnpm run dev` in your terminal and going to `http://localhost:3000/admin/index.html`. + +Access the TinaCloud editor by going to `https:///admin/index.html` on your deployed site. + +You can also access the TinaCloud editor by running `pnpm run build`, then `pnpm run start`, and then going to `http://localhost:3000/admin/index.html`. diff --git a/content/docs/going-live/tinacloud/custom-datalayer.mdx b/content/docs/going-live/tinacloud/custom-datalayer.mdx new file mode 100644 index 0000000..0475bf2 --- /dev/null +++ b/content/docs/going-live/tinacloud/custom-datalayer.mdx @@ -0,0 +1,54 @@ +--- +title: Custom Datalayer +last_edited: '2025-07-15T06:59:09.720Z' +--- + +Setting up your own datalayer gives you complete control over how TinaCMS interacts with your content. This guide provides an overview of the key components and concepts. + +## Core Components + +When self-hosting the TinaCMS datalayer, you'll need to configure four main components: + +### 1. Backend Host + +The backend host is where your datalayer API will run. Common options include: + +* Next.js API routes +* Vercel Serverless Functions +* Netlify Functions + +### 2. Database Adapter + +The database adapter determines where your content index is stored. Options include: + +* MongoDB +* Vercel KV +* Custom database solutions + +Learn more in the [official Database Adapter documentation](https://tina.io/docs/reference/self-hosted/database-adapter/overview). + +### 3. Git Provider + +The Git provider manages how your content files are stored and retrieved. Options include: + +* GitHub +* Custom Git providers + +Learn more in the [official Git Provider documentation](https://tina.io/docs/reference/self-hosted/git-provider/overview). + +### 4. Auth Provider + +The auth provider handles user authentication for your CMS. Options include: + +* Auth.js (formerly NextAuth.js) +* Clerk +* TinaCloud auth +* Custom auth solutions + +Learn more in the [official Auth Provider documentation](https://tina.io/docs/reference/self-hosted/auth-provider/overview). + +## Getting Started + +For complete step-by-step instructions on configuring your own datalayer, we recommend following the [official TinaCMS Self-Hosting documentation](https://tina.io/docs/self-hosted/overview). + +The official documentation provides detailed examples, code snippets, and best practices for setting up each component of your custom datalayer. diff --git a/content/docs/going-live/tinacloud/what-is-a-datalayer.mdx b/content/docs/going-live/tinacloud/what-is-a-datalayer.mdx new file mode 100644 index 0000000..dc7df88 --- /dev/null +++ b/content/docs/going-live/tinacloud/what-is-a-datalayer.mdx @@ -0,0 +1,59 @@ +--- +title: What is a Datalayer? +last_edited: '2025-10-27T03:00:50.463Z' +auto_generated: false +--- + +The Datalayer is a critical component of TinaCMS that acts as the bridge between your content files and the TinaCMS editing interface. It provides: + +1. Content Indexing: Indexes your content files to enable fast queries and searching +2. GraphQL API: Generates a GraphQL API based on your content model +3. Authentication: Manages user authentication for the editing interface +4. Storage: Handles content storage and retrieval from your repository + +## TinaCloud vs Self-Hosting + +TinaCMS offers two approaches for implementing the datalayer: + +### TinaCloud (recommended) + +TinaCloud is a managed service that handles the Datalayer for you, providing: + +* Automatic content indexing +* User authentication and management +* Seamless GitHub integration +* No need to maintain your own infrastructure + +This is ideal for most projects and is the quickest way to get started. + +A free option also exists for small-scale projects. + +### Self-Hosted + +The self-hosted option allows you to run the datalayer on your own infrastructure, giving you: + +* Complete control over your data +* Custom authentication providers +* Support for custom Git providers +* Integration with your own database + +### When to choose Self-Hosted + +Consider self-hosting the Datalayer when: + +* You need to use a Git provider other than GitHub +* You want to use a custom database for content indexing +* You need a custom authentication system +* You have specific compliance or security requirements +* You have the resources to manage and work with custom hosting infrastructure. + +#### Components of a Self-Hosted Datalayer + +To self-host the Datalayer, you'll need to configure: + +1. Backend Host: A server to run the Datalayer (e.g., Next.js, Vercel Functions) +2. Database Adapter: A database to store and index content (e.g., MongoDB, Vercel KV) +3. Git Provider: A service to store and manage content files (e.g., GitHub, custom Git provider) +4. Auth Provider: A system to authenticate users (e.g., Auth.js, Clerk) + +For detailed instructions on setting up a self-hosted Datalayer, see our [Self-Hosting Guide](https://tina.io/docs/self-hosted/overview). diff --git a/content/docs/index.mdx b/content/docs/index.mdx new file mode 100644 index 0000000..6abe04e --- /dev/null +++ b/content/docs/index.mdx @@ -0,0 +1,75 @@ +--- +title: Welcome to TinaDocs +last_edited: '2025-08-11T08:56:52.364Z' +auto_generated: false +tocIsHidden: true +--- + +Just deploy and start writing. + +TinaDocs is an open source documentation solution built off TinaCMS. + +Built for both developers and non-developers. + +> No proprietary data store, your content lives entirely in your GitHub repository—versioned, portable, and fully under your control. + +## 🧹 Start Fresh (Optional) + +Want to start with a clean slate? This template includes example documentation that you can remove with a single command: + +```bash +pnpm run cleanup +``` + + + **IMPORTANT WARNING:** + + **This command will PERMANENTLY DELETE all documentation content and only keep this index page.** + + * ❌ **If you've already made changes**, running cleanup will DELETE your work + * ✅ **Run cleanup FIRST** if you want a clean slate, then make your changes + * ✅ **Explore examples FIRST** if you want to learn TinaDocs features before deciding + + **This action cannot be undone unless you have committed your changes to git.** + } + variant="warning" +/> + +*** + +## 📚 Explore the Examples + +Or browse through the example documentation to learn about TinaDocs features: + + diff --git a/content/docs/introduction/showcase.mdx b/content/docs/introduction/showcase.mdx new file mode 100644 index 0000000..9770e0a --- /dev/null +++ b/content/docs/introduction/showcase.mdx @@ -0,0 +1,61 @@ +--- +id: introduction +seo: + title: "Take Back your Docs \U0001F680" + description: Example Description +title: Showcase +last_edited: '2025-07-15T06:54:30.090Z' +tocIsHidden: false +--- + +Most documentation kits lock you into certain style patterns and rigid workflows. **This starter package changes that.** + +As an open source project using a headless CMS, it gives you full control over both your content and your UI—no templates you can’t tweak or structures you’re stuck with. + +## Built-in Themes + +With 6 bespoke themes and an elegant design system, docs are a pleasure to read and write. + +![](/tinadocs-stack.png "Themed to perfection") + +## Use Cases + +Out of the box, TinaDocs has all the tools to suit several common docs needs. + +Built with React and Next.js, extend as needed with code. + + diff --git a/content/docs/tinadocs-features/code-components.mdx b/content/docs/tinadocs-features/code-components.mdx new file mode 100644 index 0000000..afd0391 --- /dev/null +++ b/content/docs/tinadocs-features/code-components.mdx @@ -0,0 +1,253 @@ +--- +title: Code Components +last_edited: '2025-07-30T02:30:04.636Z' +auto_generated: false +--- + +Several components have been implemented to help out with software documentation. + +## Code Blocks + +For multiline code samples, use triple backticks. You can also specify which language is used in the fenced code block for associated code highlighting. + +```javascript +js function greet(name) { + return `Hello, ${name}!` +} +``` + +### Syntax Highlighting + +TinaDocs uses [Shiki](https://shiki.style/) to power code block rendering, because of this you are able to also use [Shiki's Transformer Notation](https://shiki.style/guide/transformers) for special highlighting. + +```javascript +console.log('This is a highlighted block') // [!code highlight] + +It uses "[!code highlight]" in a comment after the code +``` + +### Diff Highlighting + +```javascript +console.log('This is a negative diff') // [!code --] +console.log('This is a positive diff') // [!code ++] + +It uses "[!code --]" or "[!code ++]" in a comment after the code +``` + +### Focused Highlighting + +```javascript +console.log('Junk Code'); +console.log('Focused Code'); // [!code focus] +console.log('More hidden code'); + +It uses "[!code focus]" in a comment after the code +``` + +## Tabbed Code Blocks + +Tabbed code blocks let you present multiple language variants or configurations side-by-side—ideal for showing equivalent code in JavaScript, TypeScript, Bash, or specific queries and responses. + +This improves readability and UX for polyglot dev environments. + + + +\n������

Count:�{count}

\n�������setCount(count�+�1)}>Increment\n����\n��);\n}\n\nexport�default�Counter;", + language: "javascript" + }, + { + name: "Vue", + content: + "