Browse Source

♻️ Migrate frontend client generation from `openapi-typescript-codegen` to `@hey-api/openapi-ts` (#1151)

pull/13907/head
Alejandra 1 year ago
committed by GitHub
parent
commit
529a475c8d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 289
      frontend/package-lock.json
  2. 4
      frontend/package.json
  3. 6
      frontend/src/client/core/ApiError.ts
  4. 14
      frontend/src/client/core/ApiRequestOptions.ts
  5. 10
      frontend/src/client/core/ApiResult.ts
  6. 83
      frontend/src/client/core/CancelablePromise.ts
  7. 58
      frontend/src/client/core/OpenAPI.ts
  8. 155
      frontend/src/client/core/request.ts
  9. 12
      frontend/src/client/core/types.ts
  10. 48
      frontend/src/client/index.ts
  11. 132
      frontend/src/client/models.ts
  12. 13
      frontend/src/client/models/Body_login_login_access_token.ts
  13. 10
      frontend/src/client/models/HTTPValidationError.ts
  14. 9
      frontend/src/client/models/ItemCreate.ts
  15. 11
      frontend/src/client/models/ItemOut.ts
  16. 9
      frontend/src/client/models/ItemUpdate.ts
  17. 11
      frontend/src/client/models/ItemsOut.ts
  18. 8
      frontend/src/client/models/Message.ts
  19. 9
      frontend/src/client/models/NewPassword.ts
  20. 9
      frontend/src/client/models/Token.ts
  21. 9
      frontend/src/client/models/UpdatePassword.ts
  22. 12
      frontend/src/client/models/UserCreate.ts
  23. 12
      frontend/src/client/models/UserOut.ts
  24. 10
      frontend/src/client/models/UserRegister.ts
  25. 12
      frontend/src/client/models/UserUpdate.ts
  26. 9
      frontend/src/client/models/UserUpdateMe.ts
  27. 11
      frontend/src/client/models/UsersOut.ts
  28. 10
      frontend/src/client/models/ValidationError.ts
  29. 357
      frontend/src/client/schemas.ts
  30. 44
      frontend/src/client/schemas/$Body_login_login_access_token.ts
  31. 14
      frontend/src/client/schemas/$HTTPValidationError.ts
  32. 20
      frontend/src/client/schemas/$ItemCreate.ts
  33. 28
      frontend/src/client/schemas/$ItemOut.ts
  34. 24
      frontend/src/client/schemas/$ItemUpdate.ts
  35. 19
      frontend/src/client/schemas/$ItemsOut.ts
  36. 12
      frontend/src/client/schemas/$Message.ts
  37. 16
      frontend/src/client/schemas/$NewPassword.ts
  38. 15
      frontend/src/client/schemas/$Token.ts
  39. 16
      frontend/src/client/schemas/$UpdatePassword.ts
  40. 30
      frontend/src/client/schemas/$UserCreate.ts
  41. 30
      frontend/src/client/schemas/$UserOut.ts
  42. 24
      frontend/src/client/schemas/$UserRegister.ts
  43. 38
      frontend/src/client/schemas/$UserUpdate.ts
  44. 24
      frontend/src/client/schemas/$UserUpdateMe.ts
  45. 19
      frontend/src/client/schemas/$UsersOut.ts
  46. 28
      frontend/src/client/schemas/$ValidationError.ts
  47. 524
      frontend/src/client/services.ts
  48. 138
      frontend/src/client/services/ItemsService.ts
  49. 120
      frontend/src/client/services/LoginService.ts
  50. 220
      frontend/src/client/services/UsersService.ts
  51. 36
      frontend/src/client/services/UtilsService.ts
  52. 2
      frontend/src/components/Admin/AddUser.tsx
  53. 2
      frontend/src/components/Admin/EditUser.tsx
  54. 2
      frontend/src/components/Items/AddItem.tsx
  55. 2
      frontend/src/components/Items/EditItem.tsx
  56. 2
      frontend/src/components/UserSettings/ChangePassword.tsx
  57. 2
      frontend/src/components/UserSettings/DeleteConfirmation.tsx
  58. 2
      frontend/src/components/UserSettings/UserInformation.tsx
  59. 2
      frontend/src/hooks/useAuth.ts
  60. 4
      frontend/src/routes/_layout/admin.tsx
  61. 4
      frontend/src/routes/_layout/items.tsx
  62. 2
      frontend/src/routes/login.tsx
  63. 2
      frontend/src/routes/reset-password.tsx

289
frontend/package-lock.json

@ -24,29 +24,17 @@
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "1.6.1", "@biomejs/biome": "1.6.1",
"@hey-api/openapi-ts": "^0.34.1",
"@tanstack/router-devtools": "1.19.1", "@tanstack/router-devtools": "1.19.1",
"@tanstack/router-vite-plugin": "1.19.0", "@tanstack/router-vite-plugin": "1.19.0",
"@types/node": "20.10.5", "@types/node": "20.10.5",
"@types/react": "^18.2.37", "@types/react": "^18.2.37",
"@types/react-dom": "^18.2.15", "@types/react-dom": "^18.2.15",
"@vitejs/plugin-react-swc": "^3.5.0", "@vitejs/plugin-react-swc": "^3.5.0",
"openapi-typescript-codegen": "0.25.0",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"vite": "^5.0.13" "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": { "node_modules/@babel/code-frame": {
"version": "7.23.5", "version": "7.23.5",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
@ -2071,6 +2059,62 @@
"node": ">=12" "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": { "node_modules/@jsdevtools/ono": {
"version": "7.1.3", "version": "7.1.3",
"resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
@ -2729,12 +2773,6 @@
"unload": "2.2.0" "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": { "node_modules/callsites": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@ -2743,18 +2781,6 @@
"node": ">=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": { "node_modules/clsx": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
@ -2780,15 +2806,6 @@
"node": ">= 0.8" "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": { "node_modules/compute-scroll-into-view": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz", "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", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" "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": { "node_modules/fs.realpath": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -3106,12 +3109,6 @@
"csstype": "^3.0.10" "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": { "node_modules/handlebars": {
"version": "4.7.8", "version": "4.7.8",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "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", "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==" "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": { "node_modules/lines-and-columns": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@ -3384,22 +3356,6 @@
"wrappy": "1" "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": { "node_modules/parent-module": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@ -3873,15 +3829,6 @@
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true "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": { "node_modules/unload": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz",
@ -4025,18 +3972,6 @@
} }
}, },
"dependencies": { "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": { "@babel/code-frame": {
"version": "7.23.5", "version": "7.23.5",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
@ -5435,6 +5370,43 @@
"dev": true, "dev": true,
"optional": 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": { "@jsdevtools/ono": {
"version": "7.1.3", "version": "7.1.3",
"resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
@ -5850,23 +5822,11 @@
"unload": "2.2.0" "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": { "callsites": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" "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": { "clsx": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
@ -5886,12 +5846,6 @@
"delayed-stream": "~1.0.0" "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": { "compute-scroll-into-view": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz", "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": { "fs.realpath": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -6129,12 +6072,6 @@
"dev": true, "dev": true,
"requires": {} "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": { "handlebars": {
"version": "4.7.8", "version": "4.7.8",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "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", "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==" "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": { "lines-and-columns": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@ -6348,19 +6266,6 @@
"wrappy": "1" "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": { "parent-module": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@ -6662,12 +6567,6 @@
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true "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": { "unload": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz",

4
frontend/package.json

@ -8,7 +8,7 @@
"build": "tsc && vite build", "build": "tsc && vite build",
"lint": "biome check --apply-unsafe --no-errors-on-unmatched --files-ignore-unknown=true ./", "lint": "biome check --apply-unsafe --no-errors-on-unmatched --files-ignore-unknown=true ./",
"preview": "vite preview", "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": { "dependencies": {
"@chakra-ui/icons": "2.1.1", "@chakra-ui/icons": "2.1.1",
@ -27,13 +27,13 @@
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "1.6.1", "@biomejs/biome": "1.6.1",
"@hey-api/openapi-ts": "^0.34.1",
"@tanstack/router-devtools": "1.19.1", "@tanstack/router-devtools": "1.19.1",
"@tanstack/router-vite-plugin": "1.19.0", "@tanstack/router-vite-plugin": "1.19.0",
"@types/node": "20.10.5", "@types/node": "20.10.5",
"@types/react": "^18.2.37", "@types/react": "^18.2.37",
"@types/react-dom": "^18.2.15", "@types/react-dom": "^18.2.15",
"@vitejs/plugin-react-swc": "^3.5.0", "@vitejs/plugin-react-swc": "^3.5.0",
"openapi-typescript-codegen": "0.25.0",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"vite": "^5.0.13" "vite": "^5.0.13"
} }

6
frontend/src/client/core/ApiError.ts

@ -1,7 +1,3 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { ApiRequestOptions } from './ApiRequestOptions'; import type { ApiRequestOptions } from './ApiRequestOptions';
import type { ApiResult } from './ApiResult'; import type { ApiResult } from './ApiResult';
@ -9,7 +5,7 @@ export class ApiError extends Error {
public readonly url: string; public readonly url: string;
public readonly status: number; public readonly status: number;
public readonly statusText: string; public readonly statusText: string;
public readonly body: any; public readonly body: unknown;
public readonly request: ApiRequestOptions; public readonly request: ApiRequestOptions;
constructor(request: ApiRequestOptions, response: ApiResult, message: string) { constructor(request: ApiRequestOptions, response: ApiResult, message: string) {

14
frontend/src/client/core/ApiRequestOptions.ts

@ -1,15 +1,11 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type ApiRequestOptions = { export type ApiRequestOptions = {
readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH';
readonly url: string; readonly url: string;
readonly path?: Record<string, any>; readonly path?: Record<string, unknown>;
readonly cookies?: Record<string, any>; readonly cookies?: Record<string, unknown>;
readonly headers?: Record<string, any>; readonly headers?: Record<string, unknown>;
readonly query?: Record<string, any>; readonly query?: Record<string, unknown>;
readonly formData?: Record<string, any>; readonly formData?: Record<string, unknown>;
readonly body?: any; readonly body?: any;
readonly mediaType?: string; readonly mediaType?: string;
readonly responseHeader?: string; readonly responseHeader?: string;

10
frontend/src/client/core/ApiResult.ts

@ -1,11 +1,7 @@
/* generated using openapi-typescript-codegen -- do no edit */ export type ApiResult<TData = any> = {
/* istanbul ignore file */ readonly body: TData;
/* tslint:disable */
/* eslint-disable */
export type ApiResult = {
readonly url: string;
readonly ok: boolean; readonly ok: boolean;
readonly status: number; readonly status: number;
readonly statusText: string; readonly statusText: string;
readonly body: any; readonly url: string;
}; };

83
frontend/src/client/core/CancelablePromise.ts

@ -1,9 +1,4 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export class CancelError extends Error { export class CancelError extends Error {
constructor(message: string) { constructor(message: string) {
super(message); super(message);
this.name = 'CancelError'; this.name = 'CancelError';
@ -23,62 +18,62 @@ export interface OnCancel {
} }
export class CancelablePromise<T> implements Promise<T> { export class CancelablePromise<T> implements Promise<T> {
#isResolved: boolean; private _isResolved: boolean;
#isRejected: boolean; private _isRejected: boolean;
#isCancelled: boolean; private _isCancelled: boolean;
readonly #cancelHandlers: (() => void)[]; readonly cancelHandlers: (() => void)[];
readonly #promise: Promise<T>; readonly promise: Promise<T>;
#resolve?: (value: T | PromiseLike<T>) => void; private _resolve?: (value: T | PromiseLike<T>) => void;
#reject?: (reason?: any) => void; private _reject?: (reason?: unknown) => void;
constructor( constructor(
executor: ( executor: (
resolve: (value: T | PromiseLike<T>) => void, resolve: (value: T | PromiseLike<T>) => void,
reject: (reason?: any) => void, reject: (reason?: unknown) => void,
onCancel: OnCancel onCancel: OnCancel
) => void ) => void
) { ) {
this.#isResolved = false; this._isResolved = false;
this.#isRejected = false; this._isRejected = false;
this.#isCancelled = false; this._isCancelled = false;
this.#cancelHandlers = []; this.cancelHandlers = [];
this.#promise = new Promise<T>((resolve, reject) => { this.promise = new Promise<T>((resolve, reject) => {
this.#resolve = resolve; this._resolve = resolve;
this.#reject = reject; this._reject = reject;
const onResolve = (value: T | PromiseLike<T>): void => { const onResolve = (value: T | PromiseLike<T>): void => {
if (this.#isResolved || this.#isRejected || this.#isCancelled) { if (this._isResolved || this._isRejected || this._isCancelled) {
return; return;
} }
this.#isResolved = true; this._isResolved = true;
this.#resolve?.(value); if (this._resolve) this._resolve(value);
}; };
const onReject = (reason?: any): void => { const onReject = (reason?: unknown): void => {
if (this.#isResolved || this.#isRejected || this.#isCancelled) { if (this._isResolved || this._isRejected || this._isCancelled) {
return; return;
} }
this.#isRejected = true; this._isRejected = true;
this.#reject?.(reason); if (this._reject) this._reject(reason);
}; };
const onCancel = (cancelHandler: () => void): void => { const onCancel = (cancelHandler: () => void): void => {
if (this.#isResolved || this.#isRejected || this.#isCancelled) { if (this._isResolved || this._isRejected || this._isCancelled) {
return; return;
} }
this.#cancelHandlers.push(cancelHandler); this.cancelHandlers.push(cancelHandler);
}; };
Object.defineProperty(onCancel, 'isResolved', { Object.defineProperty(onCancel, 'isResolved', {
get: (): boolean => this.#isResolved, get: (): boolean => this._isResolved,
}); });
Object.defineProperty(onCancel, 'isRejected', { Object.defineProperty(onCancel, 'isRejected', {
get: (): boolean => this.#isRejected, get: (): boolean => this._isRejected,
}); });
Object.defineProperty(onCancel, 'isCancelled', { Object.defineProperty(onCancel, 'isCancelled', {
get: (): boolean => this.#isCancelled, get: (): boolean => this._isCancelled,
}); });
return executor(onResolve, onReject, onCancel as OnCancel); return executor(onResolve, onReject, onCancel as OnCancel);
@ -91,29 +86,29 @@ export class CancelablePromise<T> implements Promise<T> {
public then<TResult1 = T, TResult2 = never>( public then<TResult1 = T, TResult2 = never>(
onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,
onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null onRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null
): Promise<TResult1 | TResult2> { ): Promise<TResult1 | TResult2> {
return this.#promise.then(onFulfilled, onRejected); return this.promise.then(onFulfilled, onRejected);
} }
public catch<TResult = never>( public catch<TResult = never>(
onRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null onRejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null
): Promise<T | TResult> { ): Promise<T | TResult> {
return this.#promise.catch(onRejected); return this.promise.catch(onRejected);
} }
public finally(onFinally?: (() => void) | null): Promise<T> { public finally(onFinally?: (() => void) | null): Promise<T> {
return this.#promise.finally(onFinally); return this.promise.finally(onFinally);
} }
public cancel(): void { public cancel(): void {
if (this.#isResolved || this.#isRejected || this.#isCancelled) { if (this._isResolved || this._isRejected || this._isCancelled) {
return; return;
} }
this.#isCancelled = true; this._isCancelled = true;
if (this.#cancelHandlers.length) { if (this.cancelHandlers.length) {
try { try {
for (const cancelHandler of this.#cancelHandlers) { for (const cancelHandler of this.cancelHandlers) {
cancelHandler(); cancelHandler();
} }
} catch (error) { } catch (error) {
@ -121,11 +116,11 @@ export class CancelablePromise<T> implements Promise<T> {
return; return;
} }
} }
this.#cancelHandlers.length = 0; this.cancelHandlers.length = 0;
this.#reject?.(new CancelError('Request aborted')); if (this._reject) this._reject(new CancelError('Request aborted'));
} }
public get isCancelled(): boolean { public get isCancelled(): boolean {
return this.#isCancelled; return this._isCancelled;
} }
} }

58
frontend/src/client/core/OpenAPI.ts

@ -1,32 +1,58 @@
/* generated using openapi-typescript-codegen -- do no edit */ import type { AxiosRequestConfig, AxiosResponse } from 'axios';import type { ApiRequestOptions } from './ApiRequestOptions';
/* istanbul ignore file */ import type { TResult } from './types';
/* tslint:disable */
/* eslint-disable */
import type { ApiRequestOptions } from './ApiRequestOptions';
type Resolver<T> = (options: ApiRequestOptions) => Promise<T>;
type Headers = Record<string, string>; type Headers = Record<string, string>;
type Middleware<T> = (value: T) => T | Promise<T>;
type Resolver<T> = (options: ApiRequestOptions) => Promise<T>;
export class Interceptors<T> {
_fns: Middleware<T>[];
constructor() {
this._fns = [];
}
eject(fn: Middleware<T>) {
const index = this._fns.indexOf(fn);
if (index !== -1) {
this._fns = [
...this._fns.slice(0, index),
...this._fns.slice(index + 1),
];
}
}
use(fn: Middleware<T>) {
this._fns = [...this._fns, fn];
}
}
export type OpenAPIConfig = { export type OpenAPIConfig = {
BASE: string; BASE: string;
VERSION: string;
WITH_CREDENTIALS: boolean;
CREDENTIALS: 'include' | 'omit' | 'same-origin'; CREDENTIALS: 'include' | 'omit' | 'same-origin';
ENCODE_PATH?: ((path: string) => string) | undefined;
HEADERS?: Headers | Resolver<Headers> | undefined;
PASSWORD?: string | Resolver<string> | undefined;
RESULT?: TResult;
TOKEN?: string | Resolver<string> | undefined; TOKEN?: string | Resolver<string> | undefined;
USERNAME?: string | Resolver<string> | undefined; USERNAME?: string | Resolver<string> | undefined;
PASSWORD?: string | Resolver<string> | undefined; VERSION: string;
HEADERS?: Headers | Resolver<Headers> | undefined; WITH_CREDENTIALS: boolean;
ENCODE_PATH?: ((path: string) => string) | undefined; interceptors: {request: Interceptors<AxiosRequestConfig>;
response: Interceptors<AxiosResponse>;};
}; };
export const OpenAPI: OpenAPIConfig = { export const OpenAPI: OpenAPIConfig = {
BASE: '', BASE: '',
VERSION: '0.1.0',
WITH_CREDENTIALS: false,
CREDENTIALS: 'include', CREDENTIALS: 'include',
ENCODE_PATH: undefined,
HEADERS: undefined,
PASSWORD: undefined,
RESULT: 'body',
TOKEN: undefined, TOKEN: undefined,
USERNAME: undefined, USERNAME: undefined,
PASSWORD: undefined, VERSION: '0.1.0',
HEADERS: undefined, WITH_CREDENTIALS: false,
ENCODE_PATH: undefined, interceptors: {request: new Interceptors(),response: new Interceptors(),
},
}; };

155
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 axios from 'axios';
import type { AxiosError, AxiosRequestConfig, AxiosResponse, AxiosInstance } from 'axios'; import type { AxiosError, AxiosRequestConfig, AxiosResponse, AxiosInstance } from 'axios';
import FormData from 'form-data';
import { ApiError } from './ApiError'; import { ApiError } from './ApiError';
import type { ApiRequestOptions } from './ApiRequestOptions'; import type { ApiRequestOptions } from './ApiRequestOptions';
@ -13,32 +8,19 @@ import { CancelablePromise } from './CancelablePromise';
import type { OnCancel } from './CancelablePromise'; import type { OnCancel } from './CancelablePromise';
import type { OpenAPIConfig } from './OpenAPI'; import type { OpenAPIConfig } from './OpenAPI';
export const isDefined = <T>(value: T | null | undefined): value is Exclude<T, null | undefined> => { export const isString = (value: unknown): value is string => {
return value !== undefined && value !== null;
};
export const isString = (value: any): value is string => {
return typeof value === 'string'; return typeof value === 'string';
}; };
export const isStringWithValue = (value: any): value is string => { export const isStringWithValue = (value: unknown): value is string => {
return isString(value) && value !== ''; return isString(value) && value !== '';
}; };
export const isBlob = (value: any): value is Blob => { export const isBlob = (value: any): value is Blob => {
return ( return value instanceof Blob;
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])
);
}; };
export const isFormData = (value: any): value is FormData => { export const isFormData = (value: unknown): value is FormData => {
return value instanceof FormData; return value instanceof FormData;
}; };
@ -55,38 +37,30 @@ export const base64 = (str: string): string => {
} }
}; };
export const getQueryString = (params: Record<string, any>): string => { export const getQueryString = (params: Record<string, unknown>): string => {
const qs: string[] = []; const qs: string[] = [];
const append = (key: string, value: any) => { const append = (key: string, value: unknown) => {
qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
}; };
const process = (key: string, value: any) => { const encodePair = (key: string, value: unknown) => {
if (isDefined(value)) { if (value === undefined || value === null) {
return;
}
if (Array.isArray(value)) { if (Array.isArray(value)) {
value.forEach(v => { value.forEach(v => encodePair(key, v));
process(key, v);
});
} else if (typeof value === 'object') { } else if (typeof value === 'object') {
Object.entries(value).forEach(([k, v]) => { Object.entries(value).forEach(([k, v]) => encodePair(`${key}[${k}]`, v));
process(`${key}[${k}]`, v);
});
} else { } else {
append(key, value); append(key, value);
} }
}
}; };
Object.entries(params).forEach(([key, value]) => { Object.entries(params).forEach(([key, value]) => encodePair(key, value));
process(key, value);
});
if (qs.length > 0) {
return `?${qs.join('&')}`;
}
return ''; return qs.length ? `?${qs.join('&')}` : '';
}; };
const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => { const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {
@ -101,18 +75,15 @@ const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {
return substring; return substring;
}); });
const url = `${config.BASE}${path}`; const url = config.BASE + path;
if (options.query) { return options.query ? url + getQueryString(options.query) : url;
return `${url}${getQueryString(options.query)}`;
}
return url;
}; };
export const getFormData = (options: ApiRequestOptions): FormData | undefined => { export const getFormData = (options: ApiRequestOptions): FormData | undefined => {
if (options.formData) { if (options.formData) {
const formData = new FormData(); const formData = new FormData();
const process = (key: string, value: any) => { const process = (key: string, value: unknown) => {
if (isString(value) || isBlob(value)) { if (isString(value) || isBlob(value)) {
formData.append(key, value); formData.append(key, value);
} else { } else {
@ -121,7 +92,7 @@ export const getFormData = (options: ApiRequestOptions): FormData | undefined =>
}; };
Object.entries(options.formData) Object.entries(options.formData)
.filter(([_, value]) => isDefined(value)) .filter(([, value]) => value !== undefined && value !== null)
.forEach(([key, value]) => { .forEach(([key, value]) => {
if (Array.isArray(value)) { if (Array.isArray(value)) {
value.forEach(v => process(key, v)); value.forEach(v => process(key, v));
@ -144,20 +115,20 @@ export const resolve = async <T>(options: ApiRequestOptions, resolver?: T | Reso
return resolver; return resolver;
}; };
export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions, formData?: FormData): Promise<Record<string, string>> => { export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions): Promise<Record<string, string>> => {
const token = await resolve(options, config.TOKEN); const [token, username, password, additionalHeaders] = await Promise.all([
const username = await resolve(options, config.USERNAME); resolve(options, config.TOKEN),
const password = await resolve(options, config.PASSWORD); resolve(options, config.USERNAME),
const additionalHeaders = await resolve(options, config.HEADERS); resolve(options, config.PASSWORD),
const formHeaders = typeof formData?.getHeaders === 'function' && formData?.getHeaders() || {} resolve(options, config.HEADERS),
]);
const headers = Object.entries({ const headers = Object.entries({
Accept: 'application/json', Accept: 'application/json',
...additionalHeaders, ...additionalHeaders,
...options.headers, ...options.headers,
...formHeaders,
}) })
.filter(([_, value]) => isDefined(value)) .filter(([, value]) => value !== undefined && value !== null)
.reduce((headers, [key, value]) => ({ .reduce((headers, [key, value]) => ({
...headers, ...headers,
[key]: String(value), [key]: String(value),
@ -172,7 +143,7 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio
headers['Authorization'] = `Basic ${credentials}`; headers['Authorization'] = `Basic ${credentials}`;
} }
if (options.body) { if (options.body !== undefined) {
if (options.mediaType) { if (options.mediaType) {
headers['Content-Type'] = options.mediaType; headers['Content-Type'] = options.mediaType;
} else if (isBlob(options.body)) { } else if (isBlob(options.body)) {
@ -182,12 +153,16 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio
} else if (!isFormData(options.body)) { } else if (!isFormData(options.body)) {
headers['Content-Type'] = 'application/json'; headers['Content-Type'] = 'application/json';
} }
} else if (options.formData !== undefined) {
if (options.mediaType) {
headers['Content-Type'] = options.mediaType;
}
} }
return headers; return headers;
}; };
export const getRequestBody = (options: ApiRequestOptions): any => { export const getRequestBody = (options: ApiRequestOptions): unknown => {
if (options.body) { if (options.body) {
return options.body; return options.body;
} }
@ -198,24 +173,28 @@ export const sendRequest = async <T>(
config: OpenAPIConfig, config: OpenAPIConfig,
options: ApiRequestOptions, options: ApiRequestOptions,
url: string, url: string,
body: any, body: unknown,
formData: FormData | undefined, formData: FormData | undefined,
headers: Record<string, string>, headers: Record<string, string>,
onCancel: OnCancel, onCancel: OnCancel,
axiosClient: AxiosInstance axiosClient: AxiosInstance
): Promise<AxiosResponse<T>> => { ): Promise<AxiosResponse<T>> => {
const source = axios.CancelToken.source(); const controller = new AbortController();
const requestConfig: AxiosRequestConfig = { let requestConfig: AxiosRequestConfig = {
url,
headers,
data: body ?? formData, data: body ?? formData,
headers,
method: options.method, method: options.method,
signal: controller.signal,
url,
withCredentials: config.WITH_CREDENTIALS, withCredentials: config.WITH_CREDENTIALS,
cancelToken: source.token,
}; };
onCancel(() => source.cancel('The user aborted a request.')); onCancel(() => controller.abort());
for (const fn of config.interceptors.request._fns) {
requestConfig = await fn(requestConfig)
}
try { try {
return await axiosClient.request(requestConfig); return await axiosClient.request(requestConfig);
@ -228,7 +207,7 @@ export const sendRequest = async <T>(
} }
}; };
export const getResponseHeader = (response: AxiosResponse<any>, responseHeader?: string): string | undefined => { export const getResponseHeader = (response: AxiosResponse<unknown>, responseHeader?: string): string | undefined => {
if (responseHeader) { if (responseHeader) {
const content = response.headers[responseHeader]; const content = response.headers[responseHeader];
if (isString(content)) { if (isString(content)) {
@ -238,7 +217,7 @@ export const getResponseHeader = (response: AxiosResponse<any>, responseHeader?:
return undefined; return undefined;
}; };
export const getResponseBody = (response: AxiosResponse<any>): any => { export const getResponseBody = (response: AxiosResponse<unknown>): unknown => {
if (response.status !== 204) { if (response.status !== 204) {
return response.data; return response.data;
} }
@ -249,11 +228,44 @@ export const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult):
const errors: Record<number, string> = { const errors: Record<number, string> = {
400: 'Bad Request', 400: 'Bad Request',
401: 'Unauthorized', 401: 'Unauthorized',
402: 'Payment Required',
403: 'Forbidden', 403: 'Forbidden',
404: 'Not Found', 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', 500: 'Internal Server Error',
501: 'Not Implemented',
502: 'Bad Gateway', 502: 'Bad Gateway',
503: 'Service Unavailable', 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, ...options.errors,
} }
@ -293,10 +305,15 @@ export const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions, ax
const url = getUrl(config, options); const url = getUrl(config, options);
const formData = getFormData(options); const formData = getFormData(options);
const body = getRequestBody(options); const body = getRequestBody(options);
const headers = await getHeaders(config, options, formData); const headers = await getHeaders(config, options);
if (!onCancel.isCancelled) { if (!onCancel.isCancelled) {
const response = await sendRequest<T>(config, options, url, body, formData, headers, onCancel, axiosClient); let response = await sendRequest<T>(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 responseBody = getResponseBody(response);
const responseHeader = getResponseHeader(response, options.responseHeader); const responseHeader = getResponseHeader(response, options.responseHeader);

12
frontend/src/client/core/types.ts

@ -0,0 +1,12 @@
import type { ApiResult } from './ApiResult';
export type TResult = 'body' | 'raw';
export type TApiResponse<T extends TResult, TData> =
Exclude<T, 'raw'> extends never
? ApiResult<TData>
: ApiResult<TData>['body'];
export type TConfig<T extends TResult> = {
_result?: T;
};

48
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 { ApiError } from './core/ApiError';
export { CancelablePromise, CancelError } from './core/CancelablePromise'; export { CancelablePromise, CancelError } from './core/CancelablePromise';
export { OpenAPI } from './core/OpenAPI'; export { OpenAPI } from './core/OpenAPI';
export type { OpenAPIConfig } from './core/OpenAPI'; export type { OpenAPIConfig } from './core/OpenAPI';
export type { Body_login_login_access_token } from './models/Body_login_login_access_token'; export * from './models'
export type { HTTPValidationError } from './models/HTTPValidationError'; export * from './schemas'
export type { ItemCreate } from './models/ItemCreate'; export * from './services'
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';

132
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<ValidationError>;
};
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<ItemOut>;
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<UserOut>;
count: number;
};
export type ValidationError = {
loc: Array<string | number>;
msg: string;
type: string;
};

13
frontend/src/client/models/Body_login_login_access_token.ts

@ -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);
};

10
frontend/src/client/models/HTTPValidationError.ts

@ -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<ValidationError>;
};

9
frontend/src/client/models/ItemCreate.ts

@ -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);
};

11
frontend/src/client/models/ItemOut.ts

@ -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;
};

9
frontend/src/client/models/ItemUpdate.ts

@ -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);
};

11
frontend/src/client/models/ItemsOut.ts

@ -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<ItemOut>;
count: number;
};

8
frontend/src/client/models/Message.ts

@ -1,8 +0,0 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type Message = {
message: string;
};

9
frontend/src/client/models/NewPassword.ts

@ -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;
};

9
frontend/src/client/models/Token.ts

@ -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;
};

9
frontend/src/client/models/UpdatePassword.ts

@ -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;
};

12
frontend/src/client/models/UserCreate.ts

@ -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;
};

12
frontend/src/client/models/UserOut.ts

@ -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;
};

10
frontend/src/client/models/UserRegister.ts

@ -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);
};

12
frontend/src/client/models/UserUpdate.ts

@ -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);
};

9
frontend/src/client/models/UserUpdateMe.ts

@ -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);
};

11
frontend/src/client/models/UsersOut.ts

@ -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<UserOut>;
count: number;
};

10
frontend/src/client/models/ValidationError.ts

@ -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;
};

357
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;

44
frontend/src/client/schemas/$Body_login_login_access_token.ts

@ -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;

14
frontend/src/client/schemas/$HTTPValidationError.ts

@ -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;

20
frontend/src/client/schemas/$ItemCreate.ts

@ -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;

28
frontend/src/client/schemas/$ItemOut.ts

@ -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;

24
frontend/src/client/schemas/$ItemUpdate.ts

@ -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;

19
frontend/src/client/schemas/$ItemsOut.ts

@ -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;

12
frontend/src/client/schemas/$Message.ts

@ -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;

16
frontend/src/client/schemas/$NewPassword.ts

@ -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;

15
frontend/src/client/schemas/$Token.ts

@ -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;

16
frontend/src/client/schemas/$UpdatePassword.ts

@ -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;

30
frontend/src/client/schemas/$UserCreate.ts

@ -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;

30
frontend/src/client/schemas/$UserOut.ts

@ -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;

24
frontend/src/client/schemas/$UserRegister.ts

@ -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;

38
frontend/src/client/schemas/$UserUpdate.ts

@ -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;

24
frontend/src/client/schemas/$UserUpdateMe.ts

@ -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;

19
frontend/src/client/schemas/$UsersOut.ts

@ -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;

28
frontend/src/client/schemas/$ValidationError.ts

@ -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;

524
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<Token> {
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<UserOut> {
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<Message> {
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<Message> {
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<string> {
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<UsersOut> {
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<UserOut> {
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<UserOut> {
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<UserOut> {
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<Message> {
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<UserOut> {
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<UserOut> {
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<UserOut> {
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<Message> {
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<Message> {
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<ItemsOut> {
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<ItemOut> {
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<ItemOut> {
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<ItemOut> {
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<Message> {
const {
id,
} = data;
return __request(OpenAPI, {
method: 'DELETE',
url: '/api/v1/items/{id}',
path: {
id
},
errors: {
422: `Validation Error`,
},
});
}
}

138
frontend/src/client/services/ItemsService.ts

@ -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<ItemsOut> {
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<ItemOut> {
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<ItemOut> {
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<ItemOut> {
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<Message> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/api/v1/items/{id}',
path: {
'id': id,
},
errors: {
422: `Validation Error`,
},
});
}
}

120
frontend/src/client/services/LoginService.ts

@ -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<Token> {
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<UserOut> {
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<Message> {
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<Message> {
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<string> {
return __request(OpenAPI, {
method: 'POST',
url: '/api/v1/password-recovery-html-content/{email}',
path: {
'email': email,
},
errors: {
422: `Validation Error`,
},
});
}
}

220
frontend/src/client/services/UsersService.ts

@ -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<UsersOut> {
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<UserOut> {
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<UserOut> {
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<UserOut> {
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<Message> {
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<UserOut> {
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<UserOut> {
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<UserOut> {
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<Message> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/api/v1/users/{user_id}',
path: {
'user_id': userId,
},
errors: {
422: `Validation Error`,
},
});
}
}

36
frontend/src/client/services/UtilsService.ts

@ -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<Message> {
return __request(OpenAPI, {
method: 'POST',
url: '/api/v1/utils/test-email/',
query: {
'email_to': emailTo,
},
errors: {
422: `Validation Error`,
},
});
}
}

2
frontend/src/components/Admin/AddUser.tsx

@ -62,7 +62,7 @@ const AddUser = ({ isOpen, onClose }: AddUserProps) => {
onClose() onClose()
}, },
onError: (err: ApiError) => { onError: (err: ApiError) => {
const errDetail = err.body?.detail const errDetail = (err.body as any)?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
}, },
onSettled: () => { onSettled: () => {

2
frontend/src/components/Admin/EditUser.tsx

@ -61,7 +61,7 @@ const EditUser = ({ user, isOpen, onClose }: EditUserProps) => {
onClose() onClose()
}, },
onError: (err: ApiError) => { onError: (err: ApiError) => {
const errDetail = err.body?.detail const errDetail = (err.body as any)?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
}, },
onSettled: () => { onSettled: () => {

2
frontend/src/components/Items/AddItem.tsx

@ -49,7 +49,7 @@ const AddItem = ({ isOpen, onClose }: AddItemProps) => {
onClose() onClose()
}, },
onError: (err: ApiError) => { onError: (err: ApiError) => {
const errDetail = err.body?.detail const errDetail = (err.body as any)?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
}, },
onSettled: () => { onSettled: () => {

2
frontend/src/components/Items/EditItem.tsx

@ -52,7 +52,7 @@ const EditItem = ({ item, isOpen, onClose }: EditItemProps) => {
onClose() onClose()
}, },
onError: (err: ApiError) => { onError: (err: ApiError) => {
const errDetail = err.body?.detail const errDetail = (err.body as any)?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
}, },
onSettled: () => { onSettled: () => {

2
frontend/src/components/UserSettings/ChangePassword.tsx

@ -43,7 +43,7 @@ const ChangePassword = () => {
reset() reset()
}, },
onError: (err: ApiError) => { onError: (err: ApiError) => {
const errDetail = err.body?.detail const errDetail = (err.body as any)?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
}, },
}, },

2
frontend/src/components/UserSettings/DeleteConfirmation.tsx

@ -44,7 +44,7 @@ const DeleteConfirmation = ({ isOpen, onClose }: DeleteProps) => {
onClose() onClose()
}, },
onError: (err: ApiError) => { onError: (err: ApiError) => {
const errDetail = err.body?.detail const errDetail = (err.body as any)?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
}, },
onSettled: () => { onSettled: () => {

2
frontend/src/components/UserSettings/UserInformation.tsx

@ -57,7 +57,7 @@ const UserInformation = () => {
showToast("Success!", "User updated successfully.", "success") showToast("Success!", "User updated successfully.", "success")
}, },
onError: (err: ApiError) => { onError: (err: ApiError) => {
const errDetail = err.body?.detail const errDetail = (err.body as any)?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
}, },
onSettled: () => { onSettled: () => {

2
frontend/src/hooks/useAuth.ts

@ -37,7 +37,7 @@ const useAuth = () => {
navigate({ to: "/" }) navigate({ to: "/" })
}, },
onError: (err: ApiError) => { onError: (err: ApiError) => {
const errDetail = err.body.detail const errDetail = (err.body as any)?.detail
setError(errDetail) setError(errDetail)
}, },
}) })

4
frontend/src/routes/_layout/admin.tsx

@ -16,7 +16,7 @@ import {
import { createFileRoute } from "@tanstack/react-router" import { createFileRoute } from "@tanstack/react-router"
import { useQuery, useQueryClient } from "react-query" 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 ActionsMenu from "../../components/Common/ActionsMenu"
import Navbar from "../../components/Common/Navbar" import Navbar from "../../components/Common/Navbar"
import useCustomToast from "../../hooks/useCustomToast" import useCustomToast from "../../hooks/useCustomToast"
@ -37,7 +37,7 @@ function Admin() {
} = useQuery("users", () => UsersService.readUsers({})) } = useQuery("users", () => UsersService.readUsers({}))
if (isError) { if (isError) {
const errDetail = (error as ApiError).body?.detail const errDetail = (error as any).body?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
} }

4
frontend/src/routes/_layout/items.tsx

@ -14,7 +14,7 @@ import {
import { createFileRoute } from "@tanstack/react-router" import { createFileRoute } from "@tanstack/react-router"
import { useQuery } from "react-query" import { useQuery } from "react-query"
import { type ApiError, ItemsService } from "../../client" import { ItemsService } from "../../client"
import ActionsMenu from "../../components/Common/ActionsMenu" import ActionsMenu from "../../components/Common/ActionsMenu"
import Navbar from "../../components/Common/Navbar" import Navbar from "../../components/Common/Navbar"
import useCustomToast from "../../hooks/useCustomToast" import useCustomToast from "../../hooks/useCustomToast"
@ -33,7 +33,7 @@ function Items() {
} = useQuery("items", () => ItemsService.readItems({})) } = useQuery("items", () => ItemsService.readItems({}))
if (isError) { if (isError) {
const errDetail = (error as ApiError).body?.detail const errDetail = (error as any).body?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
} }

2
frontend/src/routes/login.tsx

@ -21,7 +21,7 @@ import {
import { type SubmitHandler, useForm } from "react-hook-form" import { type SubmitHandler, useForm } from "react-hook-form"
import Logo from "../assets/images/fastapi-logo.svg" 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 useAuth, { isLoggedIn } from "../hooks/useAuth"
import { emailPattern } from "../utils" import { emailPattern } from "../utils"

2
frontend/src/routes/reset-password.tsx

@ -64,7 +64,7 @@ function ResetPassword() {
navigate({ to: "/login" }) navigate({ to: "/login" })
}, },
onError: (err: ApiError) => { onError: (err: ApiError) => {
const errDetail = err.body?.detail const errDetail = (err.body as any)?.detail
showToast("Something went wrong.", `${errDetail}`, "error") showToast("Something went wrong.", `${errDetail}`, "error")
}, },
}) })

Loading…
Cancel
Save