diff --git a/backend/api/sample.py b/backend/api/sample.py new file mode 100644 index 000000000..21f8968f0 --- /dev/null +++ b/backend/api/sample.py @@ -0,0 +1,37 @@ +"""Sample API to show off OpenAPI integration""" + +from fastapi import APIRouter +from ..models.sample import ( + GetSampleItemsResponse, + GetSampleItemsResponse_Item, + GetSampleItemResponse, + CreateSampleItemRequest, + CreateSampleItemResponse, +) + +api = APIRouter(prefix="/api/sample") +tag = "Sample Endpoint" +openapi_tags = { + "name": tag, + "description": "Sample API endpoint for showing off OpenAPI integration.", +} + + +@api.get("", tags=[tag]) +def get_all() -> GetSampleItemsResponse: + return GetSampleItemsResponse( + items=[ + GetSampleItemsResponse_Item(id=1, name="One", price=99.99), + GetSampleItemsResponse_Item(id=2, name="Two", price=199.99), + ] + ) + + +@api.get("/{id}", tags=[tag]) +def get(id: int) -> GetSampleItemResponse: + return GetSampleItemResponse(id=1, name="One", price=99.99) + + +@api.post("", tags=[tag]) +def create(_: CreateSampleItemRequest) -> CreateSampleItemResponse: + return CreateSampleItemResponse(id=1) diff --git a/backend/main.py b/backend/main.py index 8fc7861a2..3fecc622a 100644 --- a/backend/main.py +++ b/backend/main.py @@ -21,6 +21,7 @@ article, signage, websocket, + sample, ) from .api.coworking import status, reservation, ambassador, operating_hours from .api.academics import section_member, term, course, section, my_courses, hiring @@ -71,6 +72,7 @@ admin_facts.openapi_tags, article.openapi_tags, signage.openapi_tags, + sample.openapi_tags, ], ) @@ -105,6 +107,7 @@ article, signage, websocket, + sample, ] for feature_api in feature_apis: diff --git a/backend/models/sample.py b/backend/models/sample.py new file mode 100644 index 000000000..f0f14cf66 --- /dev/null +++ b/backend/models/sample.py @@ -0,0 +1,28 @@ +"""API validation models for the sample endpoint""" + +from pydantic import BaseModel + + +class GetSampleItemsResponse_Item(BaseModel): + id: int + name: str + price: float + + +class GetSampleItemsResponse(BaseModel): + items: list[GetSampleItemsResponse_Item] + + +class GetSampleItemResponse(BaseModel): + id: int + name: str + price: float + + +class CreateSampleItemRequest(BaseModel): + name: str + starting_price: float + + +class CreateSampleItemResponse(BaseModel): + id: int diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d95157266..c76c4bdd7 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -20,6 +20,7 @@ "@angular/router": "~18.2.11", "@angular/youtube-player": "~18.2.11", "@auth0/angular-jwt": "~5.2.0", + "@tanstack/angular-query-experimental": "^5.85.3", "dompurify": "~3.1.7", "file-saver": "~2.0.5", "marked": "~14.0.0", @@ -51,6 +52,7 @@ "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", + "openapi-typescript": "^7.9.1", "prettier": "~3.3.3", "prettier-eslint": "~16.3.0", "typescript": "~5.5.4" @@ -786,14 +788,15 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -1162,9 +1165,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -1210,22 +1213,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/parser": { "version": "7.25.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", @@ -4325,6 +4312,72 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@redocly/ajv": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.3.tgz", + "integrity": "sha512-4P3iZse91TkBiY+Dx5DUgxQ9GXkVJf++cmI0MOyLDxV9b5MUBI4II6ES8zA5JCbO72nKAJxWrw4PUPW+YP3ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js-replace": "^1.0.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/config": { + "version": "0.22.2", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.2.tgz", + "integrity": "sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/openapi-core": { + "version": "1.34.5", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.5.tgz", + "integrity": "sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@redocly/ajv": "^8.11.2", + "@redocly/config": "^0.22.0", + "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.5", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "minimatch": "^5.0.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=18.17.0", + "npm": ">=9.5.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.22.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", @@ -4673,6 +4726,44 @@ "dev": true, "license": "MIT" }, + "node_modules/@tanstack/angular-query-experimental": { + "version": "5.85.3", + "resolved": "https://registry.npmjs.org/@tanstack/angular-query-experimental/-/angular-query-experimental-5.85.3.tgz", + "integrity": "sha512-U7Qb5gNlnLTfTTM6yM/3IZt0IqjU/kdswwlHbqF+YJ3P7P7DRbqlb1gymTewsODx3sV/nUaPdEiRSqwH+Tsr3g==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.85.3", + "@tanstack/query-devtools": "5.84.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.85.3", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.85.3.tgz", + "integrity": "sha512-9Ne4USX83nHmRuEYs78LW+3lFEEO2hBDHu7mrdIgAFx5Zcrs7ker3n/i8p4kf6OgKExmaDN5oR0efRD7i2J0DQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-devtools": { + "version": "5.84.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.84.0.tgz", + "integrity": "sha512-fbF3n+z1rqhvd9EoGp5knHkv3p5B2Zml1yNRjh7sNXklngYI5RVIWUrUjZ1RIcEoscarUb0+bOvIs5x9dwzOXQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", @@ -4766,19 +4857,6 @@ "@types/trusted-types": "*" } }, - "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -5596,19 +5674,6 @@ "node": ">=8" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -6145,20 +6210,12 @@ ], "license": "CC-BY-4.0" }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, "node_modules/chardet": { "version": "0.7.0", @@ -6404,23 +6461,6 @@ "node": ">=6" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -8737,16 +8777,6 @@ "node": ">=0.10.0" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -9176,6 +9206,19 @@ "node": ">=8" } }, + "node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -9676,6 +9719,16 @@ "jiti": "bin/jiti.js" } }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11840,6 +11893,71 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openapi-typescript": { + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.9.1.tgz", + "integrity": "sha512-9gJtoY04mk6iPMbToPjPxEAtfXZ0dTsMZtsgUI8YZta0btPPig9DJFP4jlerQD/7QOwYgb0tl+zLUpDf7vb7VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "^1.34.5", + "ansi-colors": "^4.1.3", + "change-case": "^5.4.4", + "parse-json": "^8.3.0", + "supports-color": "^10.1.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "openapi-typescript": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.x" + } + }, + "node_modules/openapi-typescript/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openapi-typescript/node_modules/supports-color": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.1.0.tgz", + "integrity": "sha512-GBuewsPrhJPftT+fqDa9oI/zc5HNsG9nREqwzoSFDOIqf0NggOZbHQj2TE1P1CDJK8ZogFnlZY9hWoUiur7I/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/openapi-typescript/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/openmeteo": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/openmeteo/-/openmeteo-1.1.4.tgz", @@ -12476,6 +12594,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/postcss": { "version": "8.4.41", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", @@ -13786,26 +13914,6 @@ "dev": true, "license": "MIT" }, - "node_modules/sass": { - "version": "1.77.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", - "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/sass-loader": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz", @@ -14697,19 +14805,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -15311,6 +15406,13 @@ "punycode": "^2.1.0" } }, + "node_modules/uri-js-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", + "dev": true, + "license": "MIT" + }, "node_modules/uri-js/node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -16613,6 +16715,13 @@ "dev": true, "license": "ISC" }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index c2b203b24..f0c80bbc3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -24,6 +24,7 @@ "@angular/router": "~18.2.11", "@angular/youtube-player": "~18.2.11", "@auth0/angular-jwt": "~5.2.0", + "@tanstack/angular-query-experimental": "^5.85.3", "dompurify": "~3.1.7", "file-saver": "~2.0.5", "marked": "~14.0.0", @@ -55,6 +56,7 @@ "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", + "openapi-typescript": "^7.9.1", "prettier": "~3.3.3", "prettier-eslint": "~16.3.0", "typescript": "~5.5.4" diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index e3ceb9115..f2efe0b1f 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -5,12 +5,15 @@ import { GateComponent } from './gate/gate.component'; import { HomeComponent } from './home/home.component'; import { AboutComponent } from './about/about.component'; import { SignageComponent } from './signage/signage.component'; +import { SamplePageComponent } from './sample/page/sample.component'; const routes: Routes = [ + SamplePageComponent.Route, HomeComponent.Route, AboutComponent.Route, GateComponent.Route, - { path: 'signage', + { + path: 'signage', title: 'XL Signage', loadChildren: () => import('./signage/signage.module').then((m) => m.SignageModule) diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 2721278b3..1f1f2ad1e 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -47,6 +47,11 @@ import { AboutComponent } from './about/about.component'; import { GateComponent } from './gate/gate.component'; import { SharedModule } from './shared/shared.module'; import { MatChipsModule } from '@angular/material/chips'; +import { SamplePageComponent } from './sample/page/sample.component'; +import { + provideTanStackQuery, + QueryClient +} from '@tanstack/angular-query-experimental'; @NgModule({ declarations: [ @@ -57,6 +62,7 @@ import { MatChipsModule } from '@angular/material/chips'; HomeComponent, AboutComponent, GateComponent, + SamplePageComponent ], bootstrap: [AppComponent], imports: [ @@ -90,13 +96,13 @@ import { MatChipsModule } from '@angular/material/chips'; RouterModule, SharedModule, JwtModule.forRoot({ - config: { - tokenGetter: () => { - return localStorage.getItem('bearerToken'); - } + config: { + tokenGetter: () => { + return localStorage.getItem('bearerToken'); } + } }) -], + ], providers: [ { provide: HTTP_INTERCEPTORS, @@ -104,7 +110,8 @@ import { MatChipsModule } from '@angular/material/chips'; multi: true }, DatePipe, - provideHttpClient(withInterceptorsFromDi()) + provideHttpClient(withInterceptorsFromDi()), + provideTanStackQuery(new QueryClient()) ] }) export class AppModule {} diff --git a/frontend/src/app/sample/openapi-http-client.ts b/frontend/src/app/sample/openapi-http-client.ts new file mode 100644 index 000000000..48d97c90f --- /dev/null +++ b/frontend/src/app/sample/openapi-http-client.ts @@ -0,0 +1,183 @@ +/** + * Abstraction over HTTPClient to create type-safe data fetching based on the + * types generated by OpenAPI. + * + * The usage follows a similar pattern to `openapi-fetch`. + */ + +import { Injectable, inject } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { lastValueFrom, Observable } from 'rxjs'; +import { paths } from '../schema'; +import { injectQuery } from '@tanstack/angular-query-experimental'; + +type HttpMethod = + | 'get' + | 'put' + | 'post' + | 'delete' + | 'options' + | 'head' + | 'patch' + | 'trace'; + +type PathsWithMethod = { + [Pathname in keyof Paths]: Paths[Pathname] extends { + [K in PathnameMethod]: any; + } + ? Pathname + : never; +}[keyof Paths]; + +// Extract operation type for a given method and path +type OperationForMethod< + Method extends HttpMethod, + Path extends keyof paths +> = paths[Path] extends { [K in Method]: infer Op } ? Op : never; + +// Extract path parameters type from an operation +type PathParams = Op extends { parameters: { path: infer P } } ? P : never; + +// Extract query parameters type from an operation +type QueryParams = Op extends { parameters: { query: infer Q } } + ? Q + : never; + +// Extract request body type from an operation +type RequestBody = Op extends { + requestBody: { content: { 'application/json': infer B } }; +} + ? B + : never; + +// Extract response type (200 response) from an operation +type ApiResponseType = Op extends { + responses: { + 200: { content: { 'application/json': infer R } }; + }; +} + ? R + : never; + +/** + * Sample abstraction over HTTPClient that uses types generated by OpenAPI + */ +@Injectable({ + providedIn: 'root' +}) +export class OpenApiHHTPClient { + // Inject Angular's HTTP client + private http = inject(HttpClient); + + private query< + Method extends HttpMethod, + Path extends PathsWithMethod, + Op = OperationForMethod, + PathParamsType = PathParams, + QueryParamsType = QueryParams, + RequestBodyType = RequestBody, + ResponseType = ApiResponseType + >( + method: Method, + path: Path, + options: { + pathParams?: PathParamsType extends never ? never : PathParamsType; + queryParams?: QueryParamsType extends never ? never : QueryParamsType; + body?: RequestBodyType extends never ? never : RequestBodyType; + } = {} + ): Observable { + // Replace path parameters in the URL + let url = path as string; + if (options.pathParams) { + Object.entries(options.pathParams).forEach(([key, value]) => { + url = url.replace(`{${key}}`, String(value)); + }); + } + + // Build query parameters + let params = new HttpParams(); + if (options.queryParams) { + Object.entries(options.queryParams).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + params = params.set(key, String(value)); + } + }); + } + + // Make the HTTP request based on method + switch (method) { + case 'get': + return this.http.get(url, { params }); + case 'post': + return this.http.post(url, options.body, { params }); + case 'put': + return this.http.put(url, options.body, { params }); + case 'delete': + return this.http.delete(url, { params }); + case 'patch': + return this.http.patch(url, options.body, { params }); + case 'head': + return this.http.head(url, { params }); + case 'options': + return this.http.options(url, { params }); + default: + throw new Error(`Unsupported HTTP method: ${method}`); + } + } + + // Convenience methods for common HTTP methods + get>( + path: Path, + options?: { + pathParams?: PathParams>; + queryParams?: QueryParams>; + } + ) { + return lastValueFrom(this.query('get', path, options as any)); + } + + queryGet>( + path: Path, + options?: { + pathParams?: PathParams>; + queryParams?: QueryParams>; + } + ) { + return injectQuery(() => ({ + queryKey: ['get', path], + queryFn: () => lastValueFrom(this.query('get', path, options as any)) + })); + } + + post>( + path: Path, + options?: { + pathParams?: PathParams>; + queryParams?: QueryParams>; + body?: RequestBody>; + } + ) { + return lastValueFrom(this.query('post', path, options as any)); + } + + put>( + path: Path, + options?: { + pathParams?: PathParams>; + queryParams?: QueryParams>; + body?: RequestBody>; + } + ) { + return lastValueFrom(this.query('put', path, options as any)); + } + + delete>( + path: Path, + options?: { + pathParams?: PathParams>; + queryParams?: QueryParams>; + } + ) { + return lastValueFrom(this.query('delete', path, options as any)); + } +} diff --git a/frontend/src/app/sample/page/sample.component.css b/frontend/src/app/sample/page/sample.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/app/sample/page/sample.component.html b/frontend/src/app/sample/page/sample.component.html new file mode 100644 index 000000000..9a4cea450 --- /dev/null +++ b/frontend/src/app/sample/page/sample.component.html @@ -0,0 +1,15 @@ +
+ @if(query.isLoading()) { +

Loading...

+ } + @if(query.error(); as error) { +

Error: {{ error.message }}

+ } + @if(query.data(); as data) { + @for(item of data.items; track item.id) { +

{{ item.name }} ({{ item.price }})

+ } @empty { +

No items found.

+ } + } +
\ No newline at end of file diff --git a/frontend/src/app/sample/page/sample.component.ts b/frontend/src/app/sample/page/sample.component.ts new file mode 100644 index 000000000..b8848daaf --- /dev/null +++ b/frontend/src/app/sample/page/sample.component.ts @@ -0,0 +1,22 @@ +import { Component, inject } from '@angular/core'; +import { injectQuery } from '@tanstack/angular-query-experimental'; +import { SampleService } from '../sample.service'; +import { sample } from 'rxjs'; + +@Component({ + selector: 'app-sample-page', + templateUrl: './sample.component.html', + styleUrls: ['./sample.component.css'] +}) +export class SamplePageComponent { + /** Route information to be used in routing module */ + sampleService = inject(SampleService); + + public static Route = { + path: '', + title: 'Sample', + component: SamplePageComponent + }; + + query = this.sampleService.queryGetAll(); +} diff --git a/frontend/src/app/sample/sample.service.ts b/frontend/src/app/sample/sample.service.ts new file mode 100644 index 000000000..13da161c5 --- /dev/null +++ b/frontend/src/app/sample/sample.service.ts @@ -0,0 +1,38 @@ +/** Sample service to show off OpenAPI integration */ +import { inject, Injectable } from '@angular/core'; +import { OpenApiHHTPClient } from './openapi-http-client'; +import { components } from '../schema'; + +@Injectable({ + providedIn: 'root' +}) +export class SampleService { + // Inject new, type-safe HTTPClient abstraction + private http = inject(OpenApiHHTPClient); + sampleService: any; + + // This special example method wraps TanStack Query, providing back + // a reactive (signal-based) object with loading states and caching. + // See: https://tanstack.com/query/v5/docs/framework/angular/overview + queryGetAll() { + return this.http.queryGet('/api/sample'); + } + + getAll() { + return this.http.get('/api/sample'); + } + + get(id: number) { + return this.http.get('/api/sample/{id}', { + pathParams: { + id: id + } + }); + } + + create(request: components['schemas']['CreateSampleItemRequest']) { + return this.http.post('/api/sample', { + body: request + }); + } +} diff --git a/frontend/src/app/schema.d.ts b/frontend/src/app/schema.d.ts new file mode 100644 index 000000000..7854392a0 --- /dev/null +++ b/frontend/src/app/schema.d.ts @@ -0,0 +1,8940 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/api/coworking/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Coworking Status + * @description Status endpoint supports the primary screen of the coworking features. + * + * It returns information about upcoming, active reservations the subject holds. + * It also fetches the current seat availability of the XL during operating hours. + * Finally, it provides a list of upcoming hours. + */ + get: operations["get_coworking_status_api_coworking_status_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/reservation": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Draft Reservation + * @description Draft a reservation request. + */ + post: operations["draft_reservation_api_coworking_reservation_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/reservation/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Reservation */ + get: operations["get_reservation_api_coworking_reservation__id__get"]; + /** + * Update Reservation + * @description Modify a reservation. + */ + put: operations["update_reservation_api_coworking_reservation__id__put"]; + post?: never; + /** + * Cancel Reservation + * @description Cancel a reservation. + */ + delete: operations["cancel_reservation_api_coworking_reservation__id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/room-reservation/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Reservations For Rooms By Date + * @description See available rooms for any given day. + */ + get: operations["get_reservations_for_rooms_by_date_api_coworking_room_reservation__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/user-reservations/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Total Hours Study Room Reservations + * @description Allows a user to know how many hours they have reserved in all study rooms (Excludes CSXL). + */ + get: operations["get_total_hours_study_room_reservations_api_coworking_user_reservations__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/operating_hours": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Operating Hours + * @description List operating hours over a given span of dates. + */ + get: operations["get_operating_hours_api_coworking_operating_hours_get"]; + put?: never; + /** + * New Operating Hours + * @description Create new opening hours for the XL. + */ + post: operations["new_operating_hours_api_coworking_operating_hours_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/operating_hours/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete Operating Hours + * @description Delete operating hours for the XL. + */ + delete: operations["delete_operating_hours_api_coworking_operating_hours__id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/events/unauthenticated/paginate": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Events + * @description List events in time range via standard backend pagination query parameters. + */ + get: operations["list_events_api_events_unauthenticated_paginate_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/events/paginate": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Events + * @description List events in time range via standard backend pagination query parameters. + */ + get: operations["list_events_api_events_paginate_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/events/unauthenticated/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Status + * @description Retrieves the featured event and user's registrations. + */ + get: operations["get_status_api_events_unauthenticated_status_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/events/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Status + * @description Retrieves the featured event and user's registrations. + */ + get: operations["get_status_api_events_status_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/events/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Event By Id + * @description Get event with matching id + * + * Args: + * id: an int representing a unique Event ID + * subject: a valid User model representing the currently logged in User + * event_service: a valid EventService + * + * Returns: + * EventDetails: a valid EventDetails model corresponding to the given event id + */ + get: operations["get_event_by_id_api_events__id__get"]; + put?: never; + post?: never; + /** + * Delete Event + * @description Delete event based on id + * + * Args: + * id: an int representing a unique event ID + * subject: a valid User model representing the currently logged in User + * event_service: a valid EventService + */ + delete: operations["delete_event_api_events__id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/events": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Event + * @description Update event + * + * Args: + * event: a valid Event model + * subject: a valid User model representing the currently logged in User + * event_service: a valid EventService + * + * Returns: + * EventDetails: a valid EventDetails model representing the updated Event + */ + put: operations["update_event_api_events_put"]; + /** + * New Event + * @description Create event + * + * Args: + * event: a valid Event model + * subject: a valid User model representing the currently logged in User + * event_service: a valid EventService + * + * Returns: + * EventDetails: latest iteration of the created or updated event after changes made + */ + post: operations["new_event_api_events_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/events/{event_id}/registration": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Event Registration Of User + * @description Check the registration status of a user for an event, raise ResourceNotFound if unregistered. + * + * Args: + * event_id: the int identifier of an Event + * subject: the logged in user making the request + * event_service: the backing service + */ + get: operations["get_event_registration_of_user_api_events__event_id__registration_get"]; + put?: never; + /** + * Register For Event + * @description Register a user event based on the event ID. + * + * If the user_id parameter is not passed to the post method, we will use the + * logged in user's ID as the user_id. Another user's ID is expected when a + * user is being registered by an administrator. + * + * Args: + * event_id: an int representing a unique event ID + * user_id: (optional) an int representing the user being registered for an event + * subject: a valid User model representing the currently logged in User + * event_service: a valid EventService + * + * Returns: + * EventRegistration details + */ + post: operations["register_for_event_api_events__event_id__registration_post"]; + /** + * Unregister For Event + * @description Unregister a user event based on the event ID + * + * Args: + * event_id: an int representing a unique event ID + * user_id: the int of the user whose registration is being deleted (optional) + * subject: a valid User model representing the currently logged in User + * event_service: EventService + * user_service: UserService + */ + delete: operations["unregister_for_event_api_events__event_id__registration_delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/events/{event_id}/registrations": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Event Registrations + * @description Get the registrations of an event. + * + * Args: + * event_id: the int identifier of an Event + * subject: the logged in user making the request + * event_service: the backing service + * + * Returns: + * Sequence[EventRegistration] + */ + get: operations["get_event_registrations_api_events__event_id__registrations_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/events/{event_id}/registrations/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Registered Users Of Event + * @description List registered users for an event via standard backend pagination query parameters. + * + * Args: + * event_id: an int representing a unique Event + * subject: a valid User model representing the currently logged in User + * event_service: a valid EventService + * + * Returns: + * Paginated[User]: All `User`s registered for an event in Paginated form + */ + get: operations["get_registered_users_of_event_api_events__event_id__registrations_users_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/user": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Search + * @description Search for users based on a query string which matches against name, onyen, and email address. + */ + get: operations["search_api_user_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/user/{onyen}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get By Onyen + * @description Search for one user by their onyen + */ + get: operations["get_by_onyen_api_user__onyen__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/organizations": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Organizations + * @description Get all organizations + * + * Parameters: + * organization_service: a valid OrganizationService + * + * Returns: + * list[Organization]: All `Organization`s in the `Organization` database table + */ + get: operations["get_organizations_api_organizations_get"]; + /** + * Update Organization + * @description Update organization + * + * Parameters: + * organization: a valid Organization model + * subject: a valid User model representing the currently logged in User + * organization_service: a valid OrganizationService + * + * Returns: + * Organization: Updated organization + * + * Raises: + * HTTPException 404 if update() raises an Exception + */ + put: operations["update_organization_api_organizations_put"]; + /** + * New Organization + * @description Create organization + * + * Parameters: + * organization: a valid Organization model + * subject: a valid User model representing the currently logged in User + * organization_service: a valid OrganizationService + * + * Returns: + * Organization: Created organization + * + * Raises: + * HTTPException 422 if create() raises an Exception + */ + post: operations["new_organization_api_organizations_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/organizations/{slug}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Organization By Slug + * @description Get organization with matching slug + * + * Parameters: + * slug: a string representing a unique identifier for an Organization + * organization_service: a valid OrganizationService + * + * Returns: + * Organization: Organization with matching slug + * + * Raises: + * HTTPException 404 if get_by_slug() raises an Exception + */ + get: operations["get_organization_by_slug_api_organizations__slug__get"]; + put?: never; + post?: never; + /** + * Delete Organization + * @description Delete organization based on slug + * + * Parameters: + * slug: a string representing a unique identifier for an Organization + * subject: a valid User model representing the currently logged in User + * organization_service: a valid OrganizationService + * + * Raises: + * HTTPException 404 if delete() raises an Exception + */ + delete: operations["delete_organization_api_organizations__slug__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/ambassador/xl": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Active And Upcoming Reservations For Xl + * @description List active and upcoming reservations for the XL. + * + * This list drives the ambassador's checkin UI. + */ + get: operations["active_and_upcoming_reservations_for_xl_api_coworking_ambassador_xl_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/ambassador/rooms": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Active And Upcoming Reservations For Rooms + * @description List active and upcoming reservations for the rooms. + * + * This list drives the ambassador's checkin UI. + */ + get: operations["active_and_upcoming_reservations_for_rooms_api_coworking_ambassador_rooms_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/ambassador/checkin": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Checkin Reservation + * @description CheckIn a confirmed reservation. + */ + put: operations["checkin_reservation_api_coworking_ambassador_checkin_put"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/coworking/ambassador/reservation": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create Walkin Reservation + * @description Create a walk-in reservation as an ambassador for a user showing up to the desk + * without having drafted/confirmed a reservation of their own ahead of time. + */ + post: operations["create_walkin_reservation_api_coworking_ambassador_reservation_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get User Courses + * @description Get the courses for the current user organized by term. + * + * Returns: + * list[TermOverview] + */ + get: operations["get_user_courses_api_my_courses_get"]; + /** + * Update Course Site + * @description Updates a course site to the database + * + * Returns: + * CourseSite: Course updated + */ + put: operations["update_course_site_api_my_courses_put"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/{course_site_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Course Site + * @description Gets the current office hour event overviews for a given class. + * + * Returns: + * list[OfficeHoursOverview] + */ + get: operations["get_course_site_api_my_courses__course_site_id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/{course_site_id}/roster": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Course Site Roster + * @description Get the roster overview for a course. + * + * Returns: + * CourseRosterOverview + */ + get: operations["get_course_site_roster_api_my_courses__course_site_id__roster_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/{course_site_id}/oh-events/current": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Current Oh Events + * @description Gets the current office hour event overviews for a given class. + * + * Returns: + * list[OfficeHoursOverview] + */ + get: operations["get_current_oh_events_api_my_courses__course_site_id__oh_events_current_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/{course_site_id}/oh-events/future": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Future Oh Events + * @description Gets the future office hour event overviews for a given class. + * + * Returns: + * Paginated[OfficeHoursOverview] + */ + get: operations["get_future_oh_events_api_my_courses__course_site_id__oh_events_future_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/{course_site_id}/oh-events/history": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Past Oh Events + * @description Gets the past office hour event overviews for a given class. + * + * Returns: + * Paginated[OfficeHoursOverview] + */ + get: operations["get_past_oh_events_api_my_courses__course_site_id__oh_events_history_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/new": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create Course Site + * @description Adds a new course site to the database + * + * Returns: + * CourseSiteDetails: Course created + */ + post: operations["create_course_site_api_my_courses_new_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/{course_site_id}/statistics/ticket-history": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Paginated Ticket History + * @description Gets the past office hour event overviews for a given class. + * + * Returns: + * Paginated[OfficeHoursOverview] + */ + get: operations["get_paginated_ticket_history_api_my_courses__course_site_id__statistics_ticket_history_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/{course_site_id}/statistics/filter-data": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Statistics Filter Data */ + get: operations["get_statistics_filter_data_api_my_courses__course_site_id__statistics_filter_data_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/{course_site_id}/statistics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Ticket Statistics + * @description Gets the ticket statistics for a given class. + * Returns: + * OfficeHoursTicketStatistics + */ + get: operations["get_ticket_statistics_api_my_courses__course_site_id__statistics_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/my-courses/{course_site_id}/statistics/csv": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Ticket Statistics Csv + * @description Gets the ticket statistics for a given class. + * Returns: + * OfficeHoursTicketStatistics + */ + get: operations["get_ticket_statistics_csv_api_my_courses__course_site_id__statistics_csv_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/term": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Terms + * @description Get all terms + * + * Returns: + * list[Term]: All `Term`s in the `Term` database table + */ + get: operations["get_terms_api_academics_term_get"]; + /** + * Update Term + * @description Updates a term to the database + * + * Returns: + * TermDetails: Term updated + */ + put: operations["update_term_api_academics_term_put"]; + /** + * New Term + * @description Adds a new term to the database + * + * Returns: + * TermDetails: Term created + */ + post: operations["new_term_api_academics_term_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/term/current": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Current Term + * @description Gets the current term based on the current date + * + * Returns: + * Term: Currently active term + */ + get: operations["get_current_term_api_academics_term_current_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/term/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Term By Id + * @description Gets one term by its id + * + * Returns: + * Term: Term with the given ID + */ + get: operations["get_term_by_id_api_academics_term__id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/term/{term_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete Term + * @description Deletes a term from the database + */ + delete: operations["delete_term_api_academics_term__term_id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/course": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Courses + * @description Get all courses + * + * Returns: + * list[Course]: All `Course`s in the `Course` database table + */ + get: operations["get_courses_api_academics_course_get"]; + /** + * Update Course + * @description Updates a course to the database + * + * Returns: + * CourseDetails: Course updated + */ + put: operations["update_course_api_academics_course_put"]; + /** + * New Course + * @description Adds a new course to the database + * + * Returns: + * CourseDetails: Course created + */ + post: operations["new_course_api_academics_course_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/course/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Course By Id + * @description Gets one course by its id + * + * Returns: + * CourseDetails: Course with the given ID + */ + get: operations["get_course_by_id_api_academics_course__id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/course/{course_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete Course + * @description Deletes a course from the database + */ + delete: operations["delete_course_api_academics_course__course_id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section/update-enrollments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Update Enrollments + * @description Updates the enrollment numbers for COMP sections. + */ + get: operations["update_enrollments_api_academics_section_update_enrollments_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Section By Id + * @description Gets one section by its id + * + * Returns: + * Section: Section with the given ID + */ + get: operations["get_section_by_id_api_academics_section__id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section/term/{term_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Section By Term Id + * @description Gets list of sections by term ID + * + * Returns: + * list[CatalogSection]: Sections with the given term + */ + get: operations["get_section_by_term_id_api_academics_section_term__term_id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section/{subject_code}/{course_number}/{section_number}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Section By Subject Code + * @description Gets one section by its properties + * + * Returns: + * CatalogSection: Course with the given properties + */ + get: operations["get_section_by_subject_code_api_academics_section__subject_code___course_number___section_number__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Section + * @description Updates a section to the database + * + * Returns: + * SectionDetails: Section updated + */ + put: operations["update_section_api_academics_section_put"]; + /** + * New Section + * @description Adds a new section to the database + * + * Returns: + * SectionDetails: Section created + */ + post: operations["new_section_api_academics_section_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section/{section_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete Section + * @description Deletes a section from the database + */ + delete: operations["delete_section_api_academics_section__section_id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/room": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Rooms + * @description Get all room + * + * Parameters: + * room_service: a valid RoomService + * + * Returns: + * list[RoomDetails]: All rooms in the `Room` database table + */ + get: operations["get_rooms_api_room_get"]; + /** + * Update Room + * @description Update room + * + * Parameters: + * room: a valid Room model + * subject: a valid User model representing the currently logged in User + * room_service: a valid RoomService + * + * Returns: + * RoomDetails: Updated room + */ + put: operations["update_room_api_room_put"]; + /** + * New Room + * @description Create room + * + * Parameters: + * room: a valid room model + * subject: a valid User model representing the currently logged in User + * room_service: a valid RoomService + * + * Returns: + * RoomDetails: Created room + */ + post: operations["new_room_api_room_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/room/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Room By Id + * @description Get room with matching id + * + * Parameters: + * id: a string representing a unique identifier for a room + * room_service: a valid RoomService + * + * Returns: + * RoomDetails: RoomDetails with matching slug + */ + get: operations["get_room_by_id_api_room__id__get"]; + put?: never; + post?: never; + /** + * Delete Room + * @description Delete room based on id + * + * Parameters: + * id: a string representing a unique identifier for an room + * subject: a valid User model representing the currently logged in User + * room_service: a valid RoomService + */ + delete: operations["delete_room_api_room__id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section-member/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Section Member By Id + * @description Args: + * id (int): The unique identifier of the SectionMember. + * subject (User): The currently logged-in user. + * section_member_svc (SectionMemberService): Service dependency to interact with Section Membership data. + * + * Returns: + * SectionMember: The SectionMember corresponding to the provided ID. + * + * Raises: + * HTTPException(404): If the SectionMember with the specified ID is not found. + */ + get: operations["get_section_member_by_id_api_academics_section_member__id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section-member": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add User Memberships + * @description Adds memberships for a user given a list of Office Hours sections. + * + * Args: + * oh_sections (list[CourseSite]): List of Office Hours sections to enroll the user into. + * subject (User): The currently logged-in user. + * section_membership (SectionMemberService): Service dependency to manage Section Membership data. + * + * Returns: + * list[SectionMember]: List of newly created SectionMember memberships for the user. + * + * Raises: + * HTTPException(404): When there was an issue adding the memberships. + */ + post: operations["add_user_memberships_api_academics_section_member_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section-member/instructor/{section_id}/{user_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Instructor + * @description Gets one section by its id + * + * Returns: + * SectionDetails: Section with the given ID + */ + post: operations["add_instructor_api_academics_section_member_instructor__section_id___user_id__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/academics/section-member/import-from-canvas/{section_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Import Roster From Csv + * @description Creates user roles from a Canvas section roster CSV file. + */ + post: operations["import_roster_from_csv_api_academics_section_member_import_from_canvas__section_id__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/profile": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Read Profile + * @description Retrieve a user's profile. If the user does not exist, return a NewUser. + * + * To handle new users, we rely only on the authenticated_pid dependency rather than + * registered_user. + */ + get: operations["read_profile_api_profile_get"]; + /** + * Update Profile + * @description Update a user's profile. If the user does not exist, create a new user. + * + * Since the user is authenticated, we can trust the pid and onyen. However, + * since the user may not be registered, we depend on authenticated_pid rather + * than registered_user. + * + * ProfileForm is used here, rather than User, for similar registration-specific + * purposes. Importantly, ProfileForm doesn't contain an ID field. + */ + put: operations["update_profile_api_profile_put"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/admin/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Users + * @description List users via standard backend pagination query parameters. + */ + get: operations["list_users_api_admin_users_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/admin/roles": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Roles + * @description List all roles in the system for administrators. + */ + get: operations["list_roles_api_admin_roles_get"]; + put?: never; + /** Create Role */ + post: operations["create_role_api_admin_roles_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/admin/roles/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Role Details + * @description Get details about a specific role in the system for administrators. + */ + get: operations["role_details_api_admin_roles__id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/admin/roles/{id}/permission": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Grant Permission To Role + * @description Grant a permission to a role. + */ + post: operations["grant_permission_to_role_api_admin_roles__id__permission_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/admin/roles/{id}/permission/{permissionId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Revoke Permission From Role + * @description Revoke a permission from a role. + */ + delete: operations["revoke_permission_from_role_api_admin_roles__id__permission__permissionId__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/admin/roles/{id}/member": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Member To Role + * @description Add a member to a role. + */ + post: operations["add_member_to_role_api_admin_roles__id__member_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/admin/roles/{id}/member/{userId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Remove Member From Role + * @description Remove a member from a role. + */ + delete: operations["remove_member_from_role_api_admin_roles__id__member__userId__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/applications/ta/user/{term_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Application + * @description Get a user's application + */ + get: operations["get_application_api_applications_ta_user__term_id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/applications/ta": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Undergrad Application + * @description Update application + * + * Parameters: + * application: a valid New_UTA model + * user: The user updating their application + * application_service: a valid ApplicationService + * + * Returns: + * Application: Created application + * + * Raises: + * ResourceNotFound if application doesn't exist + */ + put: operations["update_undergrad_application_api_applications_ta_put"]; + /** + * Create Application + * @description Creates an application + */ + post: operations["create_application_api_applications_ta_post"]; + /** + * Delete Application + * @description Delete Application + * + * Parameters: + * user: The user deleteing their application + * + * Returns: + * None + * + * Raises: + * ResourceNotFound if application doesn't exist + */ + delete: operations["delete_application_api_applications_ta_delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/applications/ta/eligible-sections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Eligible Sections + * @description Get sections that an applicant can apply to. + * + * Returns: + * list[CatalogSectionIdentity]: All sections. + */ + get: operations["get_eligible_sections_api_applications_ta_eligible_sections_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/health": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Health Check */ + get: operations["health_check_api_health_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/{id}/queue": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Office Hours Queue + * @description Gets the queue overview for an office hour event. + * + * Returns: + * OfficeHourQueueOverview + */ + get: operations["get_office_hours_queue_api_office_hours__id__queue_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/{id}/role": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Office Hours Role + * @description Gets a user's role for a given office hour event. + * + * Returns: + * OfficeHourEventRoleOverview + */ + get: operations["get_office_hours_role_api_office_hours__id__role_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/{id}/get-help": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Office Hours Help + * @description Gets information about getting help in office hours. + * + * Returns: + * OfficeHourGetHelpOverview + */ + get: operations["get_office_hours_help_api_office_hours__id__get_help_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/{site_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Office Hours + * @description Updates new office hours. + * + * Returns: + * OfficeHours + */ + put: operations["update_office_hours_api_office_hours__site_id__put"]; + /** + * Create Office Hours + * @description Creates new office hours. + * + * Returns: + * OfficeHours + */ + post: operations["create_office_hours_api_office_hours__site_id__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/{site_id}/recurring": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Recurring Office Hours + * @description Updates an existing office hours event and future events in the recurrence pattern. + */ + put: operations["update_recurring_office_hours_api_office_hours__site_id__recurring_put"]; + /** + * Create Recurring Office Hours + * @description Creates new office hours events based on a recurrence pattern. + * + * Returns: + * list[OfficeHours] + */ + post: operations["create_recurring_office_hours_api_office_hours__site_id__recurring_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/{site_id}/{oh_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Office Hours + * @description Gets office hours. + */ + get: operations["get_office_hours_api_office_hours__site_id___oh_id__get"]; + put?: never; + post?: never; + /** + * Delete Office Hours + * @description Deletes office hours. + */ + delete: operations["delete_office_hours_api_office_hours__site_id___oh_id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/{site_id}/{oh_id}/recurring": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete Recurring Office Hours + * @description Deletes an existing office hours event and future events in the recurrence pattern. + */ + delete: operations["delete_recurring_office_hours_api_office_hours__site_id___oh_id__recurring_delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/ticket/{id}/call": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Call Ticket + * @description Calls a ticket in an office hour queue. + * + * Returns: + * OfficeHourQueueOverview + */ + put: operations["call_ticket_api_office_hours_ticket__id__call_put"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/ticket/{id}/cancel": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Cancel Ticket + * @description Cancels a ticket in an office hour queue. + * + * Returns: + * OfficeHourQueueOverview + */ + put: operations["cancel_ticket_api_office_hours_ticket__id__cancel_put"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/ticket/{id}/close": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Close Ticket + * @description Closes a ticket in an office hour queue. + * + * Returns: + * OfficeHourQueueOverview + */ + put: operations["close_ticket_api_office_hours_ticket__id__close_put"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/office-hours/ticket/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * New Oh Ticket + * @description Adds a new OH ticket to the database + * + * Returns: + * OfficeHoursTicketDetails: OH Ticket created + */ + post: operations["new_oh_ticket_api_office_hours_ticket__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/admin/{term_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Hiring Admin Overview + * @description Returns the state of hiring to the admin. + */ + get: operations["get_hiring_admin_overview_api_hiring_admin__term_id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/admin/course/{course_site_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Hiring Admin Course Overview + * @description Returns the state of hiring to the admin. + */ + get: operations["get_hiring_admin_course_overview_api_hiring_admin_course__course_site_id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/assignment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Hiring Assignment + * @description Updates an assignment + */ + put: operations["update_hiring_assignment_api_hiring_assignment_put"]; + /** + * Create Hiring Assignment + * @description Creates a new assignment + */ + post: operations["create_hiring_assignment_api_hiring_assignment_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/assignment/{assignment_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete Hiring Assignment + * @description Deletes an assignment + */ + delete: operations["delete_hiring_assignment_api_hiring_assignment__assignment_id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/level": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Hiring Levels + * @description Get all hiring levels + */ + get: operations["get_hiring_levels_api_hiring_level_get"]; + /** + * Update Hiring Level + * @description Updates a level + */ + put: operations["update_hiring_level_api_hiring_level_put"]; + /** + * Create Hiring Level + * @description Creates a new level + */ + post: operations["create_hiring_level_api_hiring_level_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/create_sites": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create Missing Course Sites For Term + * @description Creates missing course sites for the term + */ + post: operations["create_missing_course_sites_for_term_api_hiring_create_sites_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/{course_site_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Status + * @description Retrieves the hiring status for TA Applications. + */ + get: operations["get_status_api_hiring__course_site_id__get"]; + /** + * Update Status + * @description Updates the hiring status for TA Applications. + */ + put: operations["update_status_api_hiring__course_site_id__put"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/summary/{term_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Hiring Summary Overview + * @description Returns the state of hiring as a summary. + */ + get: operations["get_hiring_summary_overview_api_hiring_summary__term_id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/summary/{term_id}/csv": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Hiring Summary Csv + * @description Returns the state of hiring as a summary. + */ + get: operations["get_hiring_summary_csv_api_hiring_summary__term_id__csv_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/{course_site_id}/csv": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Applicants For Site Csv + * @description Returns the state of hiring as a summary. + */ + get: operations["get_applicants_for_site_csv_api_hiring__course_site_id__csv_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/summary/{term_id}/phd_applicants": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Phd Applicants Csv + * @description Returns the state of hiring as a summary. + */ + get: operations["get_phd_applicants_csv_api_hiring_summary__term_id__phd_applicants_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/assignments/{course_site_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Hiring Assignments For Course Site + * @description Retrieves the committed and final hiring assignments for a course site. + */ + get: operations["get_hiring_assignments_for_course_site_api_hiring_assignments__course_site_id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/assignments/{course_site_id}/csv": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Assignments Csv + * @description Returns the state of hiring as a summary. + */ + get: operations["get_assignments_csv_api_hiring_assignments__course_site_id__csv_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/conflict_check/{application_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Conflict Check */ + get: operations["conflict_check_api_hiring_conflict_check__application_id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/hiring/admin/{term_id}/csv": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Applicants For Term Csv + * @description Stream a CSV of all applicants for a term. + */ + get: operations["get_applicants_for_term_csv_api_hiring_admin__term_id__csv_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/admin/facts": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Facts + * @description List counts for all of the major data points. + */ + get: operations["get_facts_api_admin_facts_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/articles/welcome": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Welcome Status + * @description Retrieves the welcome status. + */ + get: operations["get_welcome_status_api_articles_welcome_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/articles/welcome/unauthenticated": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Welcome Status Unauthenticated + * @description Retrieves the welcome status for an unauthenticated user. + */ + get: operations["get_welcome_status_unauthenticated_api_articles_welcome_unauthenticated_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/articles/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List + * @description List paginated articles. + */ + get: operations["list_api_articles_list_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/articles/{slug}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Article + * @description Retrieves the welcome status. + */ + get: operations["get_article_api_articles__slug__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/articles": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Article + * @description Updates an article. + */ + put: operations["update_article_api_articles_put"]; + /** + * Create Article + * @description Create a new article. + */ + post: operations["create_article_api_articles_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/articles/{article_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete Article + * @description Deletes an article. + */ + delete: operations["delete_article_api_articles__article_id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/signage/slow": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Slow Signage + * @description Gets signage data that does not need to be updated frequently. + * + * Parameters: + * None + * + * Returns: + * SignageOverviewSlow - contains news, top users, events, and announcements + */ + get: operations["get_slow_signage_api_signage_slow_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/signage/fast": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Fast Signage + * @description Gets signage data that needs to be updated in real time. + * + * Parameters: + * None + * + * Returns: + * SignageOverviewFast - contains office hours information for queue time, room and seat availability + */ + get: operations["get_fast_signage_api_signage_fast_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/sample": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get All */ + get: operations["get_all_api_sample_get"]; + put?: never; + /** Create */ + post: operations["create_api_sample_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/sample/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get */ + get: operations["get_api_sample__id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + /** + * Application + * @description Pydantic model to represent an `Application`. + * + * This model is based on the `ApplicationEntity` model, which defines the shape + * of the `Application` database in the PostgreSQL database. + */ + "Application-Input": { + /** Id */ + id?: number | null; + /** User Id */ + user_id: number; + /** Term Id */ + term_id: string; + /** Type */ + type: string; + /** Academic Hours */ + academic_hours?: number | null; + /** Extracurriculars */ + extracurriculars?: string | null; + /** Expected Graduation */ + expected_graduation?: string | null; + /** Program Pursued */ + program_pursued?: string | null; + /** Other Programs */ + other_programs?: string | null; + /** Gpa */ + gpa?: number | null; + /** Comp Gpa */ + comp_gpa?: number | null; + comp_227?: components["schemas"]["Comp227"] | null; + /** Intro Video Url */ + intro_video_url?: string | null; + /** Prior Experience */ + prior_experience?: string | null; + /** Service Experience */ + service_experience?: string | null; + /** Additional Experience */ + additional_experience?: string | null; + /** Ta Experience */ + ta_experience?: string | null; + /** Best Moment */ + best_moment?: string | null; + /** Desired Improvement */ + desired_improvement?: string | null; + /** Advisor */ + advisor?: string | null; + /** Preferred Sections */ + preferred_sections: components["schemas"]["CatalogSectionIdentity"][]; + /** + * Assignments + * @default [] + */ + assignments: components["schemas"]["ReleasedHiringAssignment"][]; + }; + /** + * Application + * @description Pydantic model to represent an `Application`. + * + * This model is based on the `ApplicationEntity` model, which defines the shape + * of the `Application` database in the PostgreSQL database. + */ + "Application-Output": { + /** Id */ + id?: number | null; + /** User Id */ + user_id: number; + /** Term Id */ + term_id: string; + /** Type */ + type: string; + /** Academic Hours */ + academic_hours?: number | null; + /** Extracurriculars */ + extracurriculars?: string | null; + /** Expected Graduation */ + expected_graduation?: string | null; + /** Program Pursued */ + program_pursued?: string | null; + /** Other Programs */ + other_programs?: string | null; + /** Gpa */ + gpa?: number | null; + /** Comp Gpa */ + comp_gpa?: number | null; + comp_227?: components["schemas"]["Comp227"] | null; + /** Intro Video Url */ + intro_video_url?: string | null; + /** Prior Experience */ + prior_experience?: string | null; + /** Service Experience */ + service_experience?: string | null; + /** Additional Experience */ + additional_experience?: string | null; + /** Ta Experience */ + ta_experience?: string | null; + /** Best Moment */ + best_moment?: string | null; + /** Desired Improvement */ + desired_improvement?: string | null; + /** Advisor */ + advisor?: string | null; + /** Preferred Sections */ + preferred_sections: components["schemas"]["CatalogSectionIdentity"][]; + /** + * Assignments + * @default [] + */ + assignments: components["schemas"]["ReleasedHiringAssignment"][]; + }; + /** + * ApplicationPriority + * @description When checking for conflicts for an application desired by multiple parties, + * this model indicates a single class' ranking for both student and instructor. + */ + ApplicationPriority: { + /** Student Priority */ + student_priority: number; + /** Instructor Priority */ + instructor_priority: number; + /** Course Site Id */ + course_site_id: number; + /** Course Title */ + course_title: string; + }; + /** ApplicationReviewOverview */ + "ApplicationReviewOverview-Input": { + /** Id */ + id?: number | null; + /** Application Id */ + application_id: number; + /** Course Site Id */ + course_site_id: number; + /** @default Not Processed */ + status: components["schemas"]["ApplicationReviewStatus"]; + /** Preference */ + preference: number; + /** Notes */ + notes: string; + application: components["schemas"]["ApplicationUnderReview"]; + /** Applicant Id */ + applicant_id: number; + /** Applicant Course Ranking */ + applicant_course_ranking: number; + }; + /** ApplicationReviewOverview */ + "ApplicationReviewOverview-Output": { + /** Id */ + id?: number | null; + /** Application Id */ + application_id: number; + /** Course Site Id */ + course_site_id: number; + /** @default Not Processed */ + status: components["schemas"]["ApplicationReviewStatus"]; + /** Preference */ + preference: number; + /** Notes */ + notes: string; + application: components["schemas"]["ApplicationUnderReview"]; + /** Applicant Id */ + applicant_id: number; + /** Applicant Course Ranking */ + applicant_course_ranking: number; + }; + /** + * ApplicationReviewStatus + * @enum {string} + */ + ApplicationReviewStatus: "Not Preferred" | "Not Processed" | "Preferred"; + /** ApplicationUnderReview */ + ApplicationUnderReview: { + /** Id */ + id?: number | null; + /** Type */ + type: string; + applicant: components["schemas"]["PublicUser"]; + /** Applicant Name */ + applicant_name: string; + /** Academic Hours */ + academic_hours: number | null; + /** Extracurriculars */ + extracurriculars: string | null; + /** Expected Graduation */ + expected_graduation: string | null; + /** Program Pursued */ + program_pursued: string | null; + /** Other Programs */ + other_programs: string | null; + /** Gpa */ + gpa: number | null; + /** Comp Gpa */ + comp_gpa: number | null; + comp_227: components["schemas"]["Comp227"] | null; + /** Intro Video Url */ + intro_video_url: string | null; + /** Prior Experience */ + prior_experience: string | null; + /** Service Experience */ + service_experience: string | null; + /** Additional Experience */ + additional_experience: string | null; + /** Ta Experience */ + ta_experience: string | null; + /** Best Moment */ + best_moment: string | null; + /** Desired Improvement */ + desired_improvement: string | null; + /** Advisor */ + advisor: string | null; + }; + /** + * ArticleDraft + * @description Data for an article draft (for creation and editing). + */ + ArticleDraft: { + /** Id */ + id?: number | null; + /** Slug */ + slug: string; + state: components["schemas"]["ArticleState"]; + /** Title */ + title: string; + /** Image Url */ + image_url: string; + /** Synopsis */ + synopsis: string; + /** Body */ + body: string; + /** + * Published + * Format: date-time + */ + published: string; + /** Last Modified */ + last_modified: string | null; + /** Is Announcement */ + is_announcement: boolean; + /** Organization Id */ + organization_id: number | null; + /** Authors */ + authors: components["schemas"]["PublicUser"][]; + }; + /** + * ArticleOverview + * @description Data for an article. + */ + ArticleOverview: { + /** Id */ + id: number; + /** Slug */ + slug: string; + state: components["schemas"]["ArticleState"]; + /** Title */ + title: string; + /** Image Url */ + image_url: string; + /** Synopsis */ + synopsis: string; + /** Body */ + body: string; + /** + * Published + * Format: date-time + */ + published: string; + /** Last Modified */ + last_modified: string | null; + /** Is Announcement */ + is_announcement: boolean; + /** Organization Id */ + organization_id: number | null; + /** Organization Slug */ + organization_slug: string | null; + /** Organization Logo */ + organization_logo: string | null; + /** Organization Name */ + organization_name: string | null; + /** Authors */ + authors: components["schemas"]["PublicUser"][]; + }; + /** + * ArticleState + * @description Enum for the state of an article. + * @enum {string} + */ + ArticleState: "Draft" | "Published" | "Archived"; + /** Body_create_recurring_office_hours_api_office_hours__site_id__recurring_post */ + Body_create_recurring_office_hours_api_office_hours__site_id__recurring_post: { + oh: components["schemas"]["NewOfficeHours"]; + recur: components["schemas"]["NewOfficeHoursRecurrencePattern"]; + }; + /** Body_update_recurring_office_hours_api_office_hours__site_id__recurring_put */ + Body_update_recurring_office_hours_api_office_hours__site_id__recurring_put: { + oh: components["schemas"]["OfficeHours"]; + recur: components["schemas"]["NewOfficeHoursRecurrencePattern"]; + }; + /** CSVModel */ + CSVModel: { + /** Csv Data */ + csv_data: string; + }; + /** + * CatalogSection + * @description Pydantic model that represents a section for the catalog page. + */ + CatalogSection: { + /** Id */ + id?: number | null; + /** Subject Code */ + subject_code: string; + /** Course Number */ + course_number: string; + /** Section Number */ + section_number: string; + /** Title */ + title: string; + /** Meeting Pattern */ + meeting_pattern: string; + /** Description */ + description: string; + lecture_room?: components["schemas"]["Room"] | null; + /** Instructors */ + instructors: components["schemas"]["PublicUser"][]; + /** Enrolled */ + enrolled: number; + /** Total Seats */ + total_seats: number; + }; + /** CatalogSectionIdentity */ + CatalogSectionIdentity: { + /** Id */ + id?: number | null; + /** Subject Code */ + subject_code: string; + /** Course Number */ + course_number: string; + /** Section Number */ + section_number: string; + /** Title */ + title: string; + }; + /** + * Comp227 + * @enum {string} + */ + Comp227: "Monetary compensation only" | "COMP 227 credit only" | "Open to either 227 credit or compensation"; + /** + * ConflictCheck + * @description Model that embeds potential for conflicts when making assignments. + */ + ConflictCheck: { + /** Application Id */ + application_id: number; + /** Assignments */ + assignments: components["schemas"]["HiringAssignmentSummaryOverview"][]; + /** Priorities */ + priorities: components["schemas"]["ApplicationPriority"][]; + }; + /** + * Course + * @description Pydantic model to represent a `Course`. + * + * This model is based on the `CourseEntity` model, which defines the shape + * of the `Course` database in the PostgreSQL database + */ + Course: { + /** Id */ + id: string; + /** Subject Code */ + subject_code: string; + /** Number */ + number: string; + /** Title */ + title: string; + /** Description */ + description: string; + /** Credit Hours */ + credit_hours: number; + }; + /** + * CourseDetails + * @description Pydantic model to represent a `Course`, including back-populated + * relationship fields. + * + * This model is based on the `CourseEntity` model, which defines the shape + * of the `Course` database in the PostgreSQL database. + */ + CourseDetails: { + /** Id */ + id: string; + /** Subject Code */ + subject_code: string; + /** Number */ + number: string; + /** Title */ + title: string; + /** Description */ + description: string; + /** Credit Hours */ + credit_hours: number; + /** Sections */ + sections: components["schemas"]["Section"][]; + }; + /** CourseMemberOverview */ + CourseMemberOverview: { + /** Pid */ + pid: number; + /** First Name */ + first_name: string; + /** Last Name */ + last_name: string; + /** Email */ + email: string; + /** Pronouns */ + pronouns: string; + /** Section Number */ + section_number: string; + /** Role */ + role: string; + }; + /** + * CourseSite + * @description Pydantic model to represent a `CourseSite`. + * + * This model is based on the `CourseSiteEntity` model, which defines the shape + * of the `OfficeHoursSection` database in the PostgreSQL database. + */ + CourseSite: { + /** Id */ + id: number; + /** Title */ + title: string; + /** Term Id */ + term_id: string; + }; + /** CourseSiteOverview */ + CourseSiteOverview: { + /** Id */ + id: number; + /** Term Id */ + term_id: string; + /** Subject Code */ + subject_code: string; + /** Number */ + number: string; + /** Title */ + title: string; + /** Role */ + role: string; + /** Sections */ + sections: components["schemas"]["SectionOverview"][]; + /** Gtas */ + gtas: components["schemas"]["PublicUser"][]; + /** Utas */ + utas: components["schemas"]["PublicUser"][]; + }; + /** CreateSampleItemRequest */ + CreateSampleItemRequest: { + /** Name */ + name: string; + /** Starting Price */ + starting_price: number; + }; + /** CreateSampleItemResponse */ + CreateSampleItemResponse: { + /** Id */ + id: number; + }; + /** + * EditedSection + * @description Pydantic model to represent a `EditedSection`. + * + * This model is based on the `SectionEntity` model, which defines the shape + * of the `Section` database in the PostgreSQL database + */ + EditedSection: { + /** Id */ + id?: number | null; + /** Course Id */ + course_id: string; + /** Number */ + number: string; + /** Term Id */ + term_id: string; + /** Meeting Pattern */ + meeting_pattern: string; + lecture_room?: components["schemas"]["Room"] | null; + /** Override Title */ + override_title: string; + /** Override Description */ + override_description: string; + /** Enrolled */ + enrolled: number; + /** Total Seats */ + total_seats: number; + /** Instructors */ + instructors: components["schemas"]["PublicUser"][]; + }; + /** + * EventDraft + * @description Represents the model used to create new events. + */ + EventDraft: { + /** Id */ + id?: number | null; + /** Name */ + name: string; + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + /** Location */ + location: string; + /** Description */ + description: string; + /** Registration Limit */ + registration_limit: number; + /** Organization Slug */ + organization_slug: string; + /** + * Organizers + * @default [] + */ + organizers: components["schemas"]["PublicUser"][]; + /** Image Url */ + image_url?: string | null; + /** Override Registration Url */ + override_registration_url?: string | null; + }; + /** EventOverview */ + EventOverview: { + /** Id */ + id: number; + /** Name */ + name: string; + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + /** Location */ + location: string; + /** Description */ + description: string; + /** Public */ + public: boolean; + /** Number Registered */ + number_registered: number; + /** Registration Limit */ + registration_limit: number; + /** Organization Id */ + organization_id: number; + /** Organization Slug */ + organization_slug: string; + /** Organization Icon */ + organization_icon: string; + /** Organization Name */ + organization_name: string; + /** Organizers */ + organizers: components["schemas"]["PublicUser"][]; + user_registration_type: components["schemas"]["RegistrationType"] | null; + /** Image Url */ + image_url: string | null; + /** Override Registration Url */ + override_registration_url: string | null; + }; + /** + * EventPaginationParams + * @description Parameters passed from the client to paginate event results. + */ + EventPaginationParams: { + /** + * Page + * @default 0 + */ + page: number; + /** + * Page Size + * @default 10 + */ + page_size: number; + /** + * Order By + * @default + */ + order_by: string; + /** + * Filter + * @default + */ + filter: string; + /** + * Ascending + * @default true + */ + ascending: string; + /** + * Range Start + * @default + */ + range_start: string; + /** + * Range End + * @default + */ + range_end: string; + }; + /** EventStatusOverview */ + EventStatusOverview: { + featured: components["schemas"]["EventOverview"] | null; + /** Registered */ + registered: components["schemas"]["EventOverview"][]; + }; + /** FactsModel */ + FactsModel: { + /** Users */ + users: number; + /** Roles */ + roles: number; + /** Terms */ + terms: number; + /** Courses */ + courses: number; + /** Sections */ + sections: number; + /** Rooms */ + rooms: number; + /** Organizations */ + organizations: number; + /** Articles */ + articles: number; + }; + /** GetSampleItemResponse */ + GetSampleItemResponse: { + /** Id */ + id: number; + /** Name */ + name: string; + /** Price */ + price: number; + }; + /** GetSampleItemsResponse */ + GetSampleItemsResponse: { + /** Items */ + items: components["schemas"]["GetSampleItemsResponse_Item"][]; + }; + /** GetSampleItemsResponse_Item */ + GetSampleItemsResponse_Item: { + /** Id */ + id: number; + /** Name */ + name: string; + /** Price */ + price: number; + }; + /** HTTPValidationError */ + HTTPValidationError: { + /** Detail */ + detail?: components["schemas"]["ValidationError"][]; + }; + /** HiringAdminCourseOverview */ + HiringAdminCourseOverview: { + /** Assignments */ + assignments: components["schemas"]["HiringAssignmentOverview"][]; + /** Reviews */ + reviews: components["schemas"]["ApplicationReviewOverview-Output"][]; + /** Instructor Preferences */ + instructor_preferences: components["schemas"]["PublicUser"][]; + }; + /** HiringAdminOverview */ + HiringAdminOverview: { + /** Sites */ + sites: components["schemas"]["HiringCourseSiteOverview"][]; + }; + /** HiringAssignmentDraft */ + HiringAssignmentDraft: { + /** Id */ + id?: number | null; + /** User Id */ + user_id: number; + /** Term Id */ + term_id: string; + /** Course Site Id */ + course_site_id: number; + /** Application Review Id */ + application_review_id?: number | null; + level: components["schemas"]["HiringLevel"]; + status: components["schemas"]["HiringAssignmentStatus"]; + /** Position Number */ + position_number: string; + /** Epar */ + epar: string; + /** I9 */ + i9: boolean; + /** Notes */ + notes: string; + /** + * Created + * Format: date-time + */ + created: string; + /** + * Modified + * Format: date-time + */ + modified: string; + }; + /** HiringAssignmentOverview */ + HiringAssignmentOverview: { + /** Id */ + id?: number | null; + user: components["schemas"]["PublicUser"]; + level: components["schemas"]["HiringLevel"]; + status: components["schemas"]["HiringAssignmentStatus"]; + /** Position Number */ + position_number: string; + /** Epar */ + epar: string; + /** I9 */ + i9: boolean; + /** Notes */ + notes: string; + }; + /** + * HiringAssignmentStatus + * @enum {string} + */ + HiringAssignmentStatus: "Draft" | "Commit" | "Final"; + /** + * HiringAssignmentSummaryOverview + * @description Model specific for the summary page. + */ + HiringAssignmentSummaryOverview: { + /** Id */ + id?: number | null; + /** Application Review Id */ + application_review_id?: number | null; + /** Course Site Id */ + course_site_id?: number | null; + /** Course */ + course?: string | null; + user: components["schemas"]["User"]; + /** Instructors */ + instructors: string; + level: components["schemas"]["HiringLevel"]; + status: components["schemas"]["HiringAssignmentStatus"]; + /** Position Number */ + position_number: string; + /** Epar */ + epar: string; + /** I9 */ + i9: boolean; + /** Notes */ + notes: string; + }; + /** HiringCourseSiteOverview */ + HiringCourseSiteOverview: { + /** Course Site Id */ + course_site_id: number; + /** Sections */ + sections: components["schemas"]["CatalogSectionIdentity"][]; + /** Instructors */ + instructors: components["schemas"]["PublicUser"][]; + /** Total Enrollment */ + total_enrollment: number; + /** Total Cost */ + total_cost: number; + /** Coverage */ + coverage: number; + /** Assignments */ + assignments: components["schemas"]["HiringAssignmentOverview"][]; + }; + /** HiringLevel */ + HiringLevel: { + /** Id */ + id?: number | null; + /** Title */ + title: string; + /** Salary */ + salary: number; + /** Load */ + load: number; + classification: components["schemas"]["HiringLevelClassification"]; + /** Is Active */ + is_active: boolean; + }; + /** + * HiringLevelClassification + * @enum {string} + */ + HiringLevelClassification: "Instructor of Record" | "PhD" | "MS" | "UG"; + /** HiringStatus */ + "HiringStatus-Input": { + /** Not Preferred */ + not_preferred: components["schemas"]["ApplicationReviewOverview-Input"][]; + /** Not Processed */ + not_processed: components["schemas"]["ApplicationReviewOverview-Input"][]; + /** Preferred */ + preferred: components["schemas"]["ApplicationReviewOverview-Input"][]; + }; + /** HiringStatus */ + "HiringStatus-Output": { + /** Not Preferred */ + not_preferred: components["schemas"]["ApplicationReviewOverview-Output"][]; + /** Not Processed */ + not_processed: components["schemas"]["ApplicationReviewOverview-Output"][]; + /** Preferred */ + preferred: components["schemas"]["ApplicationReviewOverview-Output"][]; + }; + /** + * NewCourseSite + * @description Pydantic model to represent a new course site. + */ + NewCourseSite: { + /** Title */ + title: string; + /** Term Id */ + term_id: string; + /** Section Ids */ + section_ids: number[]; + }; + /** + * NewOfficeHours + * @description Pydantic model to represent new office hours. + * + * This model is based on the `OfficeHoursEntity` model, which defines the shape + * of the office hours database in the PostgreSQL database. + */ + NewOfficeHours: { + type: components["schemas"]["OfficeHoursEventType"]; + mode: components["schemas"]["OfficeHoursEventModeType"]; + /** Description */ + description: string; + /** Location Description */ + location_description: string; + /** + * Start Time + * Format: date-time + */ + start_time: string; + /** + * End Time + * Format: date-time + */ + end_time: string; + /** Course Site Id */ + course_site_id: number; + /** Room Id */ + room_id: string; + /** Recurrence Pattern Id */ + recurrence_pattern_id: number | null; + }; + /** + * NewOfficeHoursRecurrencePattern + * @description Pydantic model to represent new office hours recurrence pattern. + * + * This model is based on the `OfficeHoursRecurrencePatternEntity` model, which + * defines the shape of the office hours recurrence pattern table in the + * PostgreSQL database. + */ + NewOfficeHoursRecurrencePattern: { + /** + * Start Date + * Format: date-time + */ + start_date: string; + /** + * End Date + * Format: date-time + */ + end_date: string; + /** Recur Monday */ + recur_monday: boolean; + /** Recur Tuesday */ + recur_tuesday: boolean; + /** Recur Wednesday */ + recur_wednesday: boolean; + /** Recur Thursday */ + recur_thursday: boolean; + /** Recur Friday */ + recur_friday: boolean; + /** Recur Saturday */ + recur_saturday: boolean; + /** Recur Sunday */ + recur_sunday: boolean; + }; + /** + * NewOfficeHoursTicket + * @description Pydantic model to represent a new ticket. + * + * This model is based on the `OfficeHoursTicketEntity` model, which defines the shape + * of the `OfficeHoursTicket` database in the PostgreSQL database. + */ + NewOfficeHoursTicket: { + /** Description */ + description: string; + type: components["schemas"]["TicketType"]; + /** Office Hours Id */ + office_hours_id: number; + }; + /** OfficeHourEventRoleOverview */ + OfficeHourEventRoleOverview: { + /** Role */ + role: string; + }; + /** OfficeHourGetHelpOverview */ + OfficeHourGetHelpOverview: { + /** Event Type */ + event_type: string; + /** Event Mode */ + event_mode: string; + /** + * Event Start Time + * Format: date-time + */ + event_start_time: string; + /** + * Event End Time + * Format: date-time + */ + event_end_time: string; + /** Event Location */ + event_location: string; + /** Event Location Description */ + event_location_description: string; + ticket: components["schemas"]["OfficeHourTicketOverview"] | null; + /** Queue Position */ + queue_position: number; + }; + /** OfficeHourQueueOverview */ + OfficeHourQueueOverview: { + /** Id */ + id: number; + /** Type */ + type: string; + /** + * Start Time + * Format: date-time + */ + start_time: string; + /** + * End Time + * Format: date-time + */ + end_time: string; + active: components["schemas"]["OfficeHourTicketOverview"] | null; + /** Other Called */ + other_called: components["schemas"]["OfficeHourTicketOverview"][]; + /** Queue */ + queue: components["schemas"]["OfficeHourTicketOverview"][]; + /** Personal Tickets Called */ + personal_tickets_called: number; + /** Average Minutes */ + average_minutes: number; + /** Total Tickets Called */ + total_tickets_called: number; + /** History */ + history: components["schemas"]["OfficeHourTicketOverview"][]; + }; + /** OfficeHourTicketOverview */ + OfficeHourTicketOverview: { + /** Id */ + id: number; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** Called At */ + called_at: string | null; + /** Closed At */ + closed_at: string | null; + /** State */ + state: string; + /** Type */ + type: string; + /** Description */ + description: string; + /** Creators */ + creators: components["schemas"]["PublicUser"][]; + caller: components["schemas"]["PublicUser"] | null; + /** Has Concerns */ + has_concerns: boolean | null; + /** Caller Notes */ + caller_notes: string | null; + }; + /** + * OfficeHours + * @description Pydantic model to represent an `OfficeHours`. + * + * This model is based on the `OfficeHoursEntity` model, which defines the shape + * of the `OfficeHours` database in the PostgreSQL database. + */ + OfficeHours: { + type: components["schemas"]["OfficeHoursEventType"]; + mode: components["schemas"]["OfficeHoursEventModeType"]; + /** Description */ + description: string; + /** Location Description */ + location_description: string; + /** + * Start Time + * Format: date-time + */ + start_time: string; + /** + * End Time + * Format: date-time + */ + end_time: string; + /** Course Site Id */ + course_site_id: number; + /** Room Id */ + room_id: string; + /** Recurrence Pattern Id */ + recurrence_pattern_id: number | null; + /** Id */ + id: number; + }; + /** + * OfficeHoursEventModeType + * @description Determines the office hours event mode. + * @enum {integer} + */ + OfficeHoursEventModeType: 0 | 1 | 2; + /** + * OfficeHoursEventType + * @description Determines the type of an office hours event. + * @enum {integer} + */ + OfficeHoursEventType: 0 | 1 | 2; + /** OfficeHoursOverview */ + OfficeHoursOverview: { + /** Id */ + id: number; + /** Type */ + type: string; + /** Mode */ + mode: string; + /** Description */ + description: string; + /** Location */ + location: string; + /** Location Description */ + location_description: string; + /** + * Start Time + * Format: date-time + */ + start_time: string; + /** + * End Time + * Format: date-time + */ + end_time: string; + /** Queued */ + queued: number; + /** Total Tickets */ + total_tickets: number; + /** Recurrence Pattern Id */ + recurrence_pattern_id: number | null; + }; + /** + * OfficeHoursRecurrencePattern + * @description Pydantic model to represent office hours recurrence pattern. + * + * This model is based on the `OfficeHoursRecurrencePatternEntity` model, which + * defines the shape of the office hours recurrence pattern table in the + * PostgreSQL database. + */ + OfficeHoursRecurrencePattern: { + /** + * Start Date + * Format: date-time + */ + start_date: string; + /** + * End Date + * Format: date-time + */ + end_date: string; + /** Recur Monday */ + recur_monday: boolean; + /** Recur Tuesday */ + recur_tuesday: boolean; + /** Recur Wednesday */ + recur_wednesday: boolean; + /** Recur Thursday */ + recur_thursday: boolean; + /** Recur Friday */ + recur_friday: boolean; + /** Recur Saturday */ + recur_saturday: boolean; + /** Recur Sunday */ + recur_sunday: boolean; + /** Id */ + id: number; + }; + /** + * OfficeHoursTicketClosePayload + * @description Pydantic model to represent a payload for deleting a ticket. + */ + OfficeHoursTicketClosePayload: { + /** Has Concerns */ + has_concerns: boolean; + /** Caller Notes */ + caller_notes: string; + }; + /** + * OfficeHoursTicketStatistics + * @description Pydantic model to represent a user's ticket statistics. + * + * This model is based on the `OfficeHoursTicketEntity` model, which defines the shape + * of the `OfficeHoursTicket` database in the PostgreSQL database. + */ + OfficeHoursTicketStatistics: { + /** Total Tickets */ + total_tickets: number; + /** Total Tickets Weekly */ + total_tickets_weekly: number; + /** Average Wait Time */ + average_wait_time: number; + /** Average Duration */ + average_duration: number; + /** Total Conceptual */ + total_conceptual: number; + /** Total Assignment */ + total_assignment: number; + }; + /** + * OperatingHours + * @description The operating hours of the XL. + */ + OperatingHours: { + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + /** Id */ + id?: number | null; + }; + /** + * Organization + * @description Pydantic model to represent an `Organization`. + * + * This model is based on the `OrganizationEntity` model, which defines the shape + * of the `Organization` database in the PostgreSQL database. + */ + Organization: { + /** Id */ + id?: number | null; + /** Name */ + name: string; + /** Shorthand */ + shorthand: string; + /** Slug */ + slug: string; + /** Logo */ + logo: string; + /** Short Description */ + short_description: string; + /** Long Description */ + long_description: string; + /** Website */ + website: string; + /** Email */ + email: string; + /** Instagram */ + instagram: string; + /** Linked In */ + linked_in: string; + /** Youtube */ + youtube: string; + /** Heel Life */ + heel_life: string; + /** Public */ + public: boolean; + }; + /** + * OrganizationDetails + * @description Pydantic model to represent an `Organization`, including back-populated + * relationship fields. + * + * This model is based on the `OrganizationEntity` model, which defines the shape + * of the `Organization` database in the PostgreSQL database. + */ + OrganizationDetails: { + /** Id */ + id?: number | null; + /** Name */ + name: string; + /** Shorthand */ + shorthand: string; + /** Slug */ + slug: string; + /** Logo */ + logo: string; + /** Short Description */ + short_description: string; + /** Long Description */ + long_description: string; + /** Website */ + website: string; + /** Email */ + email: string; + /** Instagram */ + instagram: string; + /** Linked In */ + linked_in: string; + /** Youtube */ + youtube: string; + /** Heel Life */ + heel_life: string; + /** Public */ + public: boolean; + /** Events */ + events: components["schemas"]["EventOverview"][]; + }; + /** Paginated[ArticleOverview] */ + Paginated_ArticleOverview_: { + /** Items */ + items: components["schemas"]["ArticleOverview"][]; + /** Length */ + length: number; + /** Params */ + params: components["schemas"]["PaginationParams"] | components["schemas"]["EventPaginationParams"] | components["schemas"]["TicketPaginationParams"]; + }; + /** Paginated[CourseMemberOverview] */ + Paginated_CourseMemberOverview_: { + /** Items */ + items: components["schemas"]["CourseMemberOverview"][]; + /** Length */ + length: number; + /** Params */ + params: components["schemas"]["PaginationParams"] | components["schemas"]["EventPaginationParams"] | components["schemas"]["TicketPaginationParams"]; + }; + /** Paginated[EventOverview] */ + Paginated_EventOverview_: { + /** Items */ + items: components["schemas"]["EventOverview"][]; + /** Length */ + length: number; + /** Params */ + params: components["schemas"]["PaginationParams"] | components["schemas"]["EventPaginationParams"] | components["schemas"]["TicketPaginationParams"]; + }; + /** Paginated[HiringAssignmentOverview] */ + Paginated_HiringAssignmentOverview_: { + /** Items */ + items: components["schemas"]["HiringAssignmentOverview"][]; + /** Length */ + length: number; + /** Params */ + params: components["schemas"]["PaginationParams"] | components["schemas"]["EventPaginationParams"] | components["schemas"]["TicketPaginationParams"]; + }; + /** Paginated[HiringAssignmentSummaryOverview] */ + Paginated_HiringAssignmentSummaryOverview_: { + /** Items */ + items: components["schemas"]["HiringAssignmentSummaryOverview"][]; + /** Length */ + length: number; + /** Params */ + params: components["schemas"]["PaginationParams"] | components["schemas"]["EventPaginationParams"] | components["schemas"]["TicketPaginationParams"]; + }; + /** Paginated[OfficeHourTicketOverview] */ + Paginated_OfficeHourTicketOverview_: { + /** Items */ + items: components["schemas"]["OfficeHourTicketOverview"][]; + /** Length */ + length: number; + /** Params */ + params: components["schemas"]["PaginationParams"] | components["schemas"]["EventPaginationParams"] | components["schemas"]["TicketPaginationParams"]; + }; + /** Paginated[OfficeHoursOverview] */ + Paginated_OfficeHoursOverview_: { + /** Items */ + items: components["schemas"]["OfficeHoursOverview"][]; + /** Length */ + length: number; + /** Params */ + params: components["schemas"]["PaginationParams"] | components["schemas"]["EventPaginationParams"] | components["schemas"]["TicketPaginationParams"]; + }; + /** Paginated[User] */ + Paginated_User_: { + /** Items */ + items: components["schemas"]["User"][]; + /** Length */ + length: number; + /** Params */ + params: components["schemas"]["PaginationParams"] | components["schemas"]["EventPaginationParams"] | components["schemas"]["TicketPaginationParams"]; + }; + /** + * PaginationParams + * @description Parameters passed from the client to paginate results. + */ + PaginationParams: { + /** + * Page + * @default 0 + */ + page: number; + /** + * Page Size + * @default 10 + */ + page_size: number; + /** + * Order By + * @default + */ + order_by: string; + /** + * Filter + * @default + */ + filter: string; + }; + /** + * Permission + * @description Pydantic model to represent a `Permission`. + * + * This model is based on the `PermissionEntity` model, which defines the shape + * of the `Organization` database in the PostgreSQL database. + * + * A permission grants access to an action on a resource. + */ + Permission: { + /** Id */ + id?: number | null; + /** Action */ + action: string; + /** Resource */ + resource: string; + }; + /** PrimaryOfficeHoursDetails */ + PrimaryOfficeHoursDetails: { + type: components["schemas"]["OfficeHoursEventType"]; + mode: components["schemas"]["OfficeHoursEventModeType"]; + /** Description */ + description: string; + /** Location Description */ + location_description: string; + /** + * Start Time + * Format: date-time + */ + start_time: string; + /** + * End Time + * Format: date-time + */ + end_time: string; + /** Course Site Id */ + course_site_id: number; + /** Room Id */ + room_id: string; + /** Recurrence Pattern Id */ + recurrence_pattern_id: number | null; + /** Id */ + id: number; + recurrence_pattern?: components["schemas"]["OfficeHoursRecurrencePattern"] | null; + }; + /** + * ProfileForm + * @description Pydantic model to represent fields for a form when updating + * a user profile on the frontend. + * + * This model is based on the `UserEntity` model, which defines the shape + * of the `User` database in the PostgreSQL database + */ + ProfileForm: { + /** First Name */ + first_name: string; + /** Last Name */ + last_name: string; + /** Pronouns */ + pronouns: string; + /** Email */ + email: string; + /** + * Accepted Community Agreement + * @default false + */ + accepted_community_agreement: boolean; + /** Bio */ + bio?: string | null; + /** Linkedin */ + linkedin?: string | null; + /** Website */ + website?: string | null; + }; + /** + * PublicUser + * @description Pydantic model to represent public information about users to avoid + * exposing sensitive information about them. + * + * This model is based on the `UserEntity` model, which defines the shape + * of the `User` database in the PostgreSQL database + */ + PublicUser: { + /** Id */ + id: number | null; + /** Onyen */ + onyen: string; + /** First Name */ + first_name: string; + /** Last Name */ + last_name: string; + /** Pronouns */ + pronouns: string; + /** Email */ + email: string; + /** Github Avatar */ + github_avatar?: string | null; + /** Github */ + github?: string | null; + /** Bio */ + bio?: string | null; + /** Linkedin */ + linkedin?: string | null; + /** Website */ + website?: string | null; + }; + /** + * RegistrationType + * @description Determines the type of an event registration. + * @enum {integer} + */ + RegistrationType: 0 | 1; + /** ReleasedHiringAssignment */ + ReleasedHiringAssignment: { + /** Course */ + course: string; + /** Instructors */ + instructors: components["schemas"]["PublicUser"][]; + /** Level Title */ + level_title: string; + }; + /** Reservation */ + Reservation: { + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + /** Id */ + id: number; + state: components["schemas"]["ReservationState"]; + /** + * Users + * @default [] + */ + users: components["schemas"]["User"][]; + /** + * Seats + * @default [] + */ + seats: components["schemas"]["Seat"][]; + room?: components["schemas"]["Room"] | null; + /** + * Walkin + * @default false + */ + walkin: boolean; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** ReservationMapDetails */ + ReservationMapDetails: { + /** + * Reserved Date Map + * @default {} + */ + reserved_date_map: { + [key: string]: number[]; + }; + /** + * Capacity Map + * @default {} + */ + capacity_map: { + [key: string]: number; + }; + /** + * Room Type Map + * @default {} + */ + room_type_map: { + [key: string]: string; + }; + /** Operating Hours Start */ + operating_hours_start?: string | null; + /** Operating Hours End */ + operating_hours_end?: string | null; + /** Number Of Time Slots */ + number_of_time_slots?: number | null; + }; + /** ReservationOverview */ + ReservationOverview: { + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + /** + * Seats + * @default [] + */ + seats: components["schemas"]["Seat"][]; + room?: components["schemas"]["Room"] | null; + }; + /** ReservationPartial */ + ReservationPartial: { + /** Start */ + start?: string | null; + /** End */ + end?: string | null; + /** Id */ + id: number; + state?: components["schemas"]["ReservationState"] | null; + /** Users */ + users?: components["schemas"]["User"][] | null; + /** Seats */ + seats?: components["schemas"]["Seat"][] | null; + room?: components["schemas"]["Room"] | null; + /** Walkin */ + walkin?: boolean | null; + /** Created At */ + created_at?: string | null; + /** Updated At */ + updated_at?: string | null; + }; + /** ReservationRequest */ + ReservationRequest: { + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + /** + * Users + * @default [] + */ + users: components["schemas"]["UserIdentity"][]; + /** + * Seats + * @default [] + */ + seats: components["schemas"]["SeatIdentity"][]; + room?: components["schemas"]["RoomPartial"] | null; + }; + /** + * ReservationState + * @enum {string} + */ + ReservationState: "DRAFT" | "CONFIRMED" | "CHECKED_IN" | "CHECKED_OUT" | "CANCELLED"; + /** + * Role + * @description Pydantic model to represent a `Role`. + * + * This model is based on the `RoleEntity` model, which defines the shape + * of the `Role` database in the PostgreSQL database. + */ + Role: { + /** Id */ + id?: number | null; + /** Name */ + name: string; + }; + /** + * RoleDetails + * @description Pydantic model to represent a `Role`, including back-populated + * relationship fields. + * + * This model is based on the `RoleEntity` model, which defines the shape + * of the `Role` database in the PostgreSQL database. + */ + RoleDetails: { + /** Id */ + id?: number | null; + /** Name */ + name: string; + /** Permissions */ + permissions: components["schemas"]["Permission"][]; + /** Users */ + users: components["schemas"]["User"][]; + }; + /** Room */ + Room: { + /** Id */ + id: string; + /** + * Nickname + * @default + */ + nickname: string; + }; + /** + * RoomDetails + * @description Pydantic model to represent an `Room`, including back-populated + * relationship fields. + * + * This model is based on the `RoomEntity` model, which defines the shape + * of the `Room` database in the PostgreSQL database. + */ + RoomDetails: { + /** Id */ + id: string; + /** + * Nickname + * @default + */ + nickname: string; + /** Building */ + building: string; + /** Room */ + room: string; + /** Capacity */ + capacity: number; + /** Reservable */ + reservable: boolean; + /** + * Seats + * @default [] + */ + seats: components["schemas"]["Seat"][]; + /** Section Id */ + section_id?: number | null; + }; + /** RoomPartial */ + RoomPartial: { + /** Id */ + id: string; + }; + /** + * RosterRole + * @enum {string} + */ + RosterRole: "Student" | "UTA" | "GTA" | "Instructor"; + /** Seat */ + Seat: { + /** Id */ + id: number; + /** Title */ + title: string; + /** Shorthand */ + shorthand: string; + /** Reservable */ + reservable: boolean; + /** Has Monitor */ + has_monitor: boolean; + /** Sit Stand */ + sit_stand: boolean; + /** X */ + x: number; + /** Y */ + y: number; + }; + /** + * SeatAvailability + * @description A seat that is available for a given time range. + */ + SeatAvailability: { + /** Availability */ + availability: components["schemas"]["TimeRange"][]; + /** Id */ + id: number; + /** Title */ + title: string; + /** Shorthand */ + shorthand: string; + /** Reservable */ + reservable: boolean; + /** Has Monitor */ + has_monitor: boolean; + /** Sit Stand */ + sit_stand: boolean; + /** X */ + x: number; + /** Y */ + y: number; + }; + /** SeatIdentity */ + SeatIdentity: { + /** Id */ + id: number; + }; + /** + * Section + * @description Pydantic model to represent a `Section`. + * + * This model is based on the `SectionEntity` model, which defines the shape + * of the `Section` database in the PostgreSQL database + */ + Section: { + /** Id */ + id?: number | null; + /** Course Id */ + course_id: string; + /** Number */ + number: string; + /** Term Id */ + term_id: string; + /** Meeting Pattern */ + meeting_pattern: string; + lecture_room?: components["schemas"]["Room"] | null; + /** + * Staff + * @default [] + */ + staff: components["schemas"]["SectionMember"][]; + /** + * Office Hour Rooms + * @default [] + */ + office_hour_rooms: components["schemas"]["Room"][]; + /** Override Title */ + override_title: string; + /** Override Description */ + override_description: string; + /** Enrolled */ + enrolled: number; + /** Total Seats */ + total_seats: number; + }; + /** + * SectionDetails + * @description Pydantic model to represent an `Section`, including back-populated + * relationship fields. + * + * This model is based on the `SectionEntity` model, which defines the shape + * of the `Section` database in the PostgreSQL database. + */ + SectionDetails: { + /** Id */ + id?: number | null; + /** Course Id */ + course_id: string; + /** Number */ + number: string; + /** Term Id */ + term_id: string; + /** Meeting Pattern */ + meeting_pattern: string; + lecture_room?: components["schemas"]["Room"] | null; + /** + * Staff + * @default [] + */ + staff: components["schemas"]["SectionMember"][]; + /** + * Office Hour Rooms + * @default [] + */ + office_hour_rooms: components["schemas"]["Room"][]; + /** Override Title */ + override_title: string; + /** Override Description */ + override_description: string; + /** Enrolled */ + enrolled: number; + /** Total Seats */ + total_seats: number; + course: components["schemas"]["Course"]; + term: components["schemas"]["Term"]; + course_site: components["schemas"]["CourseSite"] | null; + /** Members */ + members: components["schemas"]["SectionMember"][]; + }; + /** + * SectionMember + * @description Pydantic model to represent the information about a user who is a + * staff of a section of a course. + * + * This model is based on the `UserEntity` model, which defines the shape + * of the `User` database in the PostgreSQL database + */ + SectionMember: { + /** Id */ + id?: number | null; + /** User Id */ + user_id?: number | null; + /** First Name */ + first_name: string; + /** Last Name */ + last_name: string; + /** Pronouns */ + pronouns: string; + member_role: components["schemas"]["RosterRole"]; + }; + /** SectionOverview */ + SectionOverview: { + /** Id */ + id: number; + /** Number */ + number: string; + /** Meeting Pattern */ + meeting_pattern: string; + /** Course Site Id */ + course_site_id: number | null; + /** Subject Code */ + subject_code: string; + /** Course Number */ + course_number: string; + /** Section Number */ + section_number: string; + }; + /** + * SignageAnnouncement + * @description Stores all fields sent as announcment data + */ + SignageAnnouncement: { + /** Title */ + title: string; + }; + /** + * SignageOfficeHours + * @description Stores necessary info for displaying the office hours signage widget + */ + SignageOfficeHours: { + /** Id */ + id: number; + /** Mode */ + mode: string; + /** Course */ + course: string; + /** Location */ + location: string; + /** Queued */ + queued: number; + }; + /** + * SignageOverviewFast + * @description Encapsulates frequent data for the tv. + */ + SignageOverviewFast: { + /** Active Office Hours */ + active_office_hours: components["schemas"]["SignageOfficeHours"][]; + /** Available Rooms */ + available_rooms: string[]; + /** Seat Availability */ + seat_availability: components["schemas"]["SeatAvailability"][]; + }; + /** + * SignageOverviewSlow + * @description Encapsulates less frequent data for the tv. + */ + SignageOverviewSlow: { + /** Newest News */ + newest_news: components["schemas"]["ArticleOverview"][]; + /** Events */ + events: components["schemas"]["EventOverview"][]; + /** Top Users */ + top_users: components["schemas"]["SignageProfile"][]; + /** Announcements */ + announcements: components["schemas"]["SignageAnnouncement"][]; + }; + /** + * SignageProfile + * @description Stores all fields needed to display a person on the leaderboard + */ + SignageProfile: { + /** First Name */ + first_name: string; + /** Last Name */ + last_name: string; + /** Github Avatar */ + github_avatar?: string | null; + }; + /** + * Status + * @description The status of the XL coworking space, including reservations, for a given user. + */ + Status: { + /** My Reservations */ + my_reservations: components["schemas"]["Reservation"][]; + /** Seat Availability */ + seat_availability: components["schemas"]["SeatAvailability"][]; + /** Operating Hours */ + operating_hours: components["schemas"]["OperatingHours"][]; + }; + /** TeachingSectionOverview */ + TeachingSectionOverview: { + /** Id */ + id: number; + /** Subject Code */ + subject_code: string; + /** Course Number */ + course_number: string; + /** Section Number */ + section_number: string; + /** Title */ + title: string; + }; + /** + * Term + * @description Pydantic model to represent a `Term`. + * + * This model is based on the `TermEntity` model, which defines the shape + * of the `Term` database in the PostgreSQL database + */ + Term: { + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + /** Id */ + id: string; + /** Name */ + name: string; + /** Applications Open */ + applications_open?: string | null; + /** Applications Close */ + applications_close?: string | null; + }; + /** + * TermDetails + * @description Pydantic model to represent an `Term`, including back-populated + * relationship fields. + * + * This model is based on the `TermEntity` model, which defines the shape + * of the `Term` database in the PostgreSQL database. + */ + TermDetails: { + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + /** Id */ + id: string; + /** Name */ + name: string; + /** Applications Open */ + applications_open?: string | null; + /** Applications Close */ + applications_close?: string | null; + /** Course Sections */ + course_sections: components["schemas"]["Section"][]; + }; + /** TermOverview */ + TermOverview: { + /** Id */ + id: string; + /** Name */ + name: string; + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + /** Sites */ + sites: components["schemas"]["CourseSiteOverview"][]; + /** Teaching No Site */ + teaching_no_site: components["schemas"]["TeachingSectionOverview"][]; + }; + /** + * TicketPaginationParams + * @description Parameters passed from the client to paginate ticket results. + */ + TicketPaginationParams: { + /** + * Page + * @default 0 + */ + page: number; + /** + * Page Size + * @default 10 + */ + page_size: number; + /** + * Order By + * @default + */ + order_by: string; + /** + * Filter + * @default + */ + filter: string; + /** + * Range Start + * @default + */ + range_start: string; + /** + * Range End + * @default + */ + range_end: string; + /** Student Ids */ + student_ids: number[]; + /** Staff Ids */ + staff_ids: number[]; + }; + /** + * TicketType + * @description Determines the type of a ticket. + * @enum {integer} + */ + TicketType: 0 | 1; + /** + * TimeRange + * @description A time range with a start and end. + */ + TimeRange: { + /** + * Start + * Format: date-time + */ + start: string; + /** + * End + * Format: date-time + */ + end: string; + }; + /** + * UnregisteredUser + * @description Pydantic model to represent an `User` that is newly created. + * This model is used as the request to create a user in the service. + * + * This model is based on the `UserEntity` model, which defines the shape + * of the `User` database in the PostgreSQL database. + */ + UnregisteredUser: { + /** Pid */ + pid: number; + /** Onyen */ + onyen: string; + /** + * First Name + * @default + */ + first_name: string; + /** + * Last Name + * @default + */ + last_name: string; + /** + * Email + * @default + */ + email: string; + /** + * Pronouns + * @default + */ + pronouns: string; + }; + /** + * UpdatedCourseSite + * @description Pydantic model to represent a new course site. + */ + UpdatedCourseSite: { + /** Id */ + id: number; + /** Title */ + title: string; + /** Term Id */ + term_id: string; + /** Section Ids */ + section_ids: number[]; + /** Gtas */ + gtas: components["schemas"]["PublicUser"][]; + /** Utas */ + utas: components["schemas"]["PublicUser"][]; + /** Minimum Ticket Cooldown */ + minimum_ticket_cooldown?: number | null; + /** Max Tickets Per Day */ + max_tickets_per_day?: number | null; + }; + /** UploadResponse */ + UploadResponse: { + /** Uploaded */ + uploaded: number; + }; + /** + * User + * @description Pydantic model to represent a registered `User`. + * + * This model is based on the `UserEntity` model, which defines the shape + * of the `User` database in the PostgreSQL database + */ + User: { + /** Id */ + id?: number | null; + /** + * Pid + * @default 0 + */ + pid: number; + /** + * Onyen + * @default + */ + onyen: string; + /** + * First Name + * @default + */ + first_name: string; + /** + * Last Name + * @default + */ + last_name: string; + /** + * Email + * @default + */ + email: string; + /** + * Pronouns + * @default + */ + pronouns: string; + /** + * Github + * @default + */ + github: string; + /** Github Id */ + github_id?: number | null; + /** Github Avatar */ + github_avatar?: string | null; + /** + * Accepted Community Agreement + * @default false + */ + accepted_community_agreement: boolean; + /** Bio */ + bio?: string | null; + /** Linkedin */ + linkedin?: string | null; + /** Website */ + website?: string | null; + }; + /** + * UserDetails + * @description Pydantic model to represent a `User`, including the permissions + * a user has. + * + * This model is based on the `UserEntity` model, which defines the shape + * of the `Event` database in the PostgreSQL database. + */ + UserDetails: { + /** Id */ + id?: number | null; + /** + * Pid + * @default 0 + */ + pid: number; + /** + * Onyen + * @default + */ + onyen: string; + /** + * First Name + * @default + */ + first_name: string; + /** + * Last Name + * @default + */ + last_name: string; + /** + * Email + * @default + */ + email: string; + /** + * Pronouns + * @default + */ + pronouns: string; + /** + * Github + * @default + */ + github: string; + /** Github Id */ + github_id?: number | null; + /** Github Avatar */ + github_avatar?: string | null; + /** + * Accepted Community Agreement + * @default false + */ + accepted_community_agreement: boolean; + /** Bio */ + bio?: string | null; + /** Linkedin */ + linkedin?: string | null; + /** Website */ + website?: string | null; + /** + * Permissions + * @default [] + */ + permissions: components["schemas"]["Permission"][]; + /** + * Applications + * @default [] + */ + applications: components["schemas"]["Application-Output"][]; + /** + * Sections + * @default [] + */ + sections: components["schemas"]["Section"][]; + }; + /** + * UserIdentity + * @description Pydantic model to represent how `User`s are identified in the system. + * + * This model is based on the `UserEntity` model, which defines the shape + * of the `User` database in the PostgreSQL database. + */ + UserIdentity: { + /** Id */ + id?: number | null; + }; + /** ValidationError */ + ValidationError: { + /** Location */ + loc: (string | number)[]; + /** Message */ + msg: string; + /** Error Type */ + type: string; + }; + /** + * WelcomeOverview + * @description Encapsulates data for the welcome page. + */ + WelcomeOverview: { + announcement: components["schemas"]["ArticleOverview"] | null; + /** Latest News */ + latest_news: components["schemas"]["ArticleOverview"][]; + /** Operating Hours */ + operating_hours: components["schemas"]["OperatingHours"][]; + /** Upcoming Reservations */ + upcoming_reservations: components["schemas"]["ReservationOverview"][]; + /** Registered Events */ + registered_events: components["schemas"]["EventOverview"][]; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + get_coworking_status_api_coworking_status_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Status"]; + }; + }; + }; + }; + draft_reservation_api_coworking_reservation_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ReservationRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Reservation"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_reservation_api_coworking_reservation__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Reservation"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_reservation_api_coworking_reservation__id__put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ReservationPartial"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Reservation"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + cancel_reservation_api_coworking_reservation__id__delete: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Reservation"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_reservations_for_rooms_by_date_api_coworking_room_reservation__get: { + parameters: { + query: { + date: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ReservationMapDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_total_hours_study_room_reservations_api_coworking_user_reservations__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + }; + }; + get_operating_hours_api_coworking_operating_hours_get: { + parameters: { + query?: { + start?: string; + end?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OperatingHours"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + new_operating_hours_api_coworking_operating_hours_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TimeRange"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OperatingHours"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_operating_hours_api_coworking_operating_hours__id__delete: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_events_api_events_unauthenticated_paginate_get: { + parameters: { + query?: { + order_by?: string; + ascending?: string; + filter?: string; + range_start?: string; + range_end?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_EventOverview_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_events_api_events_paginate_get: { + parameters: { + query?: { + order_by?: string; + ascending?: string; + filter?: string; + range_start?: string; + range_end?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_EventOverview_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_status_api_events_unauthenticated_status_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EventStatusOverview"]; + }; + }; + }; + }; + get_status_api_events_status_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EventStatusOverview"]; + }; + }; + }; + }; + get_event_by_id_api_events__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EventOverview"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_event_api_events__id__delete: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_event_api_events_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["EventDraft"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EventOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + new_event_api_events_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["EventDraft"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EventOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_event_registration_of_user_api_events__event_id__registration_get: { + parameters: { + query?: never; + header?: never; + path: { + event_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PublicUser"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + register_for_event_api_events__event_id__registration_post: { + parameters: { + query?: { + user_id?: number; + }; + header?: never; + path: { + event_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PublicUser"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + unregister_for_event_api_events__event_id__registration_delete: { + parameters: { + query?: { + user_id?: number; + }; + header?: never; + path: { + event_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_event_registrations_api_events__event_id__registrations_get: { + parameters: { + query?: never; + header?: never; + path: { + event_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PublicUser"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_registered_users_of_event_api_events__event_id__registrations_users_get: { + parameters: { + query?: { + page?: number; + page_size?: number; + order_by?: string; + filter?: string; + }; + header?: never; + path: { + event_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_User_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + search_api_user_get: { + parameters: { + query: { + q: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["User"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_by_onyen_api_user__onyen__get: { + parameters: { + query?: never; + header?: never; + path: { + onyen: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_organizations_api_organizations_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Organization"][]; + }; + }; + }; + }; + update_organization_api_organizations_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Organization"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Organization"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + new_organization_api_organizations_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Organization"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Organization"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_organization_by_slug_api_organizations__slug__get: { + parameters: { + query?: never; + header?: never; + path: { + slug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OrganizationDetails"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_organization_api_organizations__slug__delete: { + parameters: { + query?: never; + header?: never; + path: { + slug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + active_and_upcoming_reservations_for_xl_api_coworking_ambassador_xl_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Reservation"][]; + }; + }; + }; + }; + active_and_upcoming_reservations_for_rooms_api_coworking_ambassador_rooms_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Reservation"][]; + }; + }; + }; + }; + checkin_reservation_api_coworking_ambassador_checkin_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ReservationPartial"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Reservation"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_walkin_reservation_api_coworking_ambassador_reservation_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ReservationRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Reservation"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_user_courses_api_my_courses_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TermOverview"][]; + }; + }; + }; + }; + update_course_site_api_my_courses_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UpdatedCourseSite"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CourseSite"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_course_site_api_my_courses__course_site_id__get: { + parameters: { + query?: never; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UpdatedCourseSite"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_course_site_roster_api_my_courses__course_site_id__roster_get: { + parameters: { + query?: { + page?: number; + page_size?: number; + order_by?: string; + filter?: string; + }; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_CourseMemberOverview_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_current_oh_events_api_my_courses__course_site_id__oh_events_current_get: { + parameters: { + query?: never; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHoursOverview"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_future_oh_events_api_my_courses__course_site_id__oh_events_future_get: { + parameters: { + query?: { + page?: number; + page_size?: number; + order_by?: string; + filter?: string; + }; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_OfficeHoursOverview_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_past_oh_events_api_my_courses__course_site_id__oh_events_history_get: { + parameters: { + query?: { + page?: number; + page_size?: number; + order_by?: string; + filter?: string; + }; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_OfficeHoursOverview_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_course_site_api_my_courses_new_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["NewCourseSite"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CourseSite"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_paginated_ticket_history_api_my_courses__course_site_id__statistics_ticket_history_get: { + parameters: { + query?: { + page?: number; + page_size?: number; + student_ids?: string; + staff_ids?: string; + range_start?: string; + range_end?: string; + }; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_OfficeHourTicketOverview_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_statistics_filter_data_api_my_courses__course_site_id__statistics_filter_data_get: { + parameters: { + query?: never; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_ticket_statistics_api_my_courses__course_site_id__statistics_get: { + parameters: { + query?: { + student_ids?: string; + staff_ids?: string; + range_start?: string; + range_end?: string; + }; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHoursTicketStatistics"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_ticket_statistics_csv_api_my_courses__course_site_id__statistics_csv_get: { + parameters: { + query?: { + student_ids?: string; + staff_ids?: string; + range_start?: string; + range_end?: string; + }; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHoursTicketStatistics"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_terms_api_academics_term_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Term"][]; + }; + }; + }; + }; + update_term_api_academics_term_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Term"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TermDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + new_term_api_academics_term_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Term"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TermDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_current_term_api_academics_term_current_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Term"]; + }; + }; + }; + }; + get_term_by_id_api_academics_term__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Term"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_term_api_academics_term__term_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + term_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_courses_api_academics_course_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Course"][]; + }; + }; + }; + }; + update_course_api_academics_course_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Course"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CourseDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + new_course_api_academics_course_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Course"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CourseDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_course_by_id_api_academics_course__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CourseDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_course_api_academics_course__course_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + course_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_enrollments_api_academics_section_update_enrollments_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + }; + }; + get_section_by_id_api_academics_section__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Section"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_section_by_term_id_api_academics_section_term__term_id__get: { + parameters: { + query?: never; + header?: never; + path: { + term_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CatalogSection"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_section_by_subject_code_api_academics_section__subject_code___course_number___section_number__get: { + parameters: { + query?: never; + header?: never; + path: { + subject_code: string; + course_number: string; + section_number: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CatalogSection"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_section_api_academics_section_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["EditedSection"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SectionDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + new_section_api_academics_section_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["EditedSection"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SectionDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_section_api_academics_section__section_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + section_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_rooms_api_room_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoomDetails"][]; + }; + }; + }; + }; + update_room_api_room_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RoomDetails"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoomDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + new_room_api_room_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RoomDetails"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoomDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_room_by_id_api_room__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoomDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_room_api_room__id__delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_section_member_by_id_api_academics_section_member__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SectionMember"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + add_user_memberships_api_academics_section_member_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CourseSite"][]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SectionMember"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + add_instructor_api_academics_section_member_instructor__section_id___user_id__post: { + parameters: { + query?: never; + header?: never; + path: { + section_id: number; + user_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SectionMember"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + import_roster_from_csv_api_academics_section_member_import_from_canvas__section_id__post: { + parameters: { + query?: never; + header?: never; + path: { + section_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CSVModel"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UploadResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + read_profile_api_profile_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserDetails"] | components["schemas"]["UnregisteredUser"]; + }; + }; + }; + }; + update_profile_api_profile_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ProfileForm"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_users_api_admin_users_get: { + parameters: { + query?: { + page?: number; + page_size?: number; + order_by?: string; + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_User_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_roles_api_admin_roles_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Role"][]; + }; + }; + }; + }; + create_role_api_admin_roles_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Role"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Role"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + role_details_api_admin_roles__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoleDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + grant_permission_to_role_api_admin_roles__id__permission_post: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Permission"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoleDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + revoke_permission_from_role_api_admin_roles__id__permission__permissionId__delete: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + permissionId: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": boolean; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + add_member_to_role_api_admin_roles__id__member_post: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["User"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoleDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + remove_member_from_role_api_admin_roles__id__member__userId__delete: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + userId: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": boolean; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_application_api_applications_ta_user__term_id__get: { + parameters: { + query?: never; + header?: never; + path: { + term_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Application-Output"] | null; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_undergrad_application_api_applications_ta_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Application-Input"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Application-Output"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_application_api_applications_ta_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Application-Input"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Application-Output"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_application_api_applications_ta_delete: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Application-Input"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_eligible_sections_api_applications_ta_eligible_sections_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CatalogSectionIdentity"][]; + }; + }; + }; + }; + health_check_api_health_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + }; + }; + get_office_hours_queue_api_office_hours__id__queue_get: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHourQueueOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_office_hours_role_api_office_hours__id__role_get: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHourEventRoleOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_office_hours_help_api_office_hours__id__get_help_get: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHourGetHelpOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_office_hours_api_office_hours__site_id__put: { + parameters: { + query?: never; + header?: never; + path: { + site_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["OfficeHours"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHours"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_office_hours_api_office_hours__site_id__post: { + parameters: { + query?: never; + header?: never; + path: { + site_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["NewOfficeHours"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHours"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_recurring_office_hours_api_office_hours__site_id__recurring_put: { + parameters: { + query?: never; + header?: never; + path: { + site_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Body_update_recurring_office_hours_api_office_hours__site_id__recurring_put"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHours"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_recurring_office_hours_api_office_hours__site_id__recurring_post: { + parameters: { + query?: never; + header?: never; + path: { + site_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Body_create_recurring_office_hours_api_office_hours__site_id__recurring_post"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHours"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_office_hours_api_office_hours__site_id___oh_id__get: { + parameters: { + query?: never; + header?: never; + path: { + site_id: number; + oh_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PrimaryOfficeHoursDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_office_hours_api_office_hours__site_id___oh_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + site_id: number; + oh_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_recurring_office_hours_api_office_hours__site_id___oh_id__recurring_delete: { + parameters: { + query?: never; + header?: never; + path: { + site_id: number; + oh_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + call_ticket_api_office_hours_ticket__id__call_put: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHourTicketOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + cancel_ticket_api_office_hours_ticket__id__cancel_put: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHourTicketOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + close_ticket_api_office_hours_ticket__id__close_put: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["OfficeHoursTicketClosePayload"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHourTicketOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + new_oh_ticket_api_office_hours_ticket__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["NewOfficeHoursTicket"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OfficeHourTicketOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_hiring_admin_overview_api_hiring_admin__term_id__get: { + parameters: { + query?: never; + header?: never; + path: { + term_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringAdminOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_hiring_admin_course_overview_api_hiring_admin_course__course_site_id__get: { + parameters: { + query?: never; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringAdminCourseOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_hiring_assignment_api_hiring_assignment_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["HiringAssignmentDraft"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringAssignmentOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_hiring_assignment_api_hiring_assignment_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["HiringAssignmentDraft"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringAssignmentOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_hiring_assignment_api_hiring_assignment__assignment_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + assignment_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringAssignmentOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_hiring_levels_api_hiring_level_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringLevel"][]; + }; + }; + }; + }; + update_hiring_level_api_hiring_level_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["HiringLevel"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringLevel"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_hiring_level_api_hiring_level_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["HiringLevel"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringLevel"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_missing_course_sites_for_term_api_hiring_create_sites_post: { + parameters: { + query: { + term_id: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": boolean; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_status_api_hiring__course_site_id__get: { + parameters: { + query?: never; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringStatus-Output"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_status_api_hiring__course_site_id__put: { + parameters: { + query?: never; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["HiringStatus-Input"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HiringStatus-Output"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_hiring_summary_overview_api_hiring_summary__term_id__get: { + parameters: { + query?: { + page?: number; + page_size?: number; + order_by?: string; + filter?: string; + }; + header?: never; + path: { + term_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_HiringAssignmentSummaryOverview_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_hiring_summary_csv_api_hiring_summary__term_id__csv_get: { + parameters: { + query?: never; + header?: never; + path: { + term_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_applicants_for_site_csv_api_hiring__course_site_id__csv_get: { + parameters: { + query?: never; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_phd_applicants_csv_api_hiring_summary__term_id__phd_applicants_get: { + parameters: { + query?: never; + header?: never; + path: { + term_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_hiring_assignments_for_course_site_api_hiring_assignments__course_site_id__get: { + parameters: { + query?: { + page?: number; + page_size?: number; + order_by?: string; + filter?: string; + }; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_HiringAssignmentOverview_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_assignments_csv_api_hiring_assignments__course_site_id__csv_get: { + parameters: { + query?: never; + header?: never; + path: { + course_site_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + conflict_check_api_hiring_conflict_check__application_id__get: { + parameters: { + query?: never; + header?: never; + path: { + application_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ConflictCheck"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_applicants_for_term_csv_api_hiring_admin__term_id__csv_get: { + parameters: { + query?: never; + header?: never; + path: { + term_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_facts_api_admin_facts_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FactsModel"]; + }; + }; + }; + }; + get_welcome_status_api_articles_welcome_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WelcomeOverview"]; + }; + }; + }; + }; + get_welcome_status_unauthenticated_api_articles_welcome_unauthenticated_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WelcomeOverview"]; + }; + }; + }; + }; + list_api_articles_list_get: { + parameters: { + query?: { + page?: number; + page_size?: number; + order_by?: string; + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Paginated_ArticleOverview_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_article_api_articles__slug__get: { + parameters: { + query?: never; + header?: never; + path: { + slug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ArticleOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + update_article_api_articles_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ArticleDraft"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ArticleOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_article_api_articles_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ArticleDraft"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ArticleOverview"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_article_api_articles__article_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + article_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_slow_signage_api_signage_slow_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SignageOverviewSlow"]; + }; + }; + }; + }; + get_fast_signage_api_signage_fast_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SignageOverviewFast"]; + }; + }; + }; + }; + get_all_api_sample_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GetSampleItemsResponse"]; + }; + }; + }; + }; + create_api_sample_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CreateSampleItemRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CreateSampleItemResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_api_sample__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GetSampleItemResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; +}