From 529a475c8dee200710ad70fce263f84512031541 Mon Sep 17 00:00:00 2001 From: Alejandra <90076947+alejsdev@users.noreply.github.com> Date: Wed, 3 Apr 2024 16:40:33 -0500 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Migrate=20frontend=20clien?= =?UTF-8?q?t=20generation=20from=20`openapi-typescript-codegen`=20to=20`@h?= =?UTF-8?q?ey-api/openapi-ts`=20(#1151)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/package-lock.json | 289 ++++------ frontend/package.json | 4 +- frontend/src/client/core/ApiError.ts | 34 +- frontend/src/client/core/ApiRequestOptions.ts | 28 +- frontend/src/client/core/ApiResult.ts | 18 +- frontend/src/client/core/CancelablePromise.ts | 241 ++++---- frontend/src/client/core/OpenAPI.ts | 76 ++- frontend/src/client/core/request.ts | 531 +++++++++--------- frontend/src/client/core/types.ts | 12 + frontend/src/client/index.ts | 48 +- frontend/src/client/models.ts | 132 +++++ .../models/Body_login_login_access_token.ts | 13 - .../src/client/models/HTTPValidationError.ts | 10 - frontend/src/client/models/ItemCreate.ts | 9 - frontend/src/client/models/ItemOut.ts | 11 - frontend/src/client/models/ItemUpdate.ts | 9 - frontend/src/client/models/ItemsOut.ts | 11 - frontend/src/client/models/Message.ts | 8 - frontend/src/client/models/NewPassword.ts | 9 - frontend/src/client/models/Token.ts | 9 - frontend/src/client/models/UpdatePassword.ts | 9 - frontend/src/client/models/UserCreate.ts | 12 - frontend/src/client/models/UserOut.ts | 12 - frontend/src/client/models/UserRegister.ts | 10 - frontend/src/client/models/UserUpdate.ts | 12 - frontend/src/client/models/UserUpdateMe.ts | 9 - frontend/src/client/models/UsersOut.ts | 11 - frontend/src/client/models/ValidationError.ts | 10 - frontend/src/client/schemas.ts | 357 ++++++++++++ .../schemas/$Body_login_login_access_token.ts | 44 -- .../client/schemas/$HTTPValidationError.ts | 14 - frontend/src/client/schemas/$ItemCreate.ts | 20 - frontend/src/client/schemas/$ItemOut.ts | 28 - frontend/src/client/schemas/$ItemUpdate.ts | 24 - frontend/src/client/schemas/$ItemsOut.ts | 19 - frontend/src/client/schemas/$Message.ts | 12 - frontend/src/client/schemas/$NewPassword.ts | 16 - frontend/src/client/schemas/$Token.ts | 15 - .../src/client/schemas/$UpdatePassword.ts | 16 - frontend/src/client/schemas/$UserCreate.ts | 30 - frontend/src/client/schemas/$UserOut.ts | 30 - frontend/src/client/schemas/$UserRegister.ts | 24 - frontend/src/client/schemas/$UserUpdate.ts | 38 -- frontend/src/client/schemas/$UserUpdateMe.ts | 24 - frontend/src/client/schemas/$UsersOut.ts | 19 - .../src/client/schemas/$ValidationError.ts | 28 - frontend/src/client/services.ts | 524 +++++++++++++++++ frontend/src/client/services/ItemsService.ts | 138 ----- frontend/src/client/services/LoginService.ts | 120 ---- frontend/src/client/services/UsersService.ts | 220 -------- frontend/src/client/services/UtilsService.ts | 36 -- frontend/src/components/Admin/AddUser.tsx | 2 +- frontend/src/components/Admin/EditUser.tsx | 2 +- frontend/src/components/Items/AddItem.tsx | 2 +- frontend/src/components/Items/EditItem.tsx | 2 +- .../UserSettings/ChangePassword.tsx | 2 +- .../UserSettings/DeleteConfirmation.tsx | 2 +- .../UserSettings/UserInformation.tsx | 2 +- frontend/src/hooks/useAuth.ts | 2 +- frontend/src/routes/_layout/admin.tsx | 4 +- frontend/src/routes/_layout/items.tsx | 4 +- frontend/src/routes/login.tsx | 2 +- frontend/src/routes/reset-password.tsx | 2 +- 63 files changed, 1616 insertions(+), 1795 deletions(-) create mode 100644 frontend/src/client/core/types.ts create mode 100644 frontend/src/client/models.ts delete mode 100644 frontend/src/client/models/Body_login_login_access_token.ts delete mode 100644 frontend/src/client/models/HTTPValidationError.ts delete mode 100644 frontend/src/client/models/ItemCreate.ts delete mode 100644 frontend/src/client/models/ItemOut.ts delete mode 100644 frontend/src/client/models/ItemUpdate.ts delete mode 100644 frontend/src/client/models/ItemsOut.ts delete mode 100644 frontend/src/client/models/Message.ts delete mode 100644 frontend/src/client/models/NewPassword.ts delete mode 100644 frontend/src/client/models/Token.ts delete mode 100644 frontend/src/client/models/UpdatePassword.ts delete mode 100644 frontend/src/client/models/UserCreate.ts delete mode 100644 frontend/src/client/models/UserOut.ts delete mode 100644 frontend/src/client/models/UserRegister.ts delete mode 100644 frontend/src/client/models/UserUpdate.ts delete mode 100644 frontend/src/client/models/UserUpdateMe.ts delete mode 100644 frontend/src/client/models/UsersOut.ts delete mode 100644 frontend/src/client/models/ValidationError.ts create mode 100644 frontend/src/client/schemas.ts delete mode 100644 frontend/src/client/schemas/$Body_login_login_access_token.ts delete mode 100644 frontend/src/client/schemas/$HTTPValidationError.ts delete mode 100644 frontend/src/client/schemas/$ItemCreate.ts delete mode 100644 frontend/src/client/schemas/$ItemOut.ts delete mode 100644 frontend/src/client/schemas/$ItemUpdate.ts delete mode 100644 frontend/src/client/schemas/$ItemsOut.ts delete mode 100644 frontend/src/client/schemas/$Message.ts delete mode 100644 frontend/src/client/schemas/$NewPassword.ts delete mode 100644 frontend/src/client/schemas/$Token.ts delete mode 100644 frontend/src/client/schemas/$UpdatePassword.ts delete mode 100644 frontend/src/client/schemas/$UserCreate.ts delete mode 100644 frontend/src/client/schemas/$UserOut.ts delete mode 100644 frontend/src/client/schemas/$UserRegister.ts delete mode 100644 frontend/src/client/schemas/$UserUpdate.ts delete mode 100644 frontend/src/client/schemas/$UserUpdateMe.ts delete mode 100644 frontend/src/client/schemas/$UsersOut.ts delete mode 100644 frontend/src/client/schemas/$ValidationError.ts create mode 100644 frontend/src/client/services.ts delete mode 100644 frontend/src/client/services/ItemsService.ts delete mode 100644 frontend/src/client/services/LoginService.ts delete mode 100644 frontend/src/client/services/UsersService.ts delete mode 100644 frontend/src/client/services/UtilsService.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fae94d4..b18b547 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -24,29 +24,17 @@ }, "devDependencies": { "@biomejs/biome": "1.6.1", + "@hey-api/openapi-ts": "^0.34.1", "@tanstack/router-devtools": "1.19.1", "@tanstack/router-vite-plugin": "1.19.0", "@types/node": "20.10.5", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "@vitejs/plugin-react-swc": "^3.5.0", - "openapi-typescript-codegen": "0.25.0", "typescript": "^5.2.2", "vite": "^5.0.13" } }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", - "dev": true, - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -2071,6 +2059,62 @@ "node": ">=12" } }, + "node_modules/@hey-api/openapi-ts": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.34.1.tgz", + "integrity": "sha512-7Ak+0nvf4Nhzk04tXGg6h4eM7lnWRgfjCPmMl2MyXrhS5urxd3Bg/PhtpB84u18wnwcM4rIeCUlTwDDQ/OB3NQ==", + "dev": true, + "dependencies": { + "@apidevtools/json-schema-ref-parser": "11.5.4", + "camelcase": "8.0.0", + "commander": "12.0.0", + "handlebars": "4.7.8" + }, + "bin": { + "openapi-ts": "bin/index.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/@hey-api/openapi-ts/node_modules/@apidevtools/json-schema-ref-parser": { + "version": "11.5.4", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.5.4.tgz", + "integrity": "sha512-o2fsypTGU0WxRxbax8zQoHiIB4dyrkwYfcm8TxZ+bx9pCzcWZbQtiMqpgBvWA/nJ2TrGjK5adCLfTH8wUeU/Wg==", + "dev": true, + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" + } + }, + "node_modules/@hey-api/openapi-ts/node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@hey-api/openapi-ts/node_modules/commander": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", + "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@jsdevtools/ono": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", @@ -2729,12 +2773,6 @@ "unload": "2.2.0" } }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2743,18 +2781,6 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/clsx": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", @@ -2780,15 +2806,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, "node_modules/compute-scroll-into-view": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz", @@ -3029,20 +3046,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3106,12 +3109,6 @@ "csstype": "^3.0.10" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -3232,31 +3229,6 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", - "deprecated": "Please switch to @apidevtools/json-schema-ref-parser", - "dev": true, - "dependencies": { - "@apidevtools/json-schema-ref-parser": "9.0.9" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -3384,22 +3356,6 @@ "wrappy": "1" } }, - "node_modules/openapi-typescript-codegen": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.25.0.tgz", - "integrity": "sha512-nN/TnIcGbP58qYgwEEy5FrAAjePcYgfMaCe3tsmYyTgI3v4RR9v8os14L+LEWDvV50+CmqiyTzRkKKtJeb6Ybg==", - "dev": true, - "dependencies": { - "camelcase": "^6.3.0", - "commander": "^11.0.0", - "fs-extra": "^11.1.1", - "handlebars": "^4.7.7", - "json-schema-ref-parser": "^9.0.9" - }, - "bin": { - "openapi": "bin/index.js" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3873,15 +3829,6 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/unload": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", @@ -4025,18 +3972,6 @@ } }, "dependencies": { - "@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", - "dev": true, - "requires": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, "@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -5435,6 +5370,43 @@ "dev": true, "optional": true }, + "@hey-api/openapi-ts": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.34.1.tgz", + "integrity": "sha512-7Ak+0nvf4Nhzk04tXGg6h4eM7lnWRgfjCPmMl2MyXrhS5urxd3Bg/PhtpB84u18wnwcM4rIeCUlTwDDQ/OB3NQ==", + "dev": true, + "requires": { + "@apidevtools/json-schema-ref-parser": "11.5.4", + "camelcase": "8.0.0", + "commander": "12.0.0", + "handlebars": "4.7.8" + }, + "dependencies": { + "@apidevtools/json-schema-ref-parser": { + "version": "11.5.4", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.5.4.tgz", + "integrity": "sha512-o2fsypTGU0WxRxbax8zQoHiIB4dyrkwYfcm8TxZ+bx9pCzcWZbQtiMqpgBvWA/nJ2TrGjK5adCLfTH8wUeU/Wg==", + "dev": true, + "requires": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0" + } + }, + "camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true + }, + "commander": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", + "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", + "dev": true + } + } + }, "@jsdevtools/ono": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", @@ -5850,23 +5822,11 @@ "unload": "2.2.0" } }, - "call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, "clsx": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", @@ -5886,12 +5846,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true - }, "compute-scroll-into-view": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz", @@ -6076,17 +6030,6 @@ } } }, - "fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -6129,12 +6072,6 @@ "dev": true, "requires": {} }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, "handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -6232,25 +6169,6 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", - "dev": true, - "requires": { - "@apidevtools/json-schema-ref-parser": "9.0.9" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -6348,19 +6266,6 @@ "wrappy": "1" } }, - "openapi-typescript-codegen": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.25.0.tgz", - "integrity": "sha512-nN/TnIcGbP58qYgwEEy5FrAAjePcYgfMaCe3tsmYyTgI3v4RR9v8os14L+LEWDvV50+CmqiyTzRkKKtJeb6Ybg==", - "dev": true, - "requires": { - "camelcase": "^6.3.0", - "commander": "^11.0.0", - "fs-extra": "^11.1.1", - "handlebars": "^4.7.7", - "json-schema-ref-parser": "^9.0.9" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6662,12 +6567,6 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true - }, "unload": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 7133760..25df330 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,7 +8,7 @@ "build": "tsc && vite build", "lint": "biome check --apply-unsafe --no-errors-on-unmatched --files-ignore-unknown=true ./", "preview": "vite preview", - "generate-client": "openapi --input ./openapi.json --useOptions --useUnionTypes --output ./src/client --client axios --exportSchemas true" + "generate-client": "openapi-ts --input ./openapi.json --output ./src/client --client axios --exportSchemas true" }, "dependencies": { "@chakra-ui/icons": "2.1.1", @@ -27,13 +27,13 @@ }, "devDependencies": { "@biomejs/biome": "1.6.1", + "@hey-api/openapi-ts": "^0.34.1", "@tanstack/router-devtools": "1.19.1", "@tanstack/router-vite-plugin": "1.19.0", "@types/node": "20.10.5", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "@vitejs/plugin-react-swc": "^3.5.0", - "openapi-typescript-codegen": "0.25.0", "typescript": "^5.2.2", "vite": "^5.0.13" } diff --git a/frontend/src/client/core/ApiError.ts b/frontend/src/client/core/ApiError.ts index d6b8fcc..36675d2 100644 --- a/frontend/src/client/core/ApiError.ts +++ b/frontend/src/client/core/ApiError.ts @@ -1,25 +1,21 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ import type { ApiRequestOptions } from './ApiRequestOptions'; import type { ApiResult } from './ApiResult'; export class ApiError extends Error { - public readonly url: string; - public readonly status: number; - public readonly statusText: string; - public readonly body: any; - public readonly request: ApiRequestOptions; + public readonly url: string; + public readonly status: number; + public readonly statusText: string; + public readonly body: unknown; + public readonly request: ApiRequestOptions; - constructor(request: ApiRequestOptions, response: ApiResult, message: string) { - super(message); + constructor(request: ApiRequestOptions, response: ApiResult, message: string) { + super(message); - this.name = 'ApiError'; - this.url = response.url; - this.status = response.status; - this.statusText = response.statusText; - this.body = response.body; - this.request = request; - } -} + this.name = 'ApiError'; + this.url = response.url; + this.status = response.status; + this.statusText = response.statusText; + this.body = response.body; + this.request = request; + } +} \ No newline at end of file diff --git a/frontend/src/client/core/ApiRequestOptions.ts b/frontend/src/client/core/ApiRequestOptions.ts index c19adcc..8f8d4d1 100644 --- a/frontend/src/client/core/ApiRequestOptions.ts +++ b/frontend/src/client/core/ApiRequestOptions.ts @@ -1,17 +1,13 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ export type ApiRequestOptions = { - readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; - readonly url: string; - readonly path?: Record; - readonly cookies?: Record; - readonly headers?: Record; - readonly query?: Record; - readonly formData?: Record; - readonly body?: any; - readonly mediaType?: string; - readonly responseHeader?: string; - readonly errors?: Record; -}; + readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; + readonly url: string; + readonly path?: Record; + readonly cookies?: Record; + readonly headers?: Record; + readonly query?: Record; + readonly formData?: Record; + readonly body?: any; + readonly mediaType?: string; + readonly responseHeader?: string; + readonly errors?: Record; +}; \ No newline at end of file diff --git a/frontend/src/client/core/ApiResult.ts b/frontend/src/client/core/ApiResult.ts index ad8fef2..4c58e39 100644 --- a/frontend/src/client/core/ApiResult.ts +++ b/frontend/src/client/core/ApiResult.ts @@ -1,11 +1,7 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export type ApiResult = { - readonly url: string; - readonly ok: boolean; - readonly status: number; - readonly statusText: string; - readonly body: any; -}; +export type ApiResult = { + readonly body: TData; + readonly ok: boolean; + readonly status: number; + readonly statusText: string; + readonly url: string; +}; \ No newline at end of file diff --git a/frontend/src/client/core/CancelablePromise.ts b/frontend/src/client/core/CancelablePromise.ts index 55fef85..ccc082e 100644 --- a/frontend/src/client/core/CancelablePromise.ts +++ b/frontend/src/client/core/CancelablePromise.ts @@ -1,131 +1,126 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ export class CancelError extends Error { - - constructor(message: string) { - super(message); - this.name = 'CancelError'; - } - - public get isCancelled(): boolean { - return true; - } + constructor(message: string) { + super(message); + this.name = 'CancelError'; + } + + public get isCancelled(): boolean { + return true; + } } export interface OnCancel { - readonly isResolved: boolean; - readonly isRejected: boolean; - readonly isCancelled: boolean; + readonly isResolved: boolean; + readonly isRejected: boolean; + readonly isCancelled: boolean; - (cancelHandler: () => void): void; + (cancelHandler: () => void): void; } export class CancelablePromise implements Promise { - #isResolved: boolean; - #isRejected: boolean; - #isCancelled: boolean; - readonly #cancelHandlers: (() => void)[]; - readonly #promise: Promise; - #resolve?: (value: T | PromiseLike) => void; - #reject?: (reason?: any) => void; - - constructor( - executor: ( - resolve: (value: T | PromiseLike) => void, - reject: (reason?: any) => void, - onCancel: OnCancel - ) => void - ) { - this.#isResolved = false; - this.#isRejected = false; - this.#isCancelled = false; - this.#cancelHandlers = []; - this.#promise = new Promise((resolve, reject) => { - this.#resolve = resolve; - this.#reject = reject; - - const onResolve = (value: T | PromiseLike): void => { - if (this.#isResolved || this.#isRejected || this.#isCancelled) { - return; - } - this.#isResolved = true; - this.#resolve?.(value); - }; - - const onReject = (reason?: any): void => { - if (this.#isResolved || this.#isRejected || this.#isCancelled) { - return; - } - this.#isRejected = true; - this.#reject?.(reason); - }; - - const onCancel = (cancelHandler: () => void): void => { - if (this.#isResolved || this.#isRejected || this.#isCancelled) { - return; - } - this.#cancelHandlers.push(cancelHandler); - }; - - Object.defineProperty(onCancel, 'isResolved', { - get: (): boolean => this.#isResolved, - }); - - Object.defineProperty(onCancel, 'isRejected', { - get: (): boolean => this.#isRejected, - }); - - Object.defineProperty(onCancel, 'isCancelled', { - get: (): boolean => this.#isCancelled, - }); - - return executor(onResolve, onReject, onCancel as OnCancel); - }); - } - - get [Symbol.toStringTag]() { - return "Cancellable Promise"; - } - - public then( - onFulfilled?: ((value: T) => TResult1 | PromiseLike) | null, - onRejected?: ((reason: any) => TResult2 | PromiseLike) | null - ): Promise { - return this.#promise.then(onFulfilled, onRejected); - } - - public catch( - onRejected?: ((reason: any) => TResult | PromiseLike) | null - ): Promise { - return this.#promise.catch(onRejected); - } - - public finally(onFinally?: (() => void) | null): Promise { - return this.#promise.finally(onFinally); - } - - public cancel(): void { - if (this.#isResolved || this.#isRejected || this.#isCancelled) { - return; - } - this.#isCancelled = true; - if (this.#cancelHandlers.length) { - try { - for (const cancelHandler of this.#cancelHandlers) { - cancelHandler(); - } - } catch (error) { - console.warn('Cancellation threw an error', error); - return; - } - } - this.#cancelHandlers.length = 0; - this.#reject?.(new CancelError('Request aborted')); - } - - public get isCancelled(): boolean { - return this.#isCancelled; - } -} + private _isResolved: boolean; + private _isRejected: boolean; + private _isCancelled: boolean; + readonly cancelHandlers: (() => void)[]; + readonly promise: Promise; + private _resolve?: (value: T | PromiseLike) => void; + private _reject?: (reason?: unknown) => void; + + constructor( + executor: ( + resolve: (value: T | PromiseLike) => void, + reject: (reason?: unknown) => void, + onCancel: OnCancel + ) => void + ) { + this._isResolved = false; + this._isRejected = false; + this._isCancelled = false; + this.cancelHandlers = []; + this.promise = new Promise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + + const onResolve = (value: T | PromiseLike): void => { + if (this._isResolved || this._isRejected || this._isCancelled) { + return; + } + this._isResolved = true; + if (this._resolve) this._resolve(value); + }; + + const onReject = (reason?: unknown): void => { + if (this._isResolved || this._isRejected || this._isCancelled) { + return; + } + this._isRejected = true; + if (this._reject) this._reject(reason); + }; + + const onCancel = (cancelHandler: () => void): void => { + if (this._isResolved || this._isRejected || this._isCancelled) { + return; + } + this.cancelHandlers.push(cancelHandler); + }; + + Object.defineProperty(onCancel, 'isResolved', { + get: (): boolean => this._isResolved, + }); + + Object.defineProperty(onCancel, 'isRejected', { + get: (): boolean => this._isRejected, + }); + + Object.defineProperty(onCancel, 'isCancelled', { + get: (): boolean => this._isCancelled, + }); + + return executor(onResolve, onReject, onCancel as OnCancel); + }); + } + + get [Symbol.toStringTag]() { + return "Cancellable Promise"; + } + + public then( + onFulfilled?: ((value: T) => TResult1 | PromiseLike) | null, + onRejected?: ((reason: unknown) => TResult2 | PromiseLike) | null + ): Promise { + return this.promise.then(onFulfilled, onRejected); + } + + public catch( + onRejected?: ((reason: unknown) => TResult | PromiseLike) | null + ): Promise { + return this.promise.catch(onRejected); + } + + public finally(onFinally?: (() => void) | null): Promise { + return this.promise.finally(onFinally); + } + + public cancel(): void { + if (this._isResolved || this._isRejected || this._isCancelled) { + return; + } + this._isCancelled = true; + if (this.cancelHandlers.length) { + try { + for (const cancelHandler of this.cancelHandlers) { + cancelHandler(); + } + } catch (error) { + console.warn('Cancellation threw an error', error); + return; + } + } + this.cancelHandlers.length = 0; + if (this._reject) this._reject(new CancelError('Request aborted')); + } + + public get isCancelled(): boolean { + return this._isCancelled; + } +} \ No newline at end of file diff --git a/frontend/src/client/core/OpenAPI.ts b/frontend/src/client/core/OpenAPI.ts index e357bb2..c1164c7 100644 --- a/frontend/src/client/core/OpenAPI.ts +++ b/frontend/src/client/core/OpenAPI.ts @@ -1,32 +1,58 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -import type { ApiRequestOptions } from './ApiRequestOptions'; +import type { AxiosRequestConfig, AxiosResponse } from 'axios';import type { ApiRequestOptions } from './ApiRequestOptions'; +import type { TResult } from './types'; -type Resolver = (options: ApiRequestOptions) => Promise; type Headers = Record; +type Middleware = (value: T) => T | Promise; +type Resolver = (options: ApiRequestOptions) => Promise; + +export class Interceptors { + _fns: Middleware[]; + + constructor() { + this._fns = []; + } + + eject(fn: Middleware) { + const index = this._fns.indexOf(fn); + if (index !== -1) { + this._fns = [ + ...this._fns.slice(0, index), + ...this._fns.slice(index + 1), + ]; + } + } + + use(fn: Middleware) { + this._fns = [...this._fns, fn]; + } +} export type OpenAPIConfig = { - BASE: string; - VERSION: string; - WITH_CREDENTIALS: boolean; - CREDENTIALS: 'include' | 'omit' | 'same-origin'; - TOKEN?: string | Resolver | undefined; - USERNAME?: string | Resolver | undefined; - PASSWORD?: string | Resolver | undefined; - HEADERS?: Headers | Resolver | undefined; - ENCODE_PATH?: ((path: string) => string) | undefined; + BASE: string; + CREDENTIALS: 'include' | 'omit' | 'same-origin'; + ENCODE_PATH?: ((path: string) => string) | undefined; + HEADERS?: Headers | Resolver | undefined; + PASSWORD?: string | Resolver | undefined; + RESULT?: TResult; + TOKEN?: string | Resolver | undefined; + USERNAME?: string | Resolver | undefined; + VERSION: string; + WITH_CREDENTIALS: boolean; + interceptors: {request: Interceptors; + response: Interceptors;}; }; export const OpenAPI: OpenAPIConfig = { - BASE: '', - VERSION: '0.1.0', - WITH_CREDENTIALS: false, - CREDENTIALS: 'include', - TOKEN: undefined, - USERNAME: undefined, - PASSWORD: undefined, - HEADERS: undefined, - ENCODE_PATH: undefined, -}; + BASE: '', + CREDENTIALS: 'include', + ENCODE_PATH: undefined, + HEADERS: undefined, + PASSWORD: undefined, + RESULT: 'body', + TOKEN: undefined, + USERNAME: undefined, + VERSION: '0.1.0', + WITH_CREDENTIALS: false, + interceptors: {request: new Interceptors(),response: new Interceptors(), + }, +}; \ No newline at end of file diff --git a/frontend/src/client/core/request.ts b/frontend/src/client/core/request.ts index 1142d43..080a6f4 100644 --- a/frontend/src/client/core/request.ts +++ b/frontend/src/client/core/request.ts @@ -1,10 +1,5 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ import axios from 'axios'; import type { AxiosError, AxiosRequestConfig, AxiosResponse, AxiosInstance } from 'axios'; -import FormData from 'form-data'; import { ApiError } from './ApiError'; import type { ApiRequestOptions } from './ApiRequestOptions'; @@ -13,270 +8,287 @@ import { CancelablePromise } from './CancelablePromise'; import type { OnCancel } from './CancelablePromise'; import type { OpenAPIConfig } from './OpenAPI'; -export const isDefined = (value: T | null | undefined): value is Exclude => { - return value !== undefined && value !== null; +export const isString = (value: unknown): value is string => { + return typeof value === 'string'; }; -export const isString = (value: any): value is string => { - return typeof value === 'string'; -}; - -export const isStringWithValue = (value: any): value is string => { - return isString(value) && value !== ''; +export const isStringWithValue = (value: unknown): value is string => { + return isString(value) && value !== ''; }; export const isBlob = (value: any): value is Blob => { - return ( - typeof value === 'object' && - typeof value.type === 'string' && - typeof value.stream === 'function' && - typeof value.arrayBuffer === 'function' && - typeof value.constructor === 'function' && - typeof value.constructor.name === 'string' && - /^(Blob|File)$/.test(value.constructor.name) && - /^(Blob|File)$/.test(value[Symbol.toStringTag]) - ); + return value instanceof Blob; }; -export const isFormData = (value: any): value is FormData => { - return value instanceof FormData; +export const isFormData = (value: unknown): value is FormData => { + return value instanceof FormData; }; export const isSuccess = (status: number): boolean => { - return status >= 200 && status < 300; + return status >= 200 && status < 300; }; export const base64 = (str: string): string => { - try { - return btoa(str); - } catch (err) { - // @ts-ignore - return Buffer.from(str).toString('base64'); - } + try { + return btoa(str); + } catch (err) { + // @ts-ignore + return Buffer.from(str).toString('base64'); + } }; -export const getQueryString = (params: Record): string => { - const qs: string[] = []; - - const append = (key: string, value: any) => { - qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); - }; - - const process = (key: string, value: any) => { - if (isDefined(value)) { - if (Array.isArray(value)) { - value.forEach(v => { - process(key, v); - }); - } else if (typeof value === 'object') { - Object.entries(value).forEach(([k, v]) => { - process(`${key}[${k}]`, v); - }); - } else { - append(key, value); - } - } - }; - - Object.entries(params).forEach(([key, value]) => { - process(key, value); - }); - - if (qs.length > 0) { - return `?${qs.join('&')}`; - } - - return ''; +export const getQueryString = (params: Record): string => { + const qs: string[] = []; + + const append = (key: string, value: unknown) => { + qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); + }; + + const encodePair = (key: string, value: unknown) => { + if (value === undefined || value === null) { + return; + } + + if (Array.isArray(value)) { + value.forEach(v => encodePair(key, v)); + } else if (typeof value === 'object') { + Object.entries(value).forEach(([k, v]) => encodePair(`${key}[${k}]`, v)); + } else { + append(key, value); + } + }; + + Object.entries(params).forEach(([key, value]) => encodePair(key, value)); + + return qs.length ? `?${qs.join('&')}` : ''; }; const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => { - const encoder = config.ENCODE_PATH || encodeURI; - - const path = options.url - .replace('{api-version}', config.VERSION) - .replace(/{(.*?)}/g, (substring: string, group: string) => { - if (options.path?.hasOwnProperty(group)) { - return encoder(String(options.path[group])); - } - return substring; - }); - - const url = `${config.BASE}${path}`; - if (options.query) { - return `${url}${getQueryString(options.query)}`; - } - return url; + const encoder = config.ENCODE_PATH || encodeURI; + + const path = options.url + .replace('{api-version}', config.VERSION) + .replace(/{(.*?)}/g, (substring: string, group: string) => { + if (options.path?.hasOwnProperty(group)) { + return encoder(String(options.path[group])); + } + return substring; + }); + + const url = config.BASE + path; + return options.query ? url + getQueryString(options.query) : url; }; export const getFormData = (options: ApiRequestOptions): FormData | undefined => { - if (options.formData) { - const formData = new FormData(); - - const process = (key: string, value: any) => { - if (isString(value) || isBlob(value)) { - formData.append(key, value); - } else { - formData.append(key, JSON.stringify(value)); - } - }; - - Object.entries(options.formData) - .filter(([_, value]) => isDefined(value)) - .forEach(([key, value]) => { - if (Array.isArray(value)) { - value.forEach(v => process(key, v)); - } else { - process(key, value); - } - }); - - return formData; - } - return undefined; + if (options.formData) { + const formData = new FormData(); + + const process = (key: string, value: unknown) => { + if (isString(value) || isBlob(value)) { + formData.append(key, value); + } else { + formData.append(key, JSON.stringify(value)); + } + }; + + Object.entries(options.formData) + .filter(([, value]) => value !== undefined && value !== null) + .forEach(([key, value]) => { + if (Array.isArray(value)) { + value.forEach(v => process(key, v)); + } else { + process(key, value); + } + }); + + return formData; + } + return undefined; }; type Resolver = (options: ApiRequestOptions) => Promise; export const resolve = async (options: ApiRequestOptions, resolver?: T | Resolver): Promise => { - if (typeof resolver === 'function') { - return (resolver as Resolver)(options); - } - return resolver; + if (typeof resolver === 'function') { + return (resolver as Resolver)(options); + } + return resolver; }; -export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions, formData?: FormData): Promise> => { - const token = await resolve(options, config.TOKEN); - const username = await resolve(options, config.USERNAME); - const password = await resolve(options, config.PASSWORD); - const additionalHeaders = await resolve(options, config.HEADERS); - const formHeaders = typeof formData?.getHeaders === 'function' && formData?.getHeaders() || {} - - const headers = Object.entries({ - Accept: 'application/json', - ...additionalHeaders, - ...options.headers, - ...formHeaders, - }) - .filter(([_, value]) => isDefined(value)) - .reduce((headers, [key, value]) => ({ - ...headers, - [key]: String(value), - }), {} as Record); - - if (isStringWithValue(token)) { - headers['Authorization'] = `Bearer ${token}`; - } - - if (isStringWithValue(username) && isStringWithValue(password)) { - const credentials = base64(`${username}:${password}`); - headers['Authorization'] = `Basic ${credentials}`; - } - - if (options.body) { - if (options.mediaType) { - headers['Content-Type'] = options.mediaType; - } else if (isBlob(options.body)) { - headers['Content-Type'] = options.body.type || 'application/octet-stream'; - } else if (isString(options.body)) { - headers['Content-Type'] = 'text/plain'; - } else if (!isFormData(options.body)) { - headers['Content-Type'] = 'application/json'; - } - } - - return headers; +export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions): Promise> => { + const [token, username, password, additionalHeaders] = await Promise.all([ + resolve(options, config.TOKEN), + resolve(options, config.USERNAME), + resolve(options, config.PASSWORD), + resolve(options, config.HEADERS), + ]); + + const headers = Object.entries({ + Accept: 'application/json', + ...additionalHeaders, + ...options.headers, + }) + .filter(([, value]) => value !== undefined && value !== null) + .reduce((headers, [key, value]) => ({ + ...headers, + [key]: String(value), + }), {} as Record); + + if (isStringWithValue(token)) { + headers['Authorization'] = `Bearer ${token}`; + } + + if (isStringWithValue(username) && isStringWithValue(password)) { + const credentials = base64(`${username}:${password}`); + headers['Authorization'] = `Basic ${credentials}`; + } + + if (options.body !== undefined) { + if (options.mediaType) { + headers['Content-Type'] = options.mediaType; + } else if (isBlob(options.body)) { + headers['Content-Type'] = options.body.type || 'application/octet-stream'; + } else if (isString(options.body)) { + headers['Content-Type'] = 'text/plain'; + } else if (!isFormData(options.body)) { + headers['Content-Type'] = 'application/json'; + } + } else if (options.formData !== undefined) { + if (options.mediaType) { + headers['Content-Type'] = options.mediaType; + } + } + + return headers; }; -export const getRequestBody = (options: ApiRequestOptions): any => { - if (options.body) { - return options.body; - } - return undefined; +export const getRequestBody = (options: ApiRequestOptions): unknown => { + if (options.body) { + return options.body; + } + return undefined; }; export const sendRequest = async ( - config: OpenAPIConfig, - options: ApiRequestOptions, - url: string, - body: any, - formData: FormData | undefined, - headers: Record, - onCancel: OnCancel, - axiosClient: AxiosInstance + config: OpenAPIConfig, + options: ApiRequestOptions, + url: string, + body: unknown, + formData: FormData | undefined, + headers: Record, + onCancel: OnCancel, + axiosClient: AxiosInstance ): Promise> => { - const source = axios.CancelToken.source(); - - const requestConfig: AxiosRequestConfig = { - url, - headers, - data: body ?? formData, - method: options.method, - withCredentials: config.WITH_CREDENTIALS, - cancelToken: source.token, - }; - - onCancel(() => source.cancel('The user aborted a request.')); - - try { - return await axiosClient.request(requestConfig); - } catch (error) { - const axiosError = error as AxiosError; - if (axiosError.response) { - return axiosError.response; - } - throw error; - } + const controller = new AbortController(); + + let requestConfig: AxiosRequestConfig = { + data: body ?? formData, + headers, + method: options.method, + signal: controller.signal, + url, + withCredentials: config.WITH_CREDENTIALS, + }; + + onCancel(() => controller.abort()); + + for (const fn of config.interceptors.request._fns) { + requestConfig = await fn(requestConfig) + } + + try { + return await axiosClient.request(requestConfig); + } catch (error) { + const axiosError = error as AxiosError; + if (axiosError.response) { + return axiosError.response; + } + throw error; + } }; -export const getResponseHeader = (response: AxiosResponse, responseHeader?: string): string | undefined => { - if (responseHeader) { - const content = response.headers[responseHeader]; - if (isString(content)) { - return content; - } - } - return undefined; +export const getResponseHeader = (response: AxiosResponse, responseHeader?: string): string | undefined => { + if (responseHeader) { + const content = response.headers[responseHeader]; + if (isString(content)) { + return content; + } + } + return undefined; }; -export const getResponseBody = (response: AxiosResponse): any => { - if (response.status !== 204) { - return response.data; - } - return undefined; +export const getResponseBody = (response: AxiosResponse): unknown => { + if (response.status !== 204) { + return response.data; + } + return undefined; }; export const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => { - const errors: Record = { - 400: 'Bad Request', - 401: 'Unauthorized', - 403: 'Forbidden', - 404: 'Not Found', - 500: 'Internal Server Error', - 502: 'Bad Gateway', - 503: 'Service Unavailable', - ...options.errors, - } - - const error = errors[result.status]; - if (error) { - throw new ApiError(options, result, error); - } - - if (!result.ok) { - const errorStatus = result.status ?? 'unknown'; - const errorStatusText = result.statusText ?? 'unknown'; - const errorBody = (() => { - try { - return JSON.stringify(result.body, null, 2); - } catch (e) { - return undefined; - } - })(); - - throw new ApiError(options, result, - `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}` - ); - } + const errors: Record = { + 400: 'Bad Request', + 401: 'Unauthorized', + 402: 'Payment Required', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 406: 'Not Acceptable', + 407: 'Proxy Authentication Required', + 408: 'Request Timeout', + 409: 'Conflict', + 410: 'Gone', + 411: 'Length Required', + 412: 'Precondition Failed', + 413: 'Payload Too Large', + 414: 'URI Too Long', + 415: 'Unsupported Media Type', + 416: 'Range Not Satisfiable', + 417: 'Expectation Failed', + 418: 'Im a teapot', + 421: 'Misdirected Request', + 422: 'Unprocessable Content', + 423: 'Locked', + 424: 'Failed Dependency', + 425: 'Too Early', + 426: 'Upgrade Required', + 428: 'Precondition Required', + 429: 'Too Many Requests', + 431: 'Request Header Fields Too Large', + 451: 'Unavailable For Legal Reasons', + 500: 'Internal Server Error', + 501: 'Not Implemented', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + 504: 'Gateway Timeout', + 505: 'HTTP Version Not Supported', + 506: 'Variant Also Negotiates', + 507: 'Insufficient Storage', + 508: 'Loop Detected', + 510: 'Not Extended', + 511: 'Network Authentication Required', + ...options.errors, + } + + const error = errors[result.status]; + if (error) { + throw new ApiError(options, result, error); + } + + if (!result.ok) { + const errorStatus = result.status ?? 'unknown'; + const errorStatusText = result.statusText ?? 'unknown'; + const errorBody = (() => { + try { + return JSON.stringify(result.body, null, 2); + } catch (e) { + return undefined; + } + })(); + + throw new ApiError(options, result, + `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}` + ); + } }; /** @@ -288,32 +300,37 @@ export const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): * @throws ApiError */ export const request = (config: OpenAPIConfig, options: ApiRequestOptions, axiosClient: AxiosInstance = axios): CancelablePromise => { - return new CancelablePromise(async (resolve, reject, onCancel) => { - try { - const url = getUrl(config, options); - const formData = getFormData(options); - const body = getRequestBody(options); - const headers = await getHeaders(config, options, formData); - - if (!onCancel.isCancelled) { - const response = await sendRequest(config, options, url, body, formData, headers, onCancel, axiosClient); - const responseBody = getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); - - const result: ApiResult = { - url, - ok: isSuccess(response.status), - status: response.status, - statusText: response.statusText, - body: responseHeader ?? responseBody, - }; - - catchErrorCodes(options, result); - - resolve(result.body); - } - } catch (error) { - reject(error); - } - }); -}; + return new CancelablePromise(async (resolve, reject, onCancel) => { + try { + const url = getUrl(config, options); + const formData = getFormData(options); + const body = getRequestBody(options); + const headers = await getHeaders(config, options); + + if (!onCancel.isCancelled) { + let response = await sendRequest(config, options, url, body, formData, headers, onCancel, axiosClient); + + for (const fn of config.interceptors.response._fns) { + response = await fn(response) + } + + const responseBody = getResponseBody(response); + const responseHeader = getResponseHeader(response, options.responseHeader); + + const result: ApiResult = { + url, + ok: isSuccess(response.status), + status: response.status, + statusText: response.statusText, + body: responseHeader ?? responseBody, + }; + + catchErrorCodes(options, result); + + resolve(result.body); + } + } catch (error) { + reject(error); + } + }); +}; \ No newline at end of file diff --git a/frontend/src/client/core/types.ts b/frontend/src/client/core/types.ts new file mode 100644 index 0000000..64ecde2 --- /dev/null +++ b/frontend/src/client/core/types.ts @@ -0,0 +1,12 @@ +import type { ApiResult } from './ApiResult'; + +export type TResult = 'body' | 'raw'; + +export type TApiResponse = + Exclude extends never + ? ApiResult + : ApiResult['body']; + +export type TConfig = { + _result?: T; +}; \ No newline at end of file diff --git a/frontend/src/client/index.ts b/frontend/src/client/index.ts index 16d2b22..322c51b 100644 --- a/frontend/src/client/index.ts +++ b/frontend/src/client/index.ts @@ -1,49 +1,9 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ + export { ApiError } from './core/ApiError'; export { CancelablePromise, CancelError } from './core/CancelablePromise'; export { OpenAPI } from './core/OpenAPI'; export type { OpenAPIConfig } from './core/OpenAPI'; -export type { Body_login_login_access_token } from './models/Body_login_login_access_token'; -export type { HTTPValidationError } from './models/HTTPValidationError'; -export type { ItemCreate } from './models/ItemCreate'; -export type { ItemOut } from './models/ItemOut'; -export type { ItemsOut } from './models/ItemsOut'; -export type { ItemUpdate } from './models/ItemUpdate'; -export type { Message } from './models/Message'; -export type { NewPassword } from './models/NewPassword'; -export type { Token } from './models/Token'; -export type { UpdatePassword } from './models/UpdatePassword'; -export type { UserCreate } from './models/UserCreate'; -export type { UserOut } from './models/UserOut'; -export type { UserRegister } from './models/UserRegister'; -export type { UsersOut } from './models/UsersOut'; -export type { UserUpdate } from './models/UserUpdate'; -export type { UserUpdateMe } from './models/UserUpdateMe'; -export type { ValidationError } from './models/ValidationError'; - -export { $Body_login_login_access_token } from './schemas/$Body_login_login_access_token'; -export { $HTTPValidationError } from './schemas/$HTTPValidationError'; -export { $ItemCreate } from './schemas/$ItemCreate'; -export { $ItemOut } from './schemas/$ItemOut'; -export { $ItemsOut } from './schemas/$ItemsOut'; -export { $ItemUpdate } from './schemas/$ItemUpdate'; -export { $Message } from './schemas/$Message'; -export { $NewPassword } from './schemas/$NewPassword'; -export { $Token } from './schemas/$Token'; -export { $UpdatePassword } from './schemas/$UpdatePassword'; -export { $UserCreate } from './schemas/$UserCreate'; -export { $UserOut } from './schemas/$UserOut'; -export { $UserRegister } from './schemas/$UserRegister'; -export { $UsersOut } from './schemas/$UsersOut'; -export { $UserUpdate } from './schemas/$UserUpdate'; -export { $UserUpdateMe } from './schemas/$UserUpdateMe'; -export { $ValidationError } from './schemas/$ValidationError'; - -export { ItemsService } from './services/ItemsService'; -export { LoginService } from './services/LoginService'; -export { UsersService } from './services/UsersService'; -export { UtilsService } from './services/UtilsService'; +export * from './models' +export * from './schemas' +export * from './services' diff --git a/frontend/src/client/models.ts b/frontend/src/client/models.ts new file mode 100644 index 0000000..482508b --- /dev/null +++ b/frontend/src/client/models.ts @@ -0,0 +1,132 @@ +export type Body_login_login_access_token = { + grant_type?: string | null; + username: string; + password: string; + scope?: string; + client_id?: string | null; + client_secret?: string | null; +}; + + + +export type HTTPValidationError = { + detail?: Array; +}; + + + +export type ItemCreate = { + title: string; + description?: string | null; +}; + + + +export type ItemOut = { + title: string; + description?: string | null; + id: number; + owner_id: number; +}; + + + +export type ItemUpdate = { + title?: string | null; + description?: string | null; +}; + + + +export type ItemsOut = { + data: Array; + count: number; +}; + + + +export type Message = { + message: string; +}; + + + +export type NewPassword = { + token: string; + new_password: string; +}; + + + +export type Token = { + access_token: string; + token_type?: string; +}; + + + +export type UpdatePassword = { + current_password: string; + new_password: string; +}; + + + +export type UserCreate = { + email: string; + is_active?: boolean; + is_superuser?: boolean; + full_name?: string | null; + password: string; +}; + + + +export type UserOut = { + email: string; + is_active?: boolean; + is_superuser?: boolean; + full_name?: string | null; + id: number; +}; + + + +export type UserRegister = { + email: string; + password: string; + full_name?: string | null; +}; + + + +export type UserUpdate = { + email?: string | null; + is_active?: boolean; + is_superuser?: boolean; + full_name?: string | null; + password?: string | null; +}; + + + +export type UserUpdateMe = { + full_name?: string | null; + email?: string | null; +}; + + + +export type UsersOut = { + data: Array; + count: number; +}; + + + +export type ValidationError = { + loc: Array; + msg: string; + type: string; +}; + diff --git a/frontend/src/client/models/Body_login_login_access_token.ts b/frontend/src/client/models/Body_login_login_access_token.ts deleted file mode 100644 index 7798e61..0000000 --- a/frontend/src/client/models/Body_login_login_access_token.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type Body_login_login_access_token = { - grant_type?: (string | null); - username: string; - password: string; - scope?: string; - client_id?: (string | null); - client_secret?: (string | null); -}; diff --git a/frontend/src/client/models/HTTPValidationError.ts b/frontend/src/client/models/HTTPValidationError.ts deleted file mode 100644 index e218a9f..0000000 --- a/frontend/src/client/models/HTTPValidationError.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -import type { ValidationError } from './ValidationError'; - -export type HTTPValidationError = { - detail?: Array; -}; diff --git a/frontend/src/client/models/ItemCreate.ts b/frontend/src/client/models/ItemCreate.ts deleted file mode 100644 index aeefb6d..0000000 --- a/frontend/src/client/models/ItemCreate.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type ItemCreate = { - title: string; - description?: (string | null); -}; diff --git a/frontend/src/client/models/ItemOut.ts b/frontend/src/client/models/ItemOut.ts deleted file mode 100644 index cbe6c02..0000000 --- a/frontend/src/client/models/ItemOut.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type ItemOut = { - title: string; - description?: (string | null); - id: number; - owner_id: number; -}; diff --git a/frontend/src/client/models/ItemUpdate.ts b/frontend/src/client/models/ItemUpdate.ts deleted file mode 100644 index 89ccb4e..0000000 --- a/frontend/src/client/models/ItemUpdate.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type ItemUpdate = { - title?: (string | null); - description?: (string | null); -}; diff --git a/frontend/src/client/models/ItemsOut.ts b/frontend/src/client/models/ItemsOut.ts deleted file mode 100644 index e45794b..0000000 --- a/frontend/src/client/models/ItemsOut.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -import type { ItemOut } from './ItemOut'; - -export type ItemsOut = { - data: Array; - count: number; -}; diff --git a/frontend/src/client/models/Message.ts b/frontend/src/client/models/Message.ts deleted file mode 100644 index 6220861..0000000 --- a/frontend/src/client/models/Message.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type Message = { - message: string; -}; diff --git a/frontend/src/client/models/NewPassword.ts b/frontend/src/client/models/NewPassword.ts deleted file mode 100644 index 9d5512b..0000000 --- a/frontend/src/client/models/NewPassword.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type NewPassword = { - token: string; - new_password: string; -}; diff --git a/frontend/src/client/models/Token.ts b/frontend/src/client/models/Token.ts deleted file mode 100644 index ea3120b..0000000 --- a/frontend/src/client/models/Token.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type Token = { - access_token: string; - token_type?: string; -}; diff --git a/frontend/src/client/models/UpdatePassword.ts b/frontend/src/client/models/UpdatePassword.ts deleted file mode 100644 index f0c4b69..0000000 --- a/frontend/src/client/models/UpdatePassword.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type UpdatePassword = { - current_password: string; - new_password: string; -}; diff --git a/frontend/src/client/models/UserCreate.ts b/frontend/src/client/models/UserCreate.ts deleted file mode 100644 index f49d0bf..0000000 --- a/frontend/src/client/models/UserCreate.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type UserCreate = { - email: string; - is_active?: boolean; - is_superuser?: boolean; - full_name?: (string | null); - password: string; -}; diff --git a/frontend/src/client/models/UserOut.ts b/frontend/src/client/models/UserOut.ts deleted file mode 100644 index 8387dc6..0000000 --- a/frontend/src/client/models/UserOut.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type UserOut = { - email: string; - is_active?: boolean; - is_superuser?: boolean; - full_name?: (string | null); - id: number; -}; diff --git a/frontend/src/client/models/UserRegister.ts b/frontend/src/client/models/UserRegister.ts deleted file mode 100644 index f7eefa4..0000000 --- a/frontend/src/client/models/UserRegister.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type UserRegister = { - email: string; - password: string; - full_name?: (string | null); -}; diff --git a/frontend/src/client/models/UserUpdate.ts b/frontend/src/client/models/UserUpdate.ts deleted file mode 100644 index 9ba346a..0000000 --- a/frontend/src/client/models/UserUpdate.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type UserUpdate = { - email?: (string | null); - is_active?: boolean; - is_superuser?: boolean; - full_name?: (string | null); - password?: (string | null); -}; diff --git a/frontend/src/client/models/UserUpdateMe.ts b/frontend/src/client/models/UserUpdateMe.ts deleted file mode 100644 index aa7a2fb..0000000 --- a/frontend/src/client/models/UserUpdateMe.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type UserUpdateMe = { - full_name?: (string | null); - email?: (string | null); -}; diff --git a/frontend/src/client/models/UsersOut.ts b/frontend/src/client/models/UsersOut.ts deleted file mode 100644 index 0e317ab..0000000 --- a/frontend/src/client/models/UsersOut.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -import type { UserOut } from './UserOut'; - -export type UsersOut = { - data: Array; - count: number; -}; diff --git a/frontend/src/client/models/ValidationError.ts b/frontend/src/client/models/ValidationError.ts deleted file mode 100644 index 0a3e90e..0000000 --- a/frontend/src/client/models/ValidationError.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export type ValidationError = { - loc: Array<(string | number)>; - msg: string; - type: string; -}; diff --git a/frontend/src/client/schemas.ts b/frontend/src/client/schemas.ts new file mode 100644 index 0000000..36d3098 --- /dev/null +++ b/frontend/src/client/schemas.ts @@ -0,0 +1,357 @@ +export const $Body_login_login_access_token = { + properties: { + grant_type: { + type: 'any-of', + contains: [{ + type: 'string', + pattern: 'password', +}, { + type: 'null', +}], +}, + username: { + type: 'string', + isRequired: true, +}, + password: { + type: 'string', + isRequired: true, +}, + scope: { + type: 'string', + default: '', +}, + client_id: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + client_secret: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + }, +} as const; + +export const $HTTPValidationError = { + properties: { + detail: { + type: 'array', + contains: { + type: 'ValidationError', + }, +}, + }, +} as const; + +export const $ItemCreate = { + properties: { + title: { + type: 'string', + isRequired: true, +}, + description: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + }, +} as const; + +export const $ItemOut = { + properties: { + title: { + type: 'string', + isRequired: true, +}, + description: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + id: { + type: 'number', + isRequired: true, +}, + owner_id: { + type: 'number', + isRequired: true, +}, + }, +} as const; + +export const $ItemUpdate = { + properties: { + title: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + description: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + }, +} as const; + +export const $ItemsOut = { + properties: { + data: { + type: 'array', + contains: { + type: 'ItemOut', + }, + isRequired: true, +}, + count: { + type: 'number', + isRequired: true, +}, + }, +} as const; + +export const $Message = { + properties: { + message: { + type: 'string', + isRequired: true, +}, + }, +} as const; + +export const $NewPassword = { + properties: { + token: { + type: 'string', + isRequired: true, +}, + new_password: { + type: 'string', + isRequired: true, +}, + }, +} as const; + +export const $Token = { + properties: { + access_token: { + type: 'string', + isRequired: true, +}, + token_type: { + type: 'string', + default: 'bearer', +}, + }, +} as const; + +export const $UpdatePassword = { + properties: { + current_password: { + type: 'string', + isRequired: true, +}, + new_password: { + type: 'string', + isRequired: true, +}, + }, +} as const; + +export const $UserCreate = { + properties: { + email: { + type: 'string', + isRequired: true, +}, + is_active: { + type: 'boolean', + default: true, +}, + is_superuser: { + type: 'boolean', + default: false, +}, + full_name: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + password: { + type: 'string', + isRequired: true, +}, + }, +} as const; + +export const $UserOut = { + properties: { + email: { + type: 'string', + isRequired: true, +}, + is_active: { + type: 'boolean', + default: true, +}, + is_superuser: { + type: 'boolean', + default: false, +}, + full_name: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + id: { + type: 'number', + isRequired: true, +}, + }, +} as const; + +export const $UserRegister = { + properties: { + email: { + type: 'string', + isRequired: true, +}, + password: { + type: 'string', + isRequired: true, +}, + full_name: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + }, +} as const; + +export const $UserUpdate = { + properties: { + email: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + is_active: { + type: 'boolean', + default: true, +}, + is_superuser: { + type: 'boolean', + default: false, +}, + full_name: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + password: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + }, +} as const; + +export const $UserUpdateMe = { + properties: { + full_name: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + email: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'null', +}], +}, + }, +} as const; + +export const $UsersOut = { + properties: { + data: { + type: 'array', + contains: { + type: 'UserOut', + }, + isRequired: true, +}, + count: { + type: 'number', + isRequired: true, +}, + }, +} as const; + +export const $ValidationError = { + properties: { + loc: { + type: 'array', + contains: { + type: 'any-of', + contains: [{ + type: 'string', +}, { + type: 'number', +}], +}, + isRequired: true, +}, + msg: { + type: 'string', + isRequired: true, +}, + type: { + type: 'string', + isRequired: true, +}, + }, +} as const; \ No newline at end of file diff --git a/frontend/src/client/schemas/$Body_login_login_access_token.ts b/frontend/src/client/schemas/$Body_login_login_access_token.ts deleted file mode 100644 index f545b71..0000000 --- a/frontend/src/client/schemas/$Body_login_login_access_token.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $Body_login_login_access_token = { - properties: { - grant_type: { - type: 'any-of', - contains: [{ - type: 'string', - pattern: 'password', - }, { - type: 'null', - }], - }, - username: { - type: 'string', - isRequired: true, - }, - password: { - type: 'string', - isRequired: true, - }, - scope: { - type: 'string', - }, - client_id: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - client_secret: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$HTTPValidationError.ts b/frontend/src/client/schemas/$HTTPValidationError.ts deleted file mode 100644 index f8eb5c8..0000000 --- a/frontend/src/client/schemas/$HTTPValidationError.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $HTTPValidationError = { - properties: { - detail: { - type: 'array', - contains: { - type: 'ValidationError', - }, - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$ItemCreate.ts b/frontend/src/client/schemas/$ItemCreate.ts deleted file mode 100644 index de80a67..0000000 --- a/frontend/src/client/schemas/$ItemCreate.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $ItemCreate = { - properties: { - title: { - type: 'string', - isRequired: true, - }, - description: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$ItemOut.ts b/frontend/src/client/schemas/$ItemOut.ts deleted file mode 100644 index 7a20bca..0000000 --- a/frontend/src/client/schemas/$ItemOut.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $ItemOut = { - properties: { - title: { - type: 'string', - isRequired: true, - }, - description: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - id: { - type: 'number', - isRequired: true, - }, - owner_id: { - type: 'number', - isRequired: true, - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$ItemUpdate.ts b/frontend/src/client/schemas/$ItemUpdate.ts deleted file mode 100644 index a7b52c5..0000000 --- a/frontend/src/client/schemas/$ItemUpdate.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $ItemUpdate = { - properties: { - title: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - description: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$ItemsOut.ts b/frontend/src/client/schemas/$ItemsOut.ts deleted file mode 100644 index cb05328..0000000 --- a/frontend/src/client/schemas/$ItemsOut.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $ItemsOut = { - properties: { - data: { - type: 'array', - contains: { - type: 'ItemOut', - }, - isRequired: true, - }, - count: { - type: 'number', - isRequired: true, - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$Message.ts b/frontend/src/client/schemas/$Message.ts deleted file mode 100644 index 5d51452..0000000 --- a/frontend/src/client/schemas/$Message.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $Message = { - properties: { - message: { - type: 'string', - isRequired: true, - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$NewPassword.ts b/frontend/src/client/schemas/$NewPassword.ts deleted file mode 100644 index 4959938..0000000 --- a/frontend/src/client/schemas/$NewPassword.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $NewPassword = { - properties: { - token: { - type: 'string', - isRequired: true, - }, - new_password: { - type: 'string', - isRequired: true, - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$Token.ts b/frontend/src/client/schemas/$Token.ts deleted file mode 100644 index d05d203..0000000 --- a/frontend/src/client/schemas/$Token.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $Token = { - properties: { - access_token: { - type: 'string', - isRequired: true, - }, - token_type: { - type: 'string', - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$UpdatePassword.ts b/frontend/src/client/schemas/$UpdatePassword.ts deleted file mode 100644 index 35828f7..0000000 --- a/frontend/src/client/schemas/$UpdatePassword.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $UpdatePassword = { - properties: { - current_password: { - type: 'string', - isRequired: true, - }, - new_password: { - type: 'string', - isRequired: true, - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$UserCreate.ts b/frontend/src/client/schemas/$UserCreate.ts deleted file mode 100644 index 8251ec9..0000000 --- a/frontend/src/client/schemas/$UserCreate.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $UserCreate = { - properties: { - email: { - type: 'string', - isRequired: true, - }, - is_active: { - type: 'boolean', - }, - is_superuser: { - type: 'boolean', - }, - full_name: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - password: { - type: 'string', - isRequired: true, - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$UserOut.ts b/frontend/src/client/schemas/$UserOut.ts deleted file mode 100644 index a4f0053..0000000 --- a/frontend/src/client/schemas/$UserOut.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $UserOut = { - properties: { - email: { - type: 'string', - isRequired: true, - }, - is_active: { - type: 'boolean', - }, - is_superuser: { - type: 'boolean', - }, - full_name: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - id: { - type: 'number', - isRequired: true, - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$UserRegister.ts b/frontend/src/client/schemas/$UserRegister.ts deleted file mode 100644 index 4b80b7e..0000000 --- a/frontend/src/client/schemas/$UserRegister.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $UserRegister = { - properties: { - email: { - type: 'string', - isRequired: true, - }, - password: { - type: 'string', - isRequired: true, - }, - full_name: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$UserUpdate.ts b/frontend/src/client/schemas/$UserUpdate.ts deleted file mode 100644 index a87f79e..0000000 --- a/frontend/src/client/schemas/$UserUpdate.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $UserUpdate = { - properties: { - email: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - is_active: { - type: 'boolean', - }, - is_superuser: { - type: 'boolean', - }, - full_name: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - password: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$UserUpdateMe.ts b/frontend/src/client/schemas/$UserUpdateMe.ts deleted file mode 100644 index ad5ef55..0000000 --- a/frontend/src/client/schemas/$UserUpdateMe.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $UserUpdateMe = { - properties: { - full_name: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - email: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'null', - }], - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$UsersOut.ts b/frontend/src/client/schemas/$UsersOut.ts deleted file mode 100644 index 4aa6617..0000000 --- a/frontend/src/client/schemas/$UsersOut.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $UsersOut = { - properties: { - data: { - type: 'array', - contains: { - type: 'UserOut', - }, - isRequired: true, - }, - count: { - type: 'number', - isRequired: true, - }, - }, -} as const; diff --git a/frontend/src/client/schemas/$ValidationError.ts b/frontend/src/client/schemas/$ValidationError.ts deleted file mode 100644 index 3a48f2a..0000000 --- a/frontend/src/client/schemas/$ValidationError.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export const $ValidationError = { - properties: { - loc: { - type: 'array', - contains: { - type: 'any-of', - contains: [{ - type: 'string', - }, { - type: 'number', - }], - }, - isRequired: true, - }, - msg: { - type: 'string', - isRequired: true, - }, - type: { - type: 'string', - isRequired: true, - }, - }, -} as const; diff --git a/frontend/src/client/services.ts b/frontend/src/client/services.ts new file mode 100644 index 0000000..4b7612a --- /dev/null +++ b/frontend/src/client/services.ts @@ -0,0 +1,524 @@ +import type { CancelablePromise } from './core/CancelablePromise'; +import { OpenAPI } from './core/OpenAPI'; +import { request as __request } from './core/request'; + +import type { Body_login_login_access_token,Message,NewPassword,Token,UserOut,UpdatePassword,UserCreate,UserRegister,UsersOut,UserUpdate,UserUpdateMe,ItemCreate,ItemOut,ItemsOut,ItemUpdate } from './models'; + +export type TDataLoginAccessToken = { + formData: Body_login_login_access_token + + } +export type TDataRecoverPassword = { + email: string + + } +export type TDataResetPassword = { + requestBody: NewPassword + + } +export type TDataRecoverPasswordHtmlContent = { + email: string + + } + +export class LoginService { + + /** + * Login Access Token + * OAuth2 compatible token login, get an access token for future requests + * @returns Token Successful Response + * @throws ApiError + */ + public static loginAccessToken(data: TDataLoginAccessToken): CancelablePromise { + const { +formData, +} = data; + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/login/access-token', + formData: formData, + mediaType: 'application/x-www-form-urlencoded', + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Test Token + * Test access token + * @returns UserOut Successful Response + * @throws ApiError + */ + public static testToken(): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/login/test-token', + }); + } + + /** + * Recover Password + * Password Recovery + * @returns Message Successful Response + * @throws ApiError + */ + public static recoverPassword(data: TDataRecoverPassword): CancelablePromise { + const { +email, +} = data; + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/password-recovery/{email}', + path: { + email + }, + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Reset Password + * Reset password + * @returns Message Successful Response + * @throws ApiError + */ + public static resetPassword(data: TDataResetPassword): CancelablePromise { + const { +requestBody, +} = data; + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/reset-password/', + body: requestBody, + mediaType: 'application/json', + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Recover Password Html Content + * HTML Content for Password Recovery + * @returns string Successful Response + * @throws ApiError + */ + public static recoverPasswordHtmlContent(data: TDataRecoverPasswordHtmlContent): CancelablePromise { + const { +email, +} = data; + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/password-recovery-html-content/{email}', + path: { + email + }, + errors: { + 422: `Validation Error`, + }, + }); + } + +} + +export type TDataReadUsers = { + limit?: number +skip?: number + + } +export type TDataCreateUser = { + requestBody: UserCreate + + } +export type TDataUpdateUserMe = { + requestBody: UserUpdateMe + + } +export type TDataUpdatePasswordMe = { + requestBody: UpdatePassword + + } +export type TDataRegisterUser = { + requestBody: UserRegister + + } +export type TDataReadUserById = { + userId: number + + } +export type TDataUpdateUser = { + requestBody: UserUpdate +userId: number + + } +export type TDataDeleteUser = { + userId: number + + } + +export class UsersService { + + /** + * Read Users + * Retrieve users. + * @returns UsersOut Successful Response + * @throws ApiError + */ + public static readUsers(data: TDataReadUsers = {}): CancelablePromise { + const { +limit = 100, +skip = 0, +} = data; + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/users/', + query: { + skip, limit + }, + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Create User + * Create new user. + * @returns UserOut Successful Response + * @throws ApiError + */ + public static createUser(data: TDataCreateUser): CancelablePromise { + const { +requestBody, +} = data; + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/users/', + body: requestBody, + mediaType: 'application/json', + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Read User Me + * Get current user. + * @returns UserOut Successful Response + * @throws ApiError + */ + public static readUserMe(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/users/me', + }); + } + + /** + * Update User Me + * Update own user. + * @returns UserOut Successful Response + * @throws ApiError + */ + public static updateUserMe(data: TDataUpdateUserMe): CancelablePromise { + const { +requestBody, +} = data; + return __request(OpenAPI, { + method: 'PATCH', + url: '/api/v1/users/me', + body: requestBody, + mediaType: 'application/json', + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Update Password Me + * Update own password. + * @returns Message Successful Response + * @throws ApiError + */ + public static updatePasswordMe(data: TDataUpdatePasswordMe): CancelablePromise { + const { +requestBody, +} = data; + return __request(OpenAPI, { + method: 'PATCH', + url: '/api/v1/users/me/password', + body: requestBody, + mediaType: 'application/json', + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Register User + * Create new user without the need to be logged in. + * @returns UserOut Successful Response + * @throws ApiError + */ + public static registerUser(data: TDataRegisterUser): CancelablePromise { + const { +requestBody, +} = data; + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/users/signup', + body: requestBody, + mediaType: 'application/json', + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Read User By Id + * Get a specific user by id. + * @returns UserOut Successful Response + * @throws ApiError + */ + public static readUserById(data: TDataReadUserById): CancelablePromise { + const { +userId, +} = data; + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/users/{user_id}', + path: { + user_id: userId + }, + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Update User + * Update a user. + * @returns UserOut Successful Response + * @throws ApiError + */ + public static updateUser(data: TDataUpdateUser): CancelablePromise { + const { +requestBody, +userId, +} = data; + return __request(OpenAPI, { + method: 'PATCH', + url: '/api/v1/users/{user_id}', + path: { + user_id: userId + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Delete User + * Delete a user. + * @returns Message Successful Response + * @throws ApiError + */ + public static deleteUser(data: TDataDeleteUser): CancelablePromise { + const { +userId, +} = data; + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/users/{user_id}', + path: { + user_id: userId + }, + errors: { + 422: `Validation Error`, + }, + }); + } + +} + +export type TDataTestEmail = { + emailTo: string + + } + +export class UtilsService { + + /** + * Test Email + * Test emails. + * @returns Message Successful Response + * @throws ApiError + */ + public static testEmail(data: TDataTestEmail): CancelablePromise { + const { +emailTo, +} = data; + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/utils/test-email/', + query: { + email_to: emailTo + }, + errors: { + 422: `Validation Error`, + }, + }); + } + +} + +export type TDataReadItems = { + limit?: number +skip?: number + + } +export type TDataCreateItem = { + requestBody: ItemCreate + + } +export type TDataReadItem = { + id: number + + } +export type TDataUpdateItem = { + id: number +requestBody: ItemUpdate + + } +export type TDataDeleteItem = { + id: number + + } + +export class ItemsService { + + /** + * Read Items + * Retrieve items. + * @returns ItemsOut Successful Response + * @throws ApiError + */ + public static readItems(data: TDataReadItems = {}): CancelablePromise { + const { +limit = 100, +skip = 0, +} = data; + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/items/', + query: { + skip, limit + }, + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Create Item + * Create new item. + * @returns ItemOut Successful Response + * @throws ApiError + */ + public static createItem(data: TDataCreateItem): CancelablePromise { + const { +requestBody, +} = data; + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/items/', + body: requestBody, + mediaType: 'application/json', + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Read Item + * Get item by ID. + * @returns ItemOut Successful Response + * @throws ApiError + */ + public static readItem(data: TDataReadItem): CancelablePromise { + const { +id, +} = data; + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/items/{id}', + path: { + id + }, + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Update Item + * Update an item. + * @returns ItemOut Successful Response + * @throws ApiError + */ + public static updateItem(data: TDataUpdateItem): CancelablePromise { + const { +id, +requestBody, +} = data; + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/items/{id}', + path: { + id + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 422: `Validation Error`, + }, + }); + } + + /** + * Delete Item + * Delete an item. + * @returns Message Successful Response + * @throws ApiError + */ + public static deleteItem(data: TDataDeleteItem): CancelablePromise { + const { +id, +} = data; + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/items/{id}', + path: { + id + }, + errors: { + 422: `Validation Error`, + }, + }); + } + +} \ No newline at end of file diff --git a/frontend/src/client/services/ItemsService.ts b/frontend/src/client/services/ItemsService.ts deleted file mode 100644 index 331581e..0000000 --- a/frontend/src/client/services/ItemsService.ts +++ /dev/null @@ -1,138 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -import type { ItemCreate } from '../models/ItemCreate'; -import type { ItemOut } from '../models/ItemOut'; -import type { ItemsOut } from '../models/ItemsOut'; -import type { ItemUpdate } from '../models/ItemUpdate'; -import type { Message } from '../models/Message'; - -import type { CancelablePromise } from '../core/CancelablePromise'; -import { OpenAPI } from '../core/OpenAPI'; -import { request as __request } from '../core/request'; - -export class ItemsService { - - /** - * Read Items - * Retrieve items. - * @returns ItemsOut Successful Response - * @throws ApiError - */ - public static readItems({ - skip, - limit = 100, - }: { - skip?: number, - limit?: number, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/api/v1/items/', - query: { - 'skip': skip, - 'limit': limit, - }, - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Create Item - * Create new item. - * @returns ItemOut Successful Response - * @throws ApiError - */ - public static createItem({ - requestBody, - }: { - requestBody: ItemCreate, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/api/v1/items/', - body: requestBody, - mediaType: 'application/json', - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Read Item - * Get item by ID. - * @returns ItemOut Successful Response - * @throws ApiError - */ - public static readItem({ - id, - }: { - id: number, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/api/v1/items/{id}', - path: { - 'id': id, - }, - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Update Item - * Update an item. - * @returns ItemOut Successful Response - * @throws ApiError - */ - public static updateItem({ - id, - requestBody, - }: { - id: number, - requestBody: ItemUpdate, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'PUT', - url: '/api/v1/items/{id}', - path: { - 'id': id, - }, - body: requestBody, - mediaType: 'application/json', - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Delete Item - * Delete an item. - * @returns Message Successful Response - * @throws ApiError - */ - public static deleteItem({ - id, - }: { - id: number, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'DELETE', - url: '/api/v1/items/{id}', - path: { - 'id': id, - }, - errors: { - 422: `Validation Error`, - }, - }); - } - -} diff --git a/frontend/src/client/services/LoginService.ts b/frontend/src/client/services/LoginService.ts deleted file mode 100644 index e7679ca..0000000 --- a/frontend/src/client/services/LoginService.ts +++ /dev/null @@ -1,120 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -import type { Body_login_login_access_token } from '../models/Body_login_login_access_token'; -import type { Message } from '../models/Message'; -import type { NewPassword } from '../models/NewPassword'; -import type { Token } from '../models/Token'; -import type { UserOut } from '../models/UserOut'; - -import type { CancelablePromise } from '../core/CancelablePromise'; -import { OpenAPI } from '../core/OpenAPI'; -import { request as __request } from '../core/request'; - -export class LoginService { - - /** - * Login Access Token - * OAuth2 compatible token login, get an access token for future requests - * @returns Token Successful Response - * @throws ApiError - */ - public static loginAccessToken({ - formData, - }: { - formData: Body_login_login_access_token, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/api/v1/login/access-token', - formData: formData, - mediaType: 'application/x-www-form-urlencoded', - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Test Token - * Test access token - * @returns UserOut Successful Response - * @throws ApiError - */ - public static testToken(): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/api/v1/login/test-token', - }); - } - - /** - * Recover Password - * Password Recovery - * @returns Message Successful Response - * @throws ApiError - */ - public static recoverPassword({ - email, - }: { - email: string, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/api/v1/password-recovery/{email}', - path: { - 'email': email, - }, - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Reset Password - * Reset password - * @returns Message Successful Response - * @throws ApiError - */ - public static resetPassword({ - requestBody, - }: { - requestBody: NewPassword, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/api/v1/reset-password/', - body: requestBody, - mediaType: 'application/json', - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Recover Password Html Content - * HTML Content for Password Recovery - * @returns string Successful Response - * @throws ApiError - */ - public static recoverPasswordHtmlContent({ - email, - }: { - email: string, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/api/v1/password-recovery-html-content/{email}', - path: { - 'email': email, - }, - errors: { - 422: `Validation Error`, - }, - }); - } - -} diff --git a/frontend/src/client/services/UsersService.ts b/frontend/src/client/services/UsersService.ts deleted file mode 100644 index ade311d..0000000 --- a/frontend/src/client/services/UsersService.ts +++ /dev/null @@ -1,220 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -import type { Message } from '../models/Message'; -import type { UpdatePassword } from '../models/UpdatePassword'; -import type { UserCreate } from '../models/UserCreate'; -import type { UserOut } from '../models/UserOut'; -import type { UserRegister } from '../models/UserRegister'; -import type { UsersOut } from '../models/UsersOut'; -import type { UserUpdate } from '../models/UserUpdate'; -import type { UserUpdateMe } from '../models/UserUpdateMe'; - -import type { CancelablePromise } from '../core/CancelablePromise'; -import { OpenAPI } from '../core/OpenAPI'; -import { request as __request } from '../core/request'; - -export class UsersService { - - /** - * Read Users - * Retrieve users. - * @returns UsersOut Successful Response - * @throws ApiError - */ - public static readUsers({ - skip, - limit = 100, - }: { - skip?: number, - limit?: number, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/api/v1/users/', - query: { - 'skip': skip, - 'limit': limit, - }, - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Create User - * Create new user. - * @returns UserOut Successful Response - * @throws ApiError - */ - public static createUser({ - requestBody, - }: { - requestBody: UserCreate, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/api/v1/users/', - body: requestBody, - mediaType: 'application/json', - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Read User Me - * Get current user. - * @returns UserOut Successful Response - * @throws ApiError - */ - public static readUserMe(): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/api/v1/users/me', - }); - } - - /** - * Update User Me - * Update own user. - * @returns UserOut Successful Response - * @throws ApiError - */ - public static updateUserMe({ - requestBody, - }: { - requestBody: UserUpdateMe, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'PATCH', - url: '/api/v1/users/me', - body: requestBody, - mediaType: 'application/json', - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Update Password Me - * Update own password. - * @returns Message Successful Response - * @throws ApiError - */ - public static updatePasswordMe({ - requestBody, - }: { - requestBody: UpdatePassword, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'PATCH', - url: '/api/v1/users/me/password', - body: requestBody, - mediaType: 'application/json', - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Register User - * Create new user without the need to be logged in. - * @returns UserOut Successful Response - * @throws ApiError - */ - public static registerUser({ - requestBody, - }: { - requestBody: UserRegister, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/api/v1/users/signup', - body: requestBody, - mediaType: 'application/json', - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Read User By Id - * Get a specific user by id. - * @returns UserOut Successful Response - * @throws ApiError - */ - public static readUserById({ - userId, - }: { - userId: number, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/api/v1/users/{user_id}', - path: { - 'user_id': userId, - }, - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Update User - * Update a user. - * @returns UserOut Successful Response - * @throws ApiError - */ - public static updateUser({ - userId, - requestBody, - }: { - userId: number, - requestBody: UserUpdate, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'PATCH', - url: '/api/v1/users/{user_id}', - path: { - 'user_id': userId, - }, - body: requestBody, - mediaType: 'application/json', - errors: { - 422: `Validation Error`, - }, - }); - } - - /** - * Delete User - * Delete a user. - * @returns Message Successful Response - * @throws ApiError - */ - public static deleteUser({ - userId, - }: { - userId: number, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'DELETE', - url: '/api/v1/users/{user_id}', - path: { - 'user_id': userId, - }, - errors: { - 422: `Validation Error`, - }, - }); - } - -} diff --git a/frontend/src/client/services/UtilsService.ts b/frontend/src/client/services/UtilsService.ts deleted file mode 100644 index bc6f97e..0000000 --- a/frontend/src/client/services/UtilsService.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -import type { Message } from '../models/Message'; - -import type { CancelablePromise } from '../core/CancelablePromise'; -import { OpenAPI } from '../core/OpenAPI'; -import { request as __request } from '../core/request'; - -export class UtilsService { - - /** - * Test Email - * Test emails. - * @returns Message Successful Response - * @throws ApiError - */ - public static testEmail({ - emailTo, - }: { - emailTo: string, - }): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/api/v1/utils/test-email/', - query: { - 'email_to': emailTo, - }, - errors: { - 422: `Validation Error`, - }, - }); - } - -} diff --git a/frontend/src/components/Admin/AddUser.tsx b/frontend/src/components/Admin/AddUser.tsx index 12fb2ac..7339f8b 100644 --- a/frontend/src/components/Admin/AddUser.tsx +++ b/frontend/src/components/Admin/AddUser.tsx @@ -62,7 +62,7 @@ const AddUser = ({ isOpen, onClose }: AddUserProps) => { onClose() }, onError: (err: ApiError) => { - const errDetail = err.body?.detail + const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, onSettled: () => { diff --git a/frontend/src/components/Admin/EditUser.tsx b/frontend/src/components/Admin/EditUser.tsx index 9ac7017..b6d4d18 100644 --- a/frontend/src/components/Admin/EditUser.tsx +++ b/frontend/src/components/Admin/EditUser.tsx @@ -61,7 +61,7 @@ const EditUser = ({ user, isOpen, onClose }: EditUserProps) => { onClose() }, onError: (err: ApiError) => { - const errDetail = err.body?.detail + const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, onSettled: () => { diff --git a/frontend/src/components/Items/AddItem.tsx b/frontend/src/components/Items/AddItem.tsx index 18338ea..6a0df58 100644 --- a/frontend/src/components/Items/AddItem.tsx +++ b/frontend/src/components/Items/AddItem.tsx @@ -49,7 +49,7 @@ const AddItem = ({ isOpen, onClose }: AddItemProps) => { onClose() }, onError: (err: ApiError) => { - const errDetail = err.body?.detail + const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, onSettled: () => { diff --git a/frontend/src/components/Items/EditItem.tsx b/frontend/src/components/Items/EditItem.tsx index 5d43d50..db83114 100644 --- a/frontend/src/components/Items/EditItem.tsx +++ b/frontend/src/components/Items/EditItem.tsx @@ -52,7 +52,7 @@ const EditItem = ({ item, isOpen, onClose }: EditItemProps) => { onClose() }, onError: (err: ApiError) => { - const errDetail = err.body?.detail + const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, onSettled: () => { diff --git a/frontend/src/components/UserSettings/ChangePassword.tsx b/frontend/src/components/UserSettings/ChangePassword.tsx index abdc2bb..4e8b7ea 100644 --- a/frontend/src/components/UserSettings/ChangePassword.tsx +++ b/frontend/src/components/UserSettings/ChangePassword.tsx @@ -43,7 +43,7 @@ const ChangePassword = () => { reset() }, onError: (err: ApiError) => { - const errDetail = err.body?.detail + const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, }, diff --git a/frontend/src/components/UserSettings/DeleteConfirmation.tsx b/frontend/src/components/UserSettings/DeleteConfirmation.tsx index bb1c97e..522805d 100644 --- a/frontend/src/components/UserSettings/DeleteConfirmation.tsx +++ b/frontend/src/components/UserSettings/DeleteConfirmation.tsx @@ -44,7 +44,7 @@ const DeleteConfirmation = ({ isOpen, onClose }: DeleteProps) => { onClose() }, onError: (err: ApiError) => { - const errDetail = err.body?.detail + const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, onSettled: () => { diff --git a/frontend/src/components/UserSettings/UserInformation.tsx b/frontend/src/components/UserSettings/UserInformation.tsx index 014f36e..358f258 100644 --- a/frontend/src/components/UserSettings/UserInformation.tsx +++ b/frontend/src/components/UserSettings/UserInformation.tsx @@ -57,7 +57,7 @@ const UserInformation = () => { showToast("Success!", "User updated successfully.", "success") }, onError: (err: ApiError) => { - const errDetail = err.body?.detail + const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, onSettled: () => { diff --git a/frontend/src/hooks/useAuth.ts b/frontend/src/hooks/useAuth.ts index 2abd8d8..bdcfc65 100644 --- a/frontend/src/hooks/useAuth.ts +++ b/frontend/src/hooks/useAuth.ts @@ -37,7 +37,7 @@ const useAuth = () => { navigate({ to: "/" }) }, onError: (err: ApiError) => { - const errDetail = err.body.detail + const errDetail = (err.body as any)?.detail setError(errDetail) }, }) diff --git a/frontend/src/routes/_layout/admin.tsx b/frontend/src/routes/_layout/admin.tsx index f593c56..de79a02 100644 --- a/frontend/src/routes/_layout/admin.tsx +++ b/frontend/src/routes/_layout/admin.tsx @@ -16,7 +16,7 @@ import { import { createFileRoute } from "@tanstack/react-router" import { useQuery, useQueryClient } from "react-query" -import { type ApiError, type UserOut, UsersService } from "../../client" +import { type UserOut, UsersService } from "../../client" import ActionsMenu from "../../components/Common/ActionsMenu" import Navbar from "../../components/Common/Navbar" import useCustomToast from "../../hooks/useCustomToast" @@ -37,7 +37,7 @@ function Admin() { } = useQuery("users", () => UsersService.readUsers({})) if (isError) { - const errDetail = (error as ApiError).body?.detail + const errDetail = (error as any).body?.detail showToast("Something went wrong.", `${errDetail}`, "error") } diff --git a/frontend/src/routes/_layout/items.tsx b/frontend/src/routes/_layout/items.tsx index 88f8cd3..bb0d309 100644 --- a/frontend/src/routes/_layout/items.tsx +++ b/frontend/src/routes/_layout/items.tsx @@ -14,7 +14,7 @@ import { import { createFileRoute } from "@tanstack/react-router" import { useQuery } from "react-query" -import { type ApiError, ItemsService } from "../../client" +import { ItemsService } from "../../client" import ActionsMenu from "../../components/Common/ActionsMenu" import Navbar from "../../components/Common/Navbar" import useCustomToast from "../../hooks/useCustomToast" @@ -33,7 +33,7 @@ function Items() { } = useQuery("items", () => ItemsService.readItems({})) if (isError) { - const errDetail = (error as ApiError).body?.detail + const errDetail = (error as any).body?.detail showToast("Something went wrong.", `${errDetail}`, "error") } diff --git a/frontend/src/routes/login.tsx b/frontend/src/routes/login.tsx index c181444..5e575b9 100644 --- a/frontend/src/routes/login.tsx +++ b/frontend/src/routes/login.tsx @@ -21,7 +21,7 @@ import { import { type SubmitHandler, useForm } from "react-hook-form" import Logo from "../assets/images/fastapi-logo.svg" -import type { Body_login_login_access_token as AccessToken } from "../client/models/Body_login_login_access_token" +import type { Body_login_login_access_token as AccessToken } from "../client" import useAuth, { isLoggedIn } from "../hooks/useAuth" import { emailPattern } from "../utils" diff --git a/frontend/src/routes/reset-password.tsx b/frontend/src/routes/reset-password.tsx index 2a92b66..80f7171 100644 --- a/frontend/src/routes/reset-password.tsx +++ b/frontend/src/routes/reset-password.tsx @@ -64,7 +64,7 @@ function ResetPassword() { navigate({ to: "/login" }) }, onError: (err: ApiError) => { - const errDetail = err.body?.detail + const errDetail = (err.body as any)?.detail showToast("Something went wrong.", `${errDetail}`, "error") }, })