diff --git a/.prettierrc.json b/.prettierrc.json index c4795ed..ed0acce 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,5 +1,5 @@ { "trailingComma": "es5", "tabWidth": 2, - "printWidth": 120 + "printWidth": 150 } diff --git a/README.md b/README.md index 88c3e4b..1e1f435 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,60 @@ # ff-admin-webapi-client -npm package as for managing ff-admin webapi connection \ No newline at end of file +FF Admin Webapi Client ist ein NPM-Package, welches die Verbindung zu einem FF Admin-Server vereinfacht. + +Zur Verfügung gestellt werden Requests mit den benötigten Models, Types und Enums für FF Admin. + +Der WebApiClient realisiert den automatischen refresh von Zugangs-Tokens. + +Beispiele:\ +1. Verwendung des Clients: +``` ts +import { WebApiClient, AdminRequests } from "@ff-admin/webapi-client" + +let myClient = new WebApiClient({ + serverAdress: "", + webapiToken: "" +}); + +let data = AdminRequests.MemberRequests.getAllMembers(myClient) + .then((res) => { + console.log(res) + }) + .catch((err) => { + console.log(err) + }) + +let newMemberId = AdminRequests.MemberRequests.updateMember(myClient, { + body: { + salutationId: 0, + firstname: "", + lastname: "", + nameaffix: "", + birthdate: new Date("") + } + }) + .then(() => {}) + .catch(() => {}); + +AdminRequests.MemberRequests.updateMember(myClient, { + params: { id: "123" }, + body: { + salutationId: 0, + firstname: "", + lastname: "", + nameaffix: "", + birthdate: new Date(""), + }, +}) + .then(() => {}) + .catch(() => {}); +``` + +2. Zugriff auf Typen, Models und Enums: +``` ts +import { AdminModels, AdminTypes, AdminEnums } from "@ff-admin/webapi-client" + +let model: AdminModels.MemberModels.CreateMemberViewModel; +let type: AdminTypes.DynamicQueries.DynamicQueryStructure +let enum = AdminEnums.NewsletterType.NewsletterConfigType.mail +``` \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6a07fe2..811025d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,47 @@ "version": "0.0.0", "license": "GPL-3.0-only", "dependencies": { - "axios": "^1.6.2" + "axios": "^1.6.2", + "typeorm": "^0.3.20" }, "devDependencies": { "@types/node": "^20.17.16", "typescript": "^5.7.3" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.17.16", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.16.tgz", @@ -26,6 +60,48 @@ "undici-types": "~6.19.2" } }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -43,6 +119,288 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cli-highlight/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -55,6 +413,43 @@ "node": ">= 0.8" } }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -64,6 +459,39 @@ "node": ">=0.4.0" } }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", @@ -84,6 +512,22 @@ } } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", @@ -98,6 +542,115 @@ "node": ">= 6" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -119,12 +672,451 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typeorm": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz", + "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==", + "license": "MIT", + "dependencies": { + "@sqltools/formatter": "^1.2.5", + "app-root-path": "^3.1.0", + "buffer": "^6.0.3", + "chalk": "^4.1.2", + "cli-highlight": "^2.1.11", + "dayjs": "^1.11.9", + "debug": "^4.3.4", + "dotenv": "^16.0.3", + "glob": "^10.3.10", + "mkdirp": "^2.1.3", + "reflect-metadata": "^0.2.1", + "sha.js": "^2.4.11", + "tslib": "^2.5.0", + "uuid": "^9.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">=16.13.0" + }, + "funding": { + "url": "https://opencollective.com/typeorm" + }, + "peerDependencies": { + "@google-cloud/spanner": "^5.18.0", + "@sap/hana-client": "^2.12.25", + "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0", + "hdb-pool": "^0.1.6", + "ioredis": "^5.0.4", + "mongodb": "^5.8.0", + "mssql": "^9.1.1 || ^10.0.1", + "mysql2": "^2.2.5 || ^3.0.1", + "oracledb": "^6.3.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1 || ^4.0.0", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.3", + "ts-node": "^10.7.0", + "typeorm-aurora-data-api-driver": "^2.0.0" + }, + "peerDependenciesMeta": { + "@google-cloud/spanner": { + "optional": true + }, + "@sap/hana-client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "hdb-pool": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "redis": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typeorm-aurora-data-api-driver": { + "optional": true + } + } + }, "node_modules/typescript": { "version": "5.7.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", @@ -145,6 +1137,199 @@ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT" + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } } } } diff --git a/package.json b/package.json index ceae2ce..89fd739 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ }, "homepage": "https://forgejo.jk-effects.cloud/Ehrenamt/ff-admin-webapi-client.git#readme", "dependencies": { - "axios": "^1.6.2" + "axios": "^1.6.2", + "typeorm": "^0.3.20" }, "devDependencies": { "@types/node": "^20.17.16", diff --git a/src/clients/clientBase.ts b/src/clients/clientBase.ts new file mode 100644 index 0000000..10f313a --- /dev/null +++ b/src/clients/clientBase.ts @@ -0,0 +1,20 @@ +import Config from "../config"; +import HTTP from "../http"; + +export class BaseClient extends Config { + protected httpInstance: HTTP; + constructor({ serverAdress, webapiToken }: { serverAdress: string; webapiToken: string }) { + super({ serverAdress, webapiToken }); + this.httpInstance = new HTTP(this); + } + + get http() { + return this.httpInstance.http; + } + + public refreshToken(): Promise { + return new Promise(async (resolve, reject) => { + reject("api token refresh not implemented"); + }); + } +} diff --git a/src/clients/webapi.client.ts b/src/clients/webapi.client.ts new file mode 100644 index 0000000..0bbcc8b --- /dev/null +++ b/src/clients/webapi.client.ts @@ -0,0 +1,33 @@ +import { BaseClient } from "./clientBase"; + +export class WebApiClient extends BaseClient { + constructor({ serverAdress, webapiToken }: { serverAdress: string; webapiToken: string }) { + super({ serverAdress, webapiToken }); + } + + get http() { + return this.httpInstance.http; + } + + public refreshToken(): Promise { + return new Promise(async (resolve, reject) => { + await this.http + .get(`/webapi/retrieve`, { + headers: { + Authorization: `Bearer ${this.webapiToken}`, + }, + }) + .then(async (response) => { + const { accessToken } = response.data; + + this.setAccessToken(accessToken); + + resolve(); + }) + .catch((error) => { + console.error("Error refreshing webapi token:", error); + reject("failed token retrieve"); + }); + }); + } +} diff --git a/src/config.ts b/src/config.ts index d3a8035..86a1aa1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -20,7 +20,7 @@ export default class Config { return this.access_token; } - public setAccessToken(token: string) { + protected setAccessToken(token: string) { this.access_token = token; } } diff --git a/src/enums/admin.ts b/src/enums/admin.ts new file mode 100644 index 0000000..126c82f --- /dev/null +++ b/src/enums/admin.ts @@ -0,0 +1 @@ +export * as NewsletterType from "./admin/newsletterType"; diff --git a/src/enums/newsletterConfigType.ts b/src/enums/admin/newsletterType.ts similarity index 100% rename from src/enums/newsletterConfigType.ts rename to src/enums/admin/newsletterType.ts diff --git a/src/http.ts b/src/http.ts index dfcf708..2ff9764 100644 --- a/src/http.ts +++ b/src/http.ts @@ -1,14 +1,14 @@ import axios, { AxiosInstance } from "axios"; -import { WebApiClient } from "."; +import { BaseClient } from "./clients/clientBase"; -export default class http { +export default class HTTP { public http: AxiosInstance; - private host: WebApiClient; + private client: BaseClient; - constructor(host: WebApiClient) { - this.host = host; + constructor(client: BaseClient) { + this.client = client; this.http = axios.create({ - baseURL: this.host.accessToken + "/api", + baseURL: this.client.serverAdress + "/api", headers: { "Cache-Control": "no-cache", Pragma: "no-cache", @@ -24,7 +24,7 @@ export default class http { this.http.interceptors.request.use( (config) => { if (config.headers && config.headers.Authorization == "") { - config.headers.Authorization = `Bearer ${this.host.accessToken}`; + config.headers.Authorization = `Bearer ${this.client.accessToken}`; } return config; @@ -50,7 +50,8 @@ export default class http { // Handle token expiration and retry the request with a refreshed token if (error.response && error.response.status === 401 && !originalRequest._retry) { originalRequest._retry = true; - return await this.refreshToken() + return await this.client + .refreshToken() .then(() => { return this.http(originalRequest); }) @@ -61,26 +62,4 @@ export default class http { } ); } - - private refreshToken(): Promise { - return new Promise(async (resolve, reject) => { - await this.http - .get(`/webapi/retrieve`, { - headers: { - Authorization: `Bearer ${this.host.webapiToken}`, - }, - }) - .then(async (response) => { - const { accessToken } = response.data; - - this.host.setAccessToken(accessToken); - - resolve(); - }) - .catch((error) => { - console.error("Error refreshing webapi token:", error); - reject("failed token retrieve"); - }); - }); - } } diff --git a/src/index.ts b/src/index.ts index 3ab58f3..312ca0d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,14 +1,6 @@ -import Config from "./config"; -import http from "./http"; +export { WebApiClient } from "./clients/webapi.client"; -export class WebApiClient extends Config { - private httpInstance: http; - constructor({ serverAdress, webapiToken }: { serverAdress: string; webapiToken: string }) { - super({ serverAdress, webapiToken }); - this.httpInstance = new http(this); - } - - get http() { - return this.httpInstance.http; - } -} +export * as AdminRequests from "./requests/admin"; +export * as AdminModels from "./viewmodels/admin"; +export * as AdminTypes from "./types/admin"; +export * as AdminEnums from "./enums/admin"; diff --git a/src/requests/admin.ts b/src/requests/admin.ts new file mode 100644 index 0000000..67080b3 --- /dev/null +++ b/src/requests/admin.ts @@ -0,0 +1,9 @@ +export { default as MemberRequests } from "./admin/memberRequests"; +export { default as MemberDataRequests } from "./admin/memberDataRequests"; +export { default as CalendarRequests } from "./admin/calendarRequests"; +export { default as NewsletterRequests } from "./admin/newsletterRequests"; +export { default as ProtocolRequests } from "./admin/protocolRequests"; +export { default as QueryRequests } from "./admin/queryRequests"; +export { default as TemplateRequests } from "./admin/templateRequests"; +export { default as UserRequests } from "./admin/userRequests"; +export { default as RoleRequests } from "./admin/roleRequests"; diff --git a/src/requests/admin/calendarRequests.ts b/src/requests/admin/calendarRequests.ts new file mode 100644 index 0000000..1eb26ce --- /dev/null +++ b/src/requests/admin/calendarRequests.ts @@ -0,0 +1,63 @@ +import { AxiosResponse } from "axios"; +import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; +import { + CalendarViewModel, + CreateCalendarViewModel, + UpdateCalendarViewModel, + CalendarTypeViewModel, + CreateCalendarTypeViewModel, + UpdateCalendarTypeViewModel, +} from "../../viewmodels/admin/calendar.models"; +import { BaseClient } from "../../clients/clientBase"; + +interface ICalendarRequests { + getCalendarEntries: RequestDefinition; + getCalendarEntryById: RequestDefinition<{ id: string }, void, CalendarViewModel>; + createCalendarEntry: RequestDefinition; + updateCalendarEntry: RequestDefinition<{ id: string }, UpdateCalendarViewModel, void>; + deleteCalendarEntry: RequestDefinition<{ id: string }, void, void>; + + getCalendarTypes: RequestDefinition; + getCalendarTypeById: RequestDefinition<{ id: number }, void, CalendarTypeViewModel>; + createCalendarType: RequestDefinition; + updateCalendarType: RequestDefinition<{ id: number }, UpdateCalendarTypeViewModel, void>; + deleteCalendarType: RequestDefinition<{ id: number }, void, void>; +} + +@ImplementsRequestInterface() +export default abstract class CalendarRequests { + static async getCalendarEntries({ http }: BaseClient): Promise> { + return await http.get("/admin/calendar"); + } + static async getCalendarEntryById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise> { + return await http.get(`/admin/calendar/${p.params.id}`); + } + static async createCalendarEntry({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/calendar", p.body); + } + static async updateCalendarEntry({ http }: BaseClient, p: RequestData<{ id: string }, UpdateCalendarViewModel>): Promise> { + return await http.post(`/admin/calendar/${p.params.id}`, p.body); + } + static async deleteCalendarEntry({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise> { + return await http.post(`/admin/calendar/${p.params.id}`); + } + + static async getCalendarTypes({ http }: BaseClient): Promise> { + return await http.get("/admin/calendartype"); + } + static async getCalendarTypeById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.get(`/admin/calendartype/${p.params.id}`); + } + static async createCalendarType({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/calendartype", p.body); + } + static async updateCalendarType( + { http }: BaseClient, + p: RequestData<{ id: number }, UpdateCalendarTypeViewModel> + ): Promise> { + return await http.post(`/admin/calendartype/${p.params.id}`, p.body); + } + static async deleteCalendarType({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/calendartype/${p.params.id}`); + } +} diff --git a/src/requests/admin/memberDataRequests.ts b/src/requests/admin/memberDataRequests.ts new file mode 100644 index 0000000..43bb6ef --- /dev/null +++ b/src/requests/admin/memberDataRequests.ts @@ -0,0 +1,190 @@ +import { AxiosResponse } from "axios"; +import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; +import { + AwardViewModel, + CreateAwardViewModel, + UpdateAwardViewModel, + CommunicationTypeViewModel, + CreateCommunicationTypeViewModel, + UpdateCommunicationTypeViewModel, + ExecutivePositionViewModel, + CreateExecutivePositionViewModel, + UpdateExecutivePositionViewModel, + MembershipStatusViewModel, + CreateMembershipStatusViewModel, + UpdateMembershipStatusViewModel, + QualificationViewModel, + CreateQualificationViewModel, + UpdateQualificationViewModel, + SalutationViewModel, + CreateSalutationViewModel, + UpdateSalutationViewModel, +} from "../../viewmodels/admin/memberData.models"; +import { BaseClient } from "../../clients/clientBase"; + +interface IMemberDataRequests { + getAwards: RequestDefinition; + getAwardById: RequestDefinition<{ id: number }, void, AwardViewModel>; + createAward: RequestDefinition; + updateAward: RequestDefinition<{ id: number }, UpdateAwardViewModel, void>; + deleteAward: RequestDefinition<{ id: number }, void, void>; + + getCommunicationTypes: RequestDefinition; + getCommunicationTypeById: RequestDefinition<{ id: number }, void, CommunicationTypeViewModel>; + createCommunicationType: RequestDefinition; + updateCommunicationType: RequestDefinition<{ id: number }, UpdateCommunicationTypeViewModel, void>; + deleteCommunicationType: RequestDefinition<{ id: number }, void, void>; + + getExecutivePositions: RequestDefinition; + getXxecutivePositionsById: RequestDefinition<{ id: number }, void, ExecutivePositionViewModel>; + createExecutivePositions: RequestDefinition; + updateExecutivePositions: RequestDefinition<{ id: number }, UpdateExecutivePositionViewModel, void>; + deleteExecutivePositions: RequestDefinition<{ id: number }, void, void>; + + getMembershipStatus: RequestDefinition; + getMembershipStatusById: RequestDefinition<{ id: number }, void, MembershipStatusViewModel>; + createMembershipStatus: RequestDefinition; + updateMembershipStatus: RequestDefinition<{ id: number }, UpdateMembershipStatusViewModel, void>; + deleteMembershipStatus: RequestDefinition<{ id: number }, void, void>; + + getQualifications: RequestDefinition; + getQualificationById: RequestDefinition<{ id: number }, void, QualificationViewModel>; + createQualification: RequestDefinition; + updateQualification: RequestDefinition<{ id: number }, UpdateQualificationViewModel, void>; + deleteQualification: RequestDefinition<{ id: number }, void, void>; + + getSalutations: RequestDefinition; + getSalutationById: RequestDefinition<{ id: number }, void, SalutationViewModel>; + createSalutation: RequestDefinition; + updateSalutation: RequestDefinition<{ id: number }, UpdateSalutationViewModel, void>; + deleteSalutation: RequestDefinition<{ id: number }, void, void>; +} + +@ImplementsRequestInterface() +export default abstract class MemberDataRequests { + static async getAwards({ http }: BaseClient): Promise> { + return await http.get("/admin/award"); + } + static async getAwardById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.get(`/admin/award/${p.params.id}`); + } + static async createAward({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/award", p.body); + } + static async updateAward({ http }: BaseClient, p: RequestData<{ id: number }, UpdateAwardViewModel>): Promise> { + return await http.post(`/admin/award/${p.params.id}`, p.body); + } + static async deleteAward({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/award/${p.params.id}`); + } + + static async getCommunicationTypes({ http }: BaseClient): Promise> { + return await http.get("/admin/communicationtype"); + } + static async getCommunicationTypeById( + { http }: BaseClient, + p: RequestData<{ id: number }, void> + ): Promise> { + return await http.get(`/admin/communicationtype/${p.params.id}`); + } + static async createCommunicationType( + { http }: BaseClient, + p: RequestData + ): Promise> { + return await http.post("/admin/communicationtype", p.body); + } + static async updateCommunicationType( + { http }: BaseClient, + p: RequestData<{ id: number }, UpdateCommunicationTypeViewModel> + ): Promise> { + return await http.post(`/admin/communicationtype/${p.params.id}`, p.body); + } + static async deleteCommunicationType({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/communicationtype/${p.params.id}`); + } + + static async getExecutivePositions({ http }: BaseClient): Promise> { + return await http.get("/admin/executiveposition"); + } + static async getXxecutivePositionsById( + { http }: BaseClient, + p: RequestData<{ id: number }, void> + ): Promise> { + return await http.get(`/admin/executiveposition/${p.params.id}`); + } + static async createExecutivePositions( + { http }: BaseClient, + p: RequestData + ): Promise> { + return await http.post("/admin/executiveposition", p.body); + } + static async updateExecutivePositions( + { http }: BaseClient, + p: RequestData<{ id: number }, UpdateExecutivePositionViewModel> + ): Promise> { + return await http.post(`/admin/executiveposition/${p.params.id}`, p.body); + } + static async deleteExecutivePositions({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/executiveposition/${p.params.id}`); + } + + static async getMembershipStatus({ http }: BaseClient): Promise> { + return await http.get("/admin/membershipstatus"); + } + static async getMembershipStatusById( + { http }: BaseClient, + p: RequestData<{ id: number }, void> + ): Promise> { + return await http.get(`/admin/membershipstatus/${p.params.id}`); + } + static async createMembershipStatus( + { http }: BaseClient, + p: RequestData + ): Promise> { + return await http.post("/admin/membershipstatus", p.body); + } + static async updateMembershipStatus( + { http }: BaseClient, + p: RequestData<{ id: number }, UpdateMembershipStatusViewModel> + ): Promise> { + return await http.post(`/admin/membershipstatus/${p.params.id}`, p.body); + } + static async deleteMembershipStatus({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/membershipstatus/${p.params.id}`); + } + + static async getQualifications({ http }: BaseClient): Promise> { + return await http.get("/admin/qualification"); + } + static async getQualificationById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.get(`/admin/qualification/${p.params.id}`); + } + static async createQualification({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/qualification", p.body); + } + static async updateQualification( + { http }: BaseClient, + p: RequestData<{ id: number }, UpdateQualificationViewModel> + ): Promise> { + return await http.post(`/admin/qualification/${p.params.id}`, p.body); + } + static async deleteQualification({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/qualification/${p.params.id}`); + } + + static async getSalutations({ http }: BaseClient): Promise> { + return await http.get("/admin/salutation"); + } + static async getSalutationById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.get(`/admin/salutation/${p.params.id}`); + } + static async createSalutation({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/salutation", p.body); + } + static async updateSalutation({ http }: BaseClient, p: RequestData<{ id: number }, UpdateSalutationViewModel>): Promise> { + return await http.post(`/admin/salutation/${p.params.id}`, p.body); + } + static async deleteSalutation({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/salutation/${p.params.id}`); + } +} diff --git a/src/requests/admin/memberRequests.ts b/src/requests/admin/memberRequests.ts new file mode 100644 index 0000000..35f4aae --- /dev/null +++ b/src/requests/admin/memberRequests.ts @@ -0,0 +1,243 @@ +import { AxiosResponse } from "axios"; +import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; +import { + MemberViewModel, + MemberStatisticsViewModel, + CreateMemberViewModel, + UpdateMemberViewModel, + MembershipViewModel, + MembershipStatisticsViewModel, + CreateMembershipViewModel, + UpdateMembershipViewModel, + MemberAwardViewModel, + MemberQualificationViewModel, + MemberExecutivePositionViewModel, + CommunicationViewModel, +} from "../../viewmodels/admin/member.models"; +import { BaseClient } from "../../clients/clientBase"; + +interface IMemberRequests { + getAllMembers: RequestDefinition; + getMemberById: RequestDefinition<{ id: string }, void, MemberViewModel>; + getMemberStatisticsById: RequestDefinition<{ id: string }, void, MemberStatisticsViewModel>; + createMember: RequestDefinition; + updateMember: RequestDefinition<{ id: string }, UpdateMemberViewModel, void>; + deleteMember: RequestDefinition<{ id: string }, void, void>; + + getMembershipsByMember: RequestDefinition<{ memberId: string }, void, MembershipViewModel[]>; + getMembershipStatisticsByMember: RequestDefinition<{ memberId: string }, void, MembershipStatisticsViewModel>; + getMembershipByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, MembershipViewModel>; + addMembershipByMember: RequestDefinition<{ memberId: string }, CreateMembershipViewModel, void>; + updateMembershipByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, UpdateMembershipViewModel, void>; + deleteMembershipByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, void>; + + getAwardsByMember: RequestDefinition<{ memberId: string }, void, MemberAwardViewModel[]>; + getAwardByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, MemberAwardViewModel>; + addAwardByMember: RequestDefinition<{ memberId: string }, CreateMembershipViewModel, void>; + updateAwardByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, UpdateMembershipViewModel, void>; + deleteAwardByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, void>; + + getQualificationsByMember: RequestDefinition<{ memberId: string }, void, MemberQualificationViewModel[]>; + getQualificationByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, MemberQualificationViewModel>; + addQualificationByMember: RequestDefinition<{ memberId: string }, CreateMembershipViewModel, void>; + updateQualificationByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, UpdateMembershipViewModel, void>; + deleteQualificationByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, void>; + + getPositionsByMember: RequestDefinition<{ memberId: string }, void, MemberExecutivePositionViewModel[]>; + getPositionByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, MemberExecutivePositionViewModel>; + addPositionByMember: RequestDefinition<{ memberId: string }, CreateMembershipViewModel, void>; + updatePositionByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, UpdateMembershipViewModel, void>; + deletePositionByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, void>; + + getCommunicationsByMember: RequestDefinition<{ memberId: string }, void, CommunicationViewModel[]>; + getCommunicationByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, CommunicationViewModel>; + addCommunicationsByMember: RequestDefinition<{ memberId: string }, CreateMembershipViewModel, void>; + updateCommunicationsByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, UpdateMembershipViewModel, void>; + deleteCommunicationsByMemberAndId: RequestDefinition<{ memberId: string; recordId: number }, void, void>; +} + +@ImplementsRequestInterface() +export default abstract class MemberRequests { + static async getAllMembers({ http }: BaseClient): Promise> { + return await http.get("/admin/member"); + } + static async getMemberById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise> { + return await http.get(`/admin/member/${p.params.id}`); + } + static async getMemberStatisticsById( + { http }: BaseClient, + p: RequestData<{ id: string }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.id}/statistics`); + } + static async createMember({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/member", p.body); + } + static async updateMember({ http }: BaseClient, p: RequestData<{ id: string }, UpdateMemberViewModel>): Promise> { + return await http.post(`/admin/member/${p.params.id}`, p.body); + } + static async deleteMember({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise> { + return await http.post(`/admin/member/${p.params.id}`); + } + + static async getMembershipsByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/memberships`); + } + static async getMembershipStatisticsByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/memberships/statistics`); + } + static async getMembershipByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/membership/${p.params.recordId}`); + } + static async addMembershipByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, CreateMembershipViewModel> + ): Promise> { + return await http.post(`/admin/member/${p.params.memberId}/membership`, p.body); + } + static async updateMembershipByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, UpdateMembershipViewModel> + ): Promise> { + return await http.put(`/admin/member/${p.params.memberId}/memberships/${p.params.recordId}`, p.body); + } + static async deleteMembershipByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.delete(`/admin/member/${p.params.memberId}/memberships/${p.params.recordId}`); + } + + static async getAwardsByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/awards`); + } + static async getAwardByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/award/${p.params.recordId}`); + } + static async addAwardByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, CreateMembershipViewModel> + ): Promise> { + return await http.post(`/admin/member/${p.params.memberId}/award`, p.body); + } + static async updateAwardByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, UpdateMembershipViewModel> + ): Promise> { + return await http.put(`/admin/member/${p.params.memberId}/award/${p.params.recordId}`, p.body); + } + static async deleteAwardByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.delete(`/admin/member/${p.params.memberId}/award/${p.params.recordId}`); + } + + static async getQualificationsByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/qualifications`); + } + static async getQualificationByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/qualification/${p.params.recordId}`); + } + static async addQualificationByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, CreateMembershipViewModel> + ): Promise> { + return await http.post(`/admin/member/${p.params.memberId}/qualification`, p.body); + } + static async updateQualificationByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, UpdateMembershipViewModel> + ): Promise> { + return await http.put(`/admin/member/${p.params.memberId}/qualification/${p.params.recordId}`, p.body); + } + static async deleteQualificationByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.delete(`/admin/member/${p.params.memberId}/qualification/${p.params.recordId}`); + } + + static async getPositionsByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/positions`); + } + static async getPositionByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/position/${p.params.recordId}`); + } + static async addPositionByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, CreateMembershipViewModel> + ): Promise> { + return await http.post(`/admin/member/${p.params.memberId}/position`, p.body); + } + static async updatePositionByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, UpdateMembershipViewModel> + ): Promise> { + return await http.put(`/admin/member/${p.params.memberId}/position/${p.params.recordId}`, p.body); + } + static async deletePositionByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.delete(`/admin/member/${p.params.memberId}/position/${p.params.recordId}`); + } + + static async getCommunicationsByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/communications`); + } + static async getCommunicationByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.get(`/admin/member/${p.params.memberId}/communication/${p.params.recordId}`); + } + static async addCommunicationsByMember( + { http }: BaseClient, + p: RequestData<{ memberId: string }, CreateMembershipViewModel> + ): Promise> { + return await http.post(`/admin/member/${p.params.memberId}/communication`, p.body); + } + static async updateCommunicationsByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, UpdateMembershipViewModel> + ): Promise> { + return await http.put(`/admin/member/${p.params.memberId}/communication/${p.params.recordId}`, p.body); + } + static async deleteCommunicationsByMemberAndId( + { http }: BaseClient, + p: RequestData<{ memberId: string; recordId: number }, void> + ): Promise> { + return await http.delete(`/admin/member/${p.params.memberId}/communication/${p.params.recordId}`); + } +} diff --git a/src/requests/admin/newsletterRequests.ts b/src/requests/admin/newsletterRequests.ts new file mode 100644 index 0000000..aa8cc73 --- /dev/null +++ b/src/requests/admin/newsletterRequests.ts @@ -0,0 +1,109 @@ +import { AxiosResponse } from "axios"; +import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; +import { + NewsletterViewModel, + CreateNewsletterViewModel, + SyncNewsletterViewModel, + NewsletterConfigViewModel, + NewsletterDatesViewModel, + NewsletterRecipientsViewModel, + SetNewsletterConfigViewModel, + SyncNewsletterDatesViewModel, + SyncNewsletterRecipientsViewModel, +} from "../../viewmodels/admin/newsletter.models"; +import { BaseClient } from "../../clients/clientBase"; + +interface INewsletterRequests { + getNewsletters: RequestDefinition; + getNewsletterById: RequestDefinition<{ id: number }, void, NewsletterViewModel>; + getNewsletterDatesByNewsletter: RequestDefinition<{ newsletterId: number }, void, NewsletterDatesViewModel>; + getNewsletterRecipientsByNewsletter: RequestDefinition<{ newsletterId: number }, void, NewsletterRecipientsViewModel>; + getNewsletterPrintoutsByNewsletter: RequestDefinition<{ newsletterId: number }, void, Array>; + getNewsletterPrintoutsByNewsletterAndId: RequestDefinition<{ newsletterId: number; filename: number }, void, File>; + createNewsletter: RequestDefinition; + syncNewsletter: RequestDefinition<{ id: number }, SyncNewsletterViewModel, void>; + syncNewsletterDatesByNewsletter: RequestDefinition<{ newsletterId: number }, SyncNewsletterDatesViewModel, void>; + syncNewsletterRecipientsByNewsletter: RequestDefinition<{ newsletterId: number }, SyncNewsletterRecipientsViewModel, void>; + + getNewsletterConfigs: RequestDefinition; + getNewsletterConfigById: RequestDefinition<{ communicationTypeId: number }, void, NewsletterConfigViewModel>; + updateNewsletterConfig: RequestDefinition; + resetNewsletterConfig: RequestDefinition<{ communicationTypeId: number }, void, NewsletterViewModel>; +} + +@ImplementsRequestInterface() +export default abstract class NewsletterRequests { + static async getNewsletters({ http }: BaseClient): Promise> { + return await http.get("/admin/newsletter"); + } + static async getNewsletterById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.get(`/admin/newsletter/${p.params.id}`); + } + static async getNewsletterDatesByNewsletter( + { http }: BaseClient, + p: RequestData<{ newsletterId: number }, void> + ): Promise> { + return await http.get(`/admin/newsletter/${p.params.newsletterId}/dates`); + } + static async getNewsletterRecipientsByNewsletter( + { http }: BaseClient, + p: RequestData<{ newsletterId: number }, void> + ): Promise> { + return await http.get(`/admin/newsletter/${p.params.newsletterId}/recipients`); + } + static async getNewsletterPrintoutsByNewsletter( + { http }: BaseClient, + p: RequestData<{ newsletterId: number }, void> + ): Promise, any>> { + return await http.get(`/admin/newsletter/${p.params.newsletterId}/printouts`); + } + static async getNewsletterPrintoutsByNewsletterAndId( + { http }: BaseClient, + p: RequestData<{ newsletterId: number; filename: number }, void> + ): Promise> { + return await http.get(`/admin/newsletter/${p.params.newsletterId}/printouts/${p.params.filename}`); + } + static async createNewsletter({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/newsletter", p.body); + } + static async updateNewsletter({ http }: BaseClient, p: RequestData<{ id: number }, SyncNewsletterViewModel>): Promise> { + return await http.post(`/admin/newsletter/${p.params.id}`, p.body); + } + static async syncNewsletter({ http }: BaseClient, p: RequestData<{ id: number }, SyncNewsletterViewModel>): Promise> { + return await http.post(`/admin/newsletter/${p.params.id}/synchronize`, p.body); + } + static async syncNewsletterDatesByNewsletter( + { http }: BaseClient, + p: RequestData<{ newsletterId: number }, SyncNewsletterDatesViewModel> + ): Promise> { + return await http.post(`/admin/newsletter/${p.params.newsletterId}/synchronize/dates`, p.body); + } + static async syncNewsletterRecipientsByNewsletter( + { http }: BaseClient, + p: RequestData<{ newsletterId: number }, SyncNewsletterRecipientsViewModel> + ): Promise> { + return await http.post(`/admin/newsletter/${p.params.newsletterId}/synchronize/recipients`, p.body); + } + + static async getNewsletterConfigs({ http }: BaseClient): Promise> { + return await http.get("/admin/newsletterconfig"); + } + static async getNewsletterConfigById( + { http }: BaseClient, + p: RequestData<{ communicationTypeId: number }, void> + ): Promise> { + return await http.get(`/admin/newsletterconfig/${p.params.communicationTypeId}`); + } + static async updateNewsletterConfig( + { http }: BaseClient, + p: RequestData + ): Promise> { + return await http.put("/admin/newsletterconfig", p.body); + } + static async resetNewsletterConfig( + { http }: BaseClient, + p: RequestData<{ communicationTypeId: number }, void> + ): Promise> { + return await http.delete(`/admin/newsletterconfig/${p.params.communicationTypeId}`); + } +} diff --git a/src/requests/admin/protocolRequests.ts b/src/requests/admin/protocolRequests.ts new file mode 100644 index 0000000..d4486f4 --- /dev/null +++ b/src/requests/admin/protocolRequests.ts @@ -0,0 +1,114 @@ +import { AxiosResponse } from "axios"; +import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; +import { + ProtocolViewModel, + CreateProtocolViewModel, + SyncProtocolViewModel, + ProtocolAgendaViewModel, + ProtocolDecisionViewModel, + ProtocolPresenceViewModel, + ProtocolVotingViewModel, + SyncProtocolAgendaViewModel, + SyncProtocolDecisionViewModel, + SyncProtocolPresenceViewModel, + SyncProtocolVotingViewModel, +} from "../../viewmodels/admin/protocol.models"; +import { BaseClient } from "../../clients/clientBase"; + +interface IProtocolRequests { + getProtocols: RequestDefinition; + getProtocolById: RequestDefinition<{ id: number }, void, ProtocolViewModel>; + getProtocolAgendaByProtocol: RequestDefinition<{ protocolId: number }, void, ProtocolAgendaViewModel>; + getProtocolDecisionsByProtocol: RequestDefinition<{ protocolId: number }, void, ProtocolDecisionViewModel>; + getProtocolPresenceByProtocol: RequestDefinition<{ protocolId: number }, void, ProtocolPresenceViewModel>; + getProtocolVotingsByProtocol: RequestDefinition<{ protocolId: number }, void, ProtocolVotingViewModel>; + createProtocol: RequestDefinition; + createProtocolAgenda: RequestDefinition<{ protocolId: number }, void, number>; + createProtocolDescision: RequestDefinition<{ protocolId: number }, void, number>; + createProtocolPresence: RequestDefinition<{ protocolId: number }, void, number>; + createProtocolVoting: RequestDefinition<{ protocolId: number }, void, number>; + syncProtocol: RequestDefinition<{ id: number }, SyncProtocolViewModel, void>; + syncProtocolAgendaByProtocol: RequestDefinition<{ protocolId: number }, SyncProtocolAgendaViewModel, void>; + syncProtocolDecisionsByProtocol: RequestDefinition<{ protocolId: number }, SyncProtocolDecisionViewModel, void>; + syncProtocolPresenceByProtocol: RequestDefinition<{ protocolId: number }, SyncProtocolPresenceViewModel, void>; + syncProtocolVotingsByProtocol: RequestDefinition<{ protocolId: number }, SyncProtocolVotingViewModel, void>; +} + +@ImplementsRequestInterface() +export default abstract class ProtocolRequests { + static async getProtocols({ http }: BaseClient): Promise> { + return await http.get("/admin/protocol"); + } + static async getProtocolById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.get(`/admin/protocol/${p.params.id}`); + } + static async getProtocolAgendaByProtocol( + { http }: BaseClient, + p: RequestData<{ protocolId: number }, void> + ): Promise> { + return await http.get(`/admin/protocol/${p.params.protocolId}/agenda`); + } + static async getProtocolDecisionsByProtocol( + { http }: BaseClient, + p: RequestData<{ protocolId: number }, void> + ): Promise> { + return await http.get(`/admin/protocol/${p.params.protocolId}/decisions`); + } + static async getProtocolPresenceByProtocol( + { http }: BaseClient, + p: RequestData<{ protocolId: number }, void> + ): Promise> { + return await http.get(`/admin/protocol/${p.params.protocolId}/presence`); + } + static async getProtocolVotingsByProtocol( + { http }: BaseClient, + p: RequestData<{ protocolId: number }, void> + ): Promise> { + return await http.get(`/admin/protocol/${p.params.protocolId}/votings`); + } + static async createProtocol({ http }: BaseClient, p: RequestData): Promise> { + return await http.post(`/admin/protocol`, p.body); + } + static async createProtocolAgenda({ http }: BaseClient, p: RequestData<{ protocolId: number }, void>): Promise> { + return await http.post(`/admin/protocol/${p.params.protocolId}/agenda`); + } + static async createProtocolDescision({ http }: BaseClient, p: RequestData<{ protocolId: number }, void>): Promise> { + return await http.post(`/admin/protocol/${p.params.protocolId}/decision`); + } + static async createProtocolPresence({ http }: BaseClient, p: RequestData<{ protocolId: number }, void>): Promise> { + return await http.post(`/admin/protocol/${p.params.protocolId}/presence`); + } + static async createProtocolVoting({ http }: BaseClient, p: RequestData<{ protocolId: number }, void>): Promise> { + return await http.post(`/admin/protocol/${p.params.protocolId}/voting`); + } + static async updateProtocol({ http }: BaseClient, p: RequestData<{ id: number }, SyncProtocolViewModel>): Promise> { + return await http.post(`/admin/protocol/${p.params.id}`, p.body); + } + static async syncProtocol({ http }: BaseClient, p: RequestData<{ id: number }, SyncProtocolViewModel>): Promise> { + return await http.post(`/admin/protocol/${p.params.id}/synchronize`, p.body); + } + static async syncProtocolAgendaByProtocol( + { http }: BaseClient, + p: RequestData<{ protocolId: number }, SyncProtocolAgendaViewModel> + ): Promise> { + return await http.post(`/admin/protocol/${p.params.protocolId}/synchronize/agenda`, p.body); + } + static async syncProtocolDecisionsByProtocol( + { http }: BaseClient, + p: RequestData<{ protocolId: number }, SyncProtocolDecisionViewModel> + ): Promise> { + return await http.post(`/admin/protocol/${p.params.protocolId}/synchronize/decisions`, p.body); + } + static async syncProtocolPresenceByProtocol( + { http }: BaseClient, + p: RequestData<{ protocolId: number }, SyncProtocolPresenceViewModel> + ): Promise> { + return await http.post(`/admin/protocol/${p.params.protocolId}/synchronize/presence`, p.body); + } + static async syncProtocolVotingsByProtocol( + { http }: BaseClient, + p: RequestData<{ protocolId: number }, SyncProtocolVotingViewModel> + ): Promise> { + return await http.post(`/admin/protocol/${p.params.protocolId}/synchronize/votings`, p.body); + } +} diff --git a/src/requests/admin/queryRequests.ts b/src/requests/admin/queryRequests.ts new file mode 100644 index 0000000..aedc357 --- /dev/null +++ b/src/requests/admin/queryRequests.ts @@ -0,0 +1,41 @@ +import { AxiosResponse } from "axios"; +import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; +import { CreateQueryViewModel, QueryExecuteResult, QueryViewModel, UpdateQueryViewModel } from "../../viewmodels/admin/query.models"; +import { DynamicQueryStructure } from "../../types/admin/dynamicQueries"; +import { BaseClient } from "../../clients/clientBase"; + +interface IQueryRequests { + getQueries: RequestDefinition; + getQueryById: RequestDefinition<{ id: number }, void, QueryViewModel>; + createQuery: RequestDefinition; + updateQuery: RequestDefinition<{ id: number }, UpdateQueryViewModel, void>; + deleteQuery: RequestDefinition<{ id: number }, void, void>; + + executeQuery: RequestDefinition; +} + +@ImplementsRequestInterface() +export default abstract class QueryDataRequests { + static async getQueries({ http }: BaseClient): Promise> { + return await http.get("/admin/award"); + } + static async getQueryById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.get(`/admin/award/${p.params.id}`); + } + static async createQuery({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/award", p.body); + } + static async updateQuery({ http }: BaseClient, p: RequestData<{ id: number }, UpdateQueryViewModel>): Promise> { + return await http.post(`/admin/award/${p.params.id}`, p.body); + } + static async deleteQuery({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/award/${p.params.id}`); + } + + static async executeQuery( + { http }: BaseClient, + p: RequestData + ): Promise> { + return await http.post(`/admin/query`, p.body); + } +} diff --git a/src/requests/admin/roleRequests.ts b/src/requests/admin/roleRequests.ts new file mode 100644 index 0000000..851c37e --- /dev/null +++ b/src/requests/admin/roleRequests.ts @@ -0,0 +1,39 @@ +import { AxiosResponse } from "axios"; +import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; +import { PermissionObject, PermissionString } from "../../types/admin/permissionTypes"; +import { RoleViewModel, UpdateRolePermissionViewModel, UpdateRoleViewModel } from "../../viewmodels/admin/role.models"; +import { BaseClient } from "../../clients/clientBase"; + +interface IRoleRequests { + getRoles: RequestDefinition; + getRoleById: RequestDefinition<{ id: number }, void, RoleViewModel>; + getRolePermissionsById: RequestDefinition<{ roleId: number }, void, PermissionObject>; + updateRole: RequestDefinition<{ id: number }, UpdateRoleViewModel, void>; + updateRolePermissions: RequestDefinition<{ roleId: number }, UpdateRolePermissionViewModel, void>; + deleteRole: RequestDefinition<{ id: number }, void, void>; +} + +@ImplementsRequestInterface() +export default abstract class RoleRequests { + static async getRoles({ http }: BaseClient): Promise> { + return await http.get("/admin/role"); + } + static async getRoleById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.get(`/admin/role/${p.params.id}`); + } + static async getRolePermissionsById({ http }: BaseClient, p: RequestData<{ roleId: number }, void>): Promise> { + return await http.get(`/admin/role/${p.params.roleId}/permissions`); + } + static async updateRole({ http }: BaseClient, p: RequestData<{ id: number }, UpdateRoleViewModel>): Promise> { + return await http.post(`/admin/role/${p.params.id}`, p.body); + } + static async updateRolePermissions( + { http }: BaseClient, + p: RequestData<{ roleId: number }, UpdateRolePermissionViewModel> + ): Promise> { + return await http.post(`/admin/role/${p.params.roleId}/permissions`, p.body); + } + static async deleteRole({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/role/${p.params.id}`); + } +} diff --git a/src/requests/admin/templateRequests.ts b/src/requests/admin/templateRequests.ts new file mode 100644 index 0000000..8634901 --- /dev/null +++ b/src/requests/admin/templateRequests.ts @@ -0,0 +1,50 @@ +import { AxiosResponse } from "axios"; +import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; +import { CloneTemplateViewModel, CreateTemplateViewModel, TemplateViewModel, UpdateTemplateViewModel } from "../../viewmodels/admin/template.models"; +import { TemplateUsageViewModel, UpdateTemplateUsageViewModel } from "../../viewmodels/admin/template.models"; +import { BaseClient } from "../../clients/clientBase"; +import { PermissionModule } from "../../types/admin/permissionTypes"; + +interface ITemplateRequests { + getTemplates: RequestDefinition; + getTemplateById: RequestDefinition<{ id: number }, void, TemplateViewModel>; + createTemplate: RequestDefinition; + cloneTemplate: RequestDefinition; + updateTemplate: RequestDefinition<{ id: number }, UpdateTemplateViewModel, void>; + deleteTemplate: RequestDefinition<{ id: number }, void, void>; + + getTemplateUsages: RequestDefinition; + updateTemplateUsage: RequestDefinition<{ scope: `${PermissionModule}` | `${PermissionModule}.${string}` }, UpdateTemplateUsageViewModel, void>; +} + +@ImplementsRequestInterface() +export default abstract class TemplateRequests { + static async getTemplates({ http }: BaseClient): Promise> { + return await http.get("/admin/template"); + } + static async getTemplateById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.get(`/admin/template/${p.params.id}`); + } + static async createTemplate({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/template", p.body); + } + static async cloneTemplate({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/template/clone", p.body); + } + static async updateTemplate({ http }: BaseClient, p: RequestData<{ id: number }, UpdateTemplateViewModel>): Promise> { + return await http.post(`/admin/template/${p.params.id}`, p.body); + } + static async deleteTemplate({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise> { + return await http.post(`/admin/template/${p.params.id}`); + } + + static async getTemplateUsages({ http }: BaseClient): Promise> { + return await http.get("/admin/templateusage"); + } + static async updateTemplateUsage( + { http }: BaseClient, + p: RequestData<{ scope: `${PermissionModule}` | `${PermissionModule}.${string}` }, UpdateTemplateUsageViewModel> + ): Promise> { + return await http.post(`/admin/templateusage/${p.params.scope}`, p.body); + } +} diff --git a/src/requests/admin/userRequests.ts b/src/requests/admin/userRequests.ts new file mode 100644 index 0000000..8e79a37 --- /dev/null +++ b/src/requests/admin/userRequests.ts @@ -0,0 +1,72 @@ +import { AxiosResponse } from "axios"; +import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; +import { + UpdateUserViewModel, + UserViewModel, + CreateInviteViewModel, + InviteViewModel, + UpdateUserPermissionViewModel, + UpdateUserRolesViewModel, +} from "../../viewmodels/admin/user.models"; +import { PermissionObject, PermissionString } from "../../types/admin/permissionTypes"; +import { RoleViewModel } from "../../viewmodels/admin/role.models"; +import { BaseClient } from "../../clients/clientBase"; + +interface IUserRequests { + getUsers: RequestDefinition; + getUserById: RequestDefinition<{ id: string }, void, UserViewModel>; + getUserPermissionsById: RequestDefinition<{ userId: string }, void, PermissionObject>; + getUserRolesById: RequestDefinition<{ userId: string }, void, RoleViewModel[]>; + updateUser: RequestDefinition<{ id: string }, UpdateUserViewModel, void>; + updateUserPermissions: RequestDefinition<{ userId: string }, UpdateUserPermissionViewModel, void>; + updateUserRoles: RequestDefinition<{ userId: string }, UpdateUserRolesViewModel, void>; + deleteUser: RequestDefinition<{ id: string }, void, void>; + + getInvites: RequestDefinition; + createInvite: RequestDefinition; + deleteInvite: RequestDefinition<{ mail: string }, void, void>; +} + +@ImplementsRequestInterface() +export default abstract class UserRequests { + static async getUsers({ http }: BaseClient): Promise> { + return await http.get("/admin/user"); + } + static async getUserById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise> { + return await http.get(`/admin/user/${p.params.id}`); + } + static async getUserPermissionsById({ http }: BaseClient, p: RequestData<{ userId: string }, void>): Promise> { + return await http.get(`/admin/user/${p.params.userId}/permissions`); + } + static async getUserRolesById({ http }: BaseClient, p: RequestData<{ userId: string }, void>): Promise> { + return await http.get(`/admin/user/${p.params.userId}/roles`); + } + static async updateUser({ http }: BaseClient, p: RequestData<{ id: string }, UpdateUserViewModel>): Promise> { + return await http.post(`/admin/user/${p.params.id}`, p.body); + } + static async updateUserPermissions( + { http }: BaseClient, + p: RequestData<{ userId: string }, UpdateUserPermissionViewModel> + ): Promise> { + return await http.post(`/admin/user/${p.params.userId}/permissions`, p.body); + } + static async updateUserRoles( + { http }: BaseClient, + p: RequestData<{ userId: string }, UpdateUserRolesViewModel> + ): Promise> { + return await http.post(`/admin/user/${p.params.userId}/roles`, p.body); + } + static async deleteUser({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise> { + return await http.post(`/admin/user/${p.params.id}`); + } + + static async getInvites({ http }: BaseClient): Promise> { + return await http.get("/admin/invite"); + } + static async createInvite({ http }: BaseClient, p: RequestData): Promise> { + return await http.post("/admin/invite", p.body); + } + static async deleteInvite({ http }: BaseClient, p: RequestData<{ mail: string }, void>): Promise> { + return await http.delete(`/admin/invite/${p.params.mail}`); + } +} diff --git a/src/requeststore/requeststore.ts b/src/requests/requestBase.ts similarity index 68% rename from src/requeststore/requeststore.ts rename to src/requests/requestBase.ts index e0429ce..9674e55 100644 --- a/src/requeststore/requeststore.ts +++ b/src/requests/requestBase.ts @@ -1,4 +1,5 @@ import { AxiosInstance, AxiosResponse } from "axios"; +import { BaseClient } from "../clients/clientBase"; export type RequestData = PARAMS extends void ? BODY extends void @@ -9,6 +10,12 @@ export type RequestData = PARAMS extends void : { params: PARAMS; body: BODY }; export type RequestDefinition = ( - http: AxiosInstance, + http: BaseClient, params: RequestData ) => Promise>; + +export function ImplementsRequestInterface() { + return (constructor: U) => { + constructor; + }; +} diff --git a/src/requeststore/admin/club/memberRequests.ts b/src/requeststore/admin/club/memberRequests.ts deleted file mode 100644 index 970cee7..0000000 --- a/src/requeststore/admin/club/memberRequests.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { AxiosInstance, AxiosResponse } from "axios"; -import { - MemberViewModel, - CreateMemberViewModel, - UpdateMemberViewModel, -} from "../../../viewmodels/admin/club/member/member.models"; -import { RequestDefinition, RequestData } from "../../requeststore"; - -abstract class IMemberRequests { - static getAllMembers: RequestDefinition; - static getMemberById: RequestDefinition<{ id: number }, void, MemberViewModel>; - static createMember: RequestDefinition; - static updateMember: RequestDefinition<{ id: number }, UpdateMemberViewModel, void>; - static deleteMember: RequestDefinition<{ id: number }, void, void>; -} - -export default abstract class MemberRequests extends IMemberRequests { - static async getAllMembers(http: AxiosInstance): Promise> { - return await http.get("/admin/member"); - } - static async getMemberById(http: AxiosInstance, p: RequestData<{ id: number }, void>) { - return await http.get(`/admin/member/${p.params.id}`); - } - static async createMember(http: AxiosInstance, p: RequestData) { - return await http.post("/admin/member", p.body); - } - static async updateMember(http: AxiosInstance, p: RequestData<{ id: number }, UpdateMemberViewModel>) { - return await http.post(`/admin/member/${p.params.id}`, p.body); - } - static async deleteMember(http: AxiosInstance, p: RequestData<{ id: number }, void>) { - return await http.post(`/admin/member/${p.params.id}`); - } -} diff --git a/src/types/admin.ts b/src/types/admin.ts new file mode 100644 index 0000000..19ea15d --- /dev/null +++ b/src/types/admin.ts @@ -0,0 +1,4 @@ +export * as TableMeta from "./admin/tableMeta"; +export * as DynamicQueries from "./admin/dynamicQueries"; +export * as FieldTypes from "./admin/fieldTypes"; +export * as PermissionTypes from "./admin/permissionTypes"; diff --git a/src/types/dynamicQueries.ts b/src/types/admin/dynamicQueries.ts similarity index 100% rename from src/types/dynamicQueries.ts rename to src/types/admin/dynamicQueries.ts diff --git a/src/types/fieldTypes.ts b/src/types/admin/fieldTypes.ts similarity index 100% rename from src/types/fieldTypes.ts rename to src/types/admin/fieldTypes.ts diff --git a/src/types/permissionTypes.ts b/src/types/admin/permissionTypes.ts similarity index 100% rename from src/types/permissionTypes.ts rename to src/types/admin/permissionTypes.ts diff --git a/src/types/tableMeta.ts b/src/types/admin/tableMeta.ts similarity index 100% rename from src/types/tableMeta.ts rename to src/types/admin/tableMeta.ts diff --git a/src/viewmodels/admin.ts b/src/viewmodels/admin.ts new file mode 100644 index 0000000..a19b661 --- /dev/null +++ b/src/viewmodels/admin.ts @@ -0,0 +1,9 @@ +export * as MemberModels from "./admin/member.models"; +export * as MemberDataModels from "./admin/memberData.models"; +export * as CalendarModels from "./admin/calendar.models"; +export * as NewsletterModels from "./admin/newsletter.models"; +export * as ProtocolModels from "./admin/protocol.models"; +export * as QueryModels from "./admin/query.models"; +export * as TemplateModels from "./admin/template.models"; +export * as UserModels from "./admin/user.models"; +export * as RoleModels from "./admin/role.models"; diff --git a/src/viewmodels/admin/club/calendar.models.ts b/src/viewmodels/admin/calendar.models.ts similarity index 59% rename from src/viewmodels/admin/club/calendar.models.ts rename to src/viewmodels/admin/calendar.models.ts index ee663c1..b109401 100644 --- a/src/viewmodels/admin/club/calendar.models.ts +++ b/src/viewmodels/admin/calendar.models.ts @@ -1,5 +1,4 @@ -import type { CalendarTypeViewModel } from "../settings/calendarType.models"; - +/** Calendar Models */ export interface CalendarViewModel { id: string; starttime: string; @@ -12,7 +11,6 @@ export interface CalendarViewModel { updatedAt: Date; type: CalendarTypeViewModel; } - export interface CreateCalendarViewModel { starttime: string; endtime: string; @@ -22,9 +20,7 @@ export interface CreateCalendarViewModel { allDay: boolean; typeId: string; } - export interface UpdateCalendarViewModel { - id: string; starttime: string; endtime: string; title: string; @@ -33,3 +29,24 @@ export interface UpdateCalendarViewModel { allDay: boolean; typeId: string; } + +/** Calendar Type Models */ +export interface CalendarTypeViewModel { + id: string; + type: string; + nscdr: boolean; + color: string; + passphrase: string | null; +} +export interface CreateCalendarTypeViewModel { + type: string; + nscdr: boolean; + color: string; + passphrase?: string; +} +export interface UpdateCalendarTypeViewModel { + type: string; + nscdr: boolean; + color: string; + passphrase?: string; +} diff --git a/src/viewmodels/admin/club/member/communication.models.ts b/src/viewmodels/admin/club/member/communication.models.ts deleted file mode 100644 index e4db956..0000000 --- a/src/viewmodels/admin/club/member/communication.models.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { CommunicationTypeViewModel } from "../../settings/communicationType.models"; - -export interface CommunicationViewModel { - id: number; - preferred: boolean; - mobile: string; - email: string; - postalCode: string; - city: string; - street: string; - streetNumber: number; - streetNumberAddition: string; - type: CommunicationTypeViewModel; - isNewsletterMain: boolean; - isSMSAlarming: boolean; -} - -export interface CreateCommunicationViewModel { - preferred: boolean; - mobile: string; - email: string; - postalCode: string; - city: string; - street: string; - streetNumber: number; - streetNumberAddition: string; - typeId: number; - isNewsletterMain: boolean; - isSMSAlarming: boolean; -} - -export interface UpdateCommunicationViewModel { - id: number; - preferred: boolean; - mobile: string; - email: string; - postalCode: string; - city: string; - street: string; - streetNumber: number; - streetNumberAddition: string; - isNewsletterMain: boolean; - isSMSAlarming: boolean; -} diff --git a/src/viewmodels/admin/club/member/member.models.ts b/src/viewmodels/admin/club/member/member.models.ts deleted file mode 100644 index a6b49ff..0000000 --- a/src/viewmodels/admin/club/member/member.models.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { CommunicationViewModel } from "./communication.models"; -import type { MembershipViewModel } from "./membership.models"; -import type { SalutationViewModel } from "../../settings/salutation.models"; - -export interface MemberViewModel { - id: number; - salutation: SalutationViewModel; - firstname: string; - lastname: string; - nameaffix: string; - birthdate: Date; - internalId?: string; - firstMembershipEntry?: MembershipViewModel; - lastMembershipEntry?: MembershipViewModel; - sendNewsletter?: CommunicationViewModel; - smsAlarming?: Array; - preferredCommunication?: Array; -} - -export interface MemberStatisticsViewModel { - id: number; - salutation: string; - firstname: string; - lastname: string; - nameaffix: string; - birthdate: Date; - todayAge: number; - ageThisYear: number; - exactAge: string; -} - -export interface CreateMemberViewModel { - salutationId: number; - firstname: string; - lastname: string; - nameaffix: string; - birthdate: Date; - internalId?: string; -} - -export interface UpdateMemberViewModel { - id: number; - salutationId: number; - firstname: string; - lastname: string; - nameaffix: string; - birthdate: Date; - internalId?: string; -} diff --git a/src/viewmodels/admin/club/member/memberAward.models.ts b/src/viewmodels/admin/club/member/memberAward.models.ts deleted file mode 100644 index 7b9e94b..0000000 --- a/src/viewmodels/admin/club/member/memberAward.models.ts +++ /dev/null @@ -1,23 +0,0 @@ -export interface MemberAwardViewModel { - id: number; - given: boolean; - note?: string; - date: Date; - award: string; - awardId: number; -} - -export interface CreateMemberAwardViewModel { - given: boolean; - note?: string; - date: Date; - awardId: number; -} - -export interface UpdateMemberAwardViewModel { - id: number; - given: boolean; - note?: string; - date: Date; - awardId: number; -} diff --git a/src/viewmodels/admin/club/member/memberExecutivePosition.models.ts b/src/viewmodels/admin/club/member/memberExecutivePosition.models.ts deleted file mode 100644 index d54d9f8..0000000 --- a/src/viewmodels/admin/club/member/memberExecutivePosition.models.ts +++ /dev/null @@ -1,23 +0,0 @@ -export interface MemberExecutivePositionViewModel { - id: number; - note?: string; - start: Date; - end?: Date; - executivePosition: string; - executivePositionId: number; -} - -export interface CreateMemberExecutivePositionViewModel { - note?: string; - start: Date; - end?: Date; - executivePositionId: number; -} - -export interface UpdateMemberExecutivePositionViewModel { - id: number; - note?: string; - start: Date; - end?: Date; - executivePositionId: number; -} diff --git a/src/viewmodels/admin/club/member/memberQualification.models.ts b/src/viewmodels/admin/club/member/memberQualification.models.ts deleted file mode 100644 index c723f26..0000000 --- a/src/viewmodels/admin/club/member/memberQualification.models.ts +++ /dev/null @@ -1,24 +0,0 @@ -export interface MemberQualificationViewModel { - id: number; - note?: string; - start: Date; - end?: Date; - terminationReason?: string; - qualification: string; - qualificationId: number; -} - -export interface CreateMemberQualificationViewModel { - note?: string; - start: Date; - qualificationId: number; -} - -export interface UpdateMemberQualificationViewModel { - id: number; - note?: string; - start: Date; - end?: Date; - terminationReason?: string; - qualificationId: number; -} diff --git a/src/viewmodels/admin/club/member/membership.models.ts b/src/viewmodels/admin/club/member/membership.models.ts deleted file mode 100644 index 6051ec9..0000000 --- a/src/viewmodels/admin/club/member/membership.models.ts +++ /dev/null @@ -1,34 +0,0 @@ -export interface MembershipViewModel { - id: number; - start: Date; - end?: Date; - terminationReason?: string; - status: string; - statusId: number; -} - -export interface MembershipStatisticsViewModel { - durationInDays: number; - durationInYears: string; - status: string; - statusId: number; - memberId: number; - memberSalutation: string; - memberFirstname: string; - memberLastname: string; - memberNameaffix: string; - memberBirthdate: Date; -} - -export interface CreateMembershipViewModel { - start: Date; - statusId: number; -} - -export interface UpdateMembershipViewModel { - id: number; - start: Date; - end?: Date; - terminationReason?: string; - statusId: number; -} diff --git a/src/viewmodels/admin/club/newsletter/newsletter.models.ts b/src/viewmodels/admin/club/newsletter/newsletter.models.ts deleted file mode 100644 index 0f3e23b..0000000 --- a/src/viewmodels/admin/club/newsletter/newsletter.models.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { QueryViewModel } from "../../settings/query.models"; - -export interface NewsletterViewModel { - id: number; - title: string; - description: string; - newsletterTitle: string; - newsletterText: string; - newsletterSignatur: string; - isSent: boolean; - recipientsByQueryId?: number | null; - recipientsByQuery?: QueryViewModel | null; -} - -export interface CreateNewsletterViewModel { - title: string; -} - -export interface SyncNewsletterViewModel { - id: number; - title: string; - description: string; - newsletterTitle: string; - newsletterText: string; - newsletterSignatur: string; - recipientsByQueryId?: number; -} - -export interface SendNewsletterViewModel { - id: number; -} diff --git a/src/viewmodels/admin/club/newsletter/newsletterDates.models.ts b/src/viewmodels/admin/club/newsletter/newsletterDates.models.ts deleted file mode 100644 index 3db4d5b..0000000 --- a/src/viewmodels/admin/club/newsletter/newsletterDates.models.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { CalendarViewModel } from "../calendar.models"; - -export interface NewsletterDatesViewModel { - newsletterId: number; - calendarId: string; - diffTitle: string | null; - diffDescription: string | null; - calendar: CalendarViewModel; -} - -export interface SyncNewsletterDatesViewModel { - calendarId: string; - diffTitle?: string; - diffDescription?: string; -} diff --git a/src/viewmodels/admin/club/newsletter/newsletterRecipients.models.ts b/src/viewmodels/admin/club/newsletter/newsletterRecipients.models.ts deleted file mode 100644 index 7e5ab15..0000000 --- a/src/viewmodels/admin/club/newsletter/newsletterRecipients.models.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { MemberViewModel } from "../member/member.models"; - -export interface NewsletterRecipientsViewModel { - newsletterId: number; - memberId: number; - member: MemberViewModel; -} - -export interface SyncNewsletterRecipientsViewModel { - memberId: number; -} diff --git a/src/viewmodels/admin/club/protocol/protocol.models.ts b/src/viewmodels/admin/club/protocol/protocol.models.ts deleted file mode 100644 index 0cd3279..0000000 --- a/src/viewmodels/admin/club/protocol/protocol.models.ts +++ /dev/null @@ -1,22 +0,0 @@ -export interface ProtocolViewModel { - id: number; - title: string; - date: Date; - starttime: Date; - endtime: Date; - summary: string; -} - -export interface CreateProtocolViewModel { - title: string; - date: Date; -} - -export interface SyncProtocolViewModel { - id: number; - title: string; - date: Date; - starttime: Date; - endtime: Date; - summary: string; -} diff --git a/src/viewmodels/admin/club/protocol/protocolAgenda.models.ts b/src/viewmodels/admin/club/protocol/protocolAgenda.models.ts deleted file mode 100644 index 6015315..0000000 --- a/src/viewmodels/admin/club/protocol/protocolAgenda.models.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface ProtocolAgendaViewModel { - id: number; - topic: string; - context: string; - protocolId: number; -} - -export interface SyncProtocolAgendaViewModel { - id?: number; - topic: string; - context: string; -} diff --git a/src/viewmodels/admin/club/protocol/protocolDecision.models.ts b/src/viewmodels/admin/club/protocol/protocolDecision.models.ts deleted file mode 100644 index 19e1d61..0000000 --- a/src/viewmodels/admin/club/protocol/protocolDecision.models.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface ProtocolDecisionViewModel { - id: number; - topic: string; - context: string; - protocolId: number; -} - -export interface SyncProtocolDecisionViewModel { - id?: number; - topic: string; - context: string; -} diff --git a/src/viewmodels/admin/club/protocol/protocolPresence.models.ts b/src/viewmodels/admin/club/protocol/protocolPresence.models.ts deleted file mode 100644 index 35bdd44..0000000 --- a/src/viewmodels/admin/club/protocol/protocolPresence.models.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface ProtocolPresenceViewModel { - memberId: number; - absent: boolean; - excused: boolean; - protocolId: number; -} - -export interface SyncProtocolPresenceViewModel { - memberIds: Array; -} diff --git a/src/viewmodels/admin/club/protocol/protocolPrintout.models.ts b/src/viewmodels/admin/club/protocol/protocolPrintout.models.ts deleted file mode 100644 index ff60cdb..0000000 --- a/src/viewmodels/admin/club/protocol/protocolPrintout.models.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface ProtocolPrintoutViewModel { - id: number; - title: string; - iteration: number; - createdAt: Date; - protocolId: number; -} diff --git a/src/viewmodels/admin/club/protocol/protocolVoting.models.ts b/src/viewmodels/admin/club/protocol/protocolVoting.models.ts deleted file mode 100644 index cb61f68..0000000 --- a/src/viewmodels/admin/club/protocol/protocolVoting.models.ts +++ /dev/null @@ -1,19 +0,0 @@ -export interface ProtocolVotingViewModel { - id: number; - topic: string; - context: string; - favour: number; - abstain: number; - against: number; - protocolId: number; -} - -export interface SyncProtocolVotingViewModel { - id?: number; - topic: string; - context: string; - favour: number; - abstain: number; - against: number; - protocolId: number; -} diff --git a/src/viewmodels/admin/member.models.ts b/src/viewmodels/admin/member.models.ts new file mode 100644 index 0000000..8424cb0 --- /dev/null +++ b/src/viewmodels/admin/member.models.ts @@ -0,0 +1,183 @@ +import { CommunicationTypeViewModel, SalutationViewModel } from "./memberData.models"; + +/** Member Models */ +export interface MemberViewModel { + id: string; + salutation: SalutationViewModel; + firstname: string; + lastname: string; + nameaffix: string; + birthdate: Date; + internalId?: string; + firstMembershipEntry?: MembershipViewModel; + lastMembershipEntry?: MembershipViewModel; + sendNewsletter?: CommunicationViewModel; + smsAlarming?: Array; + preferredCommunication?: Array; +} +export interface MemberStatisticsViewModel { + id: string; + salutation: string; + firstname: string; + lastname: string; + nameaffix: string; + birthdate: Date; + todayAge: number; + ageThisYear: number; + exactAge: string; +} +export interface CreateMemberViewModel { + salutationId: number; + firstname: string; + lastname: string; + nameaffix: string; + birthdate: Date; + internalId?: string; +} +export interface UpdateMemberViewModel { + salutationId: number; + firstname: string; + lastname: string; + nameaffix: string; + birthdate: Date; + internalId?: string; +} + +/** Award Models */ +export interface MemberAwardViewModel { + id: number; + given: boolean; + note?: string; + date: Date; + award: string; + awardId: number; +} +export interface CreateMemberAwardViewModel { + given: boolean; + note?: string; + date: Date; + awardId: number; +} +export interface UpdateMemberAwardViewModel { + given: boolean; + note?: string; + date: Date; + awardId: number; +} + +/** Communication Models */ +export interface CommunicationViewModel { + id: number; + preferred: boolean; + mobile: string; + email: string; + postalCode: string; + city: string; + street: string; + streetNumber: number; + streetNumberAddition: string; + type: CommunicationTypeViewModel; + isNewsletterMain: boolean; + isSMSAlarming: boolean; +} +export interface CreateCommunicationViewModel { + preferred: boolean; + mobile: string; + email: string; + postalCode: string; + city: string; + street: string; + streetNumber: number; + streetNumberAddition: string; + typeId: number; + isNewsletterMain: boolean; + isSMSAlarming: boolean; +} +export interface UpdateCommunicationViewModel { + preferred: boolean; + mobile: string; + email: string; + postalCode: string; + city: string; + street: string; + streetNumber: number; + streetNumberAddition: string; + isNewsletterMain: boolean; + isSMSAlarming: boolean; +} + +/** Executive Positon Models */ +export interface MemberExecutivePositionViewModel { + id: number; + note?: string; + start: Date; + end?: Date; + executivePosition: string; + executivePositionId: number; +} +export interface CreateMemberExecutivePositionViewModel { + note?: string; + start: Date; + end?: Date; + executivePositionId: number; +} +export interface UpdateMemberExecutivePositionViewModel { + note?: string; + start: Date; + end?: Date; + executivePositionId: number; +} + +/** Qualification Models */ +export interface MemberQualificationViewModel { + id: number; + note?: string; + start: Date; + end?: Date; + terminationReason?: string; + qualification: string; + qualificationId: number; +} +export interface CreateMemberQualificationViewModel { + note?: string; + start: Date; + qualificationId: number; +} +export interface UpdateMemberQualificationViewModel { + note?: string; + start: Date; + end?: Date; + terminationReason?: string; + qualificationId: number; +} + +/** Membership Models */ +export interface MembershipViewModel { + start: Date; + end?: Date; + terminationReason?: string; + status: string; + statusId: number; +} +export interface MembershipStatisticsViewModel { + durationInDays: number; + durationInYears: string; + status: string; + statusId: number; + memberId: number; + memberSalutation: string; + memberFirstname: string; + memberLastname: string; + memberNameaffix: string; + memberBirthdate: Date; +} +export interface CreateMembershipViewModel { + start: Date; + statusId: number; +} +export interface UpdateMembershipViewModel { + start: Date; + end?: Date; + terminationReason?: string; + statusId: number; +} diff --git a/src/viewmodels/admin/memberData.models.ts b/src/viewmodels/admin/memberData.models.ts new file mode 100644 index 0000000..6475474 --- /dev/null +++ b/src/viewmodels/admin/memberData.models.ts @@ -0,0 +1,79 @@ +import { CommunicationFieldType } from "../../types/admin/fieldTypes"; + +/** Award Models */ +export interface AwardViewModel { + id: number; + award: string; +} +export interface CreateAwardViewModel { + award: string; +} +export interface UpdateAwardViewModel { + award: string; +} + +/** Communication Type Models */ +export interface CommunicationTypeViewModel { + id: number; + type: string; + fields: Array; +} +export interface CreateCommunicationTypeViewModel { + type: string; + fields: Array; +} +export interface UpdateCommunicationTypeViewModel { + type: string; + fields: Array; +} + +/** Membership Status Models */ +export interface MembershipStatusViewModel { + id: number; + status: string; +} +export interface CreateMembershipStatusViewModel { + status: string; +} +export interface UpdateMembershipStatusViewModel { + status: string; +} + +/** Executive Positon Models */ +export interface ExecutivePositionViewModel { + id: number; + position: string; +} +export interface CreateExecutivePositionViewModel { + position: string; +} +export interface UpdateExecutivePositionViewModel { + position: string; +} + +/** Qualification Models */ +export interface QualificationViewModel { + id: number; + qualification: string; + description: string | null; +} +export interface CreateQualificationViewModel { + qualification: string; + description: string | null; +} +export interface UpdateQualificationViewModel { + qualification: string; + description: string | null; +} + +/** Salutation Models */ +export interface SalutationViewModel { + id: number; + salutation: string; +} +export interface CreateSalutationViewModel { + salutation: string; +} +export interface UpdateSalutationViewModel { + salutation: string; +} diff --git a/src/viewmodels/admin/newsletter.models.ts b/src/viewmodels/admin/newsletter.models.ts new file mode 100644 index 0000000..85df5fe --- /dev/null +++ b/src/viewmodels/admin/newsletter.models.ts @@ -0,0 +1,62 @@ +import { NewsletterConfigType } from "../../enums/admin/newsletterType"; +import { CalendarViewModel } from "./calendar.models"; +import { MemberViewModel } from "./member.models"; +import { CommunicationTypeViewModel } from "./memberData.models"; +import { QueryViewModel } from "./query.models"; + +/** Newsletter Models */ +export interface NewsletterViewModel { + id: number; + title: string; + description: string; + newsletterTitle: string; + newsletterText: string; + newsletterSignatur: string; + isSent: boolean; + recipientsByQueryId?: number | null; + recipientsByQuery?: QueryViewModel | null; +} +export interface CreateNewsletterViewModel { + title: string; +} +export interface SyncNewsletterViewModel { + title: string; + description: string; + newsletterTitle: string; + newsletterText: string; + newsletterSignatur: string; + recipientsByQueryId?: number; +} + +/** Newsletter Recipient Models */ +export interface NewsletterRecipientsViewModel { + newsletterId: number; + memberId: string; + member: MemberViewModel; +} +export interface SyncNewsletterRecipientsViewModel { + recipients: Array; +} + +/** Newsletter Date Models */ +export interface NewsletterDatesViewModel { + newsletterId: number; + calendarId: string; + diffTitle: string | null; + diffDescription: string | null; + calendar: CalendarViewModel; +} +export interface SyncNewsletterDatesViewModel { + dates: Array<{ calendarId: string; diffTitle?: string; diffDescription?: string }>; +} + +/** Newsletter Config Models */ +export interface NewsletterConfigViewModel { + comTypeId: number; + config: NewsletterConfigType; + comType: CommunicationTypeViewModel; +} +export interface SetNewsletterConfigViewModel { + comTypeId: number; + config: NewsletterConfigType; +} diff --git a/src/viewmodels/admin/protocol.models.ts b/src/viewmodels/admin/protocol.models.ts new file mode 100644 index 0000000..aa6e87c --- /dev/null +++ b/src/viewmodels/admin/protocol.models.ts @@ -0,0 +1,89 @@ +/** Protocol Models */ +export interface ProtocolViewModel { + id: number; + title: string; + date: Date; + starttime: Date; + endtime: Date; + summary: string; +} +export interface CreateProtocolViewModel { + title: string; + date: Date; +} +export interface SyncProtocolViewModel { + title: string; + date: Date; + starttime: Date; + endtime: Date; + summary: string; +} + +/** Protocol Agenda Models */ +export interface ProtocolAgendaViewModel { + id: number; + topic: string; + context: string; + protocolId: number; +} +export interface SyncProtocolAgendaViewModel { + id: number; + topic: string; + context: string; +} + +/** Protocol Decision Models */ +export interface ProtocolDecisionViewModel { + id: number; + topic: string; + context: string; + protocolId: number; +} +export interface SyncProtocolDecisionViewModel { + id: number; + topic: string; + context: string; +} + +/** Protocol Presence Models */ +export interface ProtocolPresenceViewModel { + memberId: string; + absent: boolean; + excused: boolean; + protocolId: number; +} +export interface SyncProtocolPresenceViewModel { + presence: Array<{ + memberId: string; + absent: boolean; + excused: boolean; + }>; +} + +/** Protocol Voting Models */ +export interface ProtocolVotingViewModel { + id: number; + topic: string; + context: string; + favour: number; + abstain: number; + against: number; + protocolId: number; +} +export interface SyncProtocolVotingViewModel { + id: number; + topic: string; + context: string; + favour: number; + abstain: number; + against: number; +} + +/** Protocol Printout Models */ +export interface ProtocolPrintoutViewModel { + id: number; + title: string; + iteration: number; + createdAt: Date; + protocolId: number; +} diff --git a/src/viewmodels/admin/query.models.ts b/src/viewmodels/admin/query.models.ts new file mode 100644 index 0000000..ac1895d --- /dev/null +++ b/src/viewmodels/admin/query.models.ts @@ -0,0 +1,35 @@ +import { DynamicQueryStructure, FieldType } from "../../types/admin/dynamicQueries"; + +/** Query Store Models */ +export interface QueryViewModel { + id: number; + title: string; + query: string | DynamicQueryStructure; +} + +export interface CreateQueryViewModel { + title: string; + query: string | DynamicQueryStructure; +} + +export interface UpdateQueryViewModel { + query: string | DynamicQueryStructure; +} + +/** Query Builder Models */ +export type QueryExecuteResult = + | { + stats: "error"; + sql: string; + code: string; + msg: string; + } + | { + stats: "success"; + rows: Array<{ + [key: string]: FieldType; + }>; + total: number; + offset: number; + count: number; + }; diff --git a/src/viewmodels/admin/role.models.ts b/src/viewmodels/admin/role.models.ts new file mode 100644 index 0000000..25f8361 --- /dev/null +++ b/src/viewmodels/admin/role.models.ts @@ -0,0 +1,13 @@ +import { PermissionObject } from "../../types/admin/permissionTypes"; + +export interface RoleViewModel { + id: number; + permissions: PermissionObject; + role: string; +} +export interface UpdateRoleViewModel { + role: string; +} +export interface UpdateRolePermissionViewModel { + permissions: PermissionObject; +} diff --git a/src/viewmodels/admin/settings/award.models.ts b/src/viewmodels/admin/settings/award.models.ts deleted file mode 100644 index 8fc9b9e..0000000 --- a/src/viewmodels/admin/settings/award.models.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface AwardViewModel { - id: number; - award: string; -} - -export interface CreateAwardViewModel { - award: string; -} - -export interface UpdateAwardViewModel { - id: number; - award: string; -} diff --git a/src/viewmodels/admin/settings/calendarType.models.ts b/src/viewmodels/admin/settings/calendarType.models.ts deleted file mode 100644 index 0a56387..0000000 --- a/src/viewmodels/admin/settings/calendarType.models.ts +++ /dev/null @@ -1,22 +0,0 @@ -export interface CalendarTypeViewModel { - id: string; - type: string; - nscdr: boolean; - color: string; - passphrase: string | null; -} - -export interface CreateCalendarTypeViewModel { - type: string; - nscdr: boolean; - color: string; - passphrase?: string; -} - -export interface UpdateCalendarTypeViewModel { - id: string; - type: string; - nscdr: boolean; - color: string; - passphrase?: string; -} diff --git a/src/viewmodels/admin/settings/communicationType.models.ts b/src/viewmodels/admin/settings/communicationType.models.ts deleted file mode 100644 index c8775de..0000000 --- a/src/viewmodels/admin/settings/communicationType.models.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { CommunicationFieldType } from "../../../types/fieldTypes"; - -export interface CommunicationTypeViewModel { - id: number; - type: string; - fields: Array; -} - -export interface CreateCommunicationTypeViewModel { - type: string; - fields: Array; -} - -export interface UpdateCommunicationTypeViewModel { - id: number; - type: string; - fields: Array; -} diff --git a/src/viewmodels/admin/settings/executivePosition.models.ts b/src/viewmodels/admin/settings/executivePosition.models.ts deleted file mode 100644 index a2daefc..0000000 --- a/src/viewmodels/admin/settings/executivePosition.models.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface ExecutivePositionViewModel { - id: number; - position: string; -} - -export interface CreateExecutivePositionViewModel { - position: string; -} - -export interface UpdateExecutivePositionViewModel { - id: number; - position: string; -} diff --git a/src/viewmodels/admin/settings/membershipStatus.models.ts b/src/viewmodels/admin/settings/membershipStatus.models.ts deleted file mode 100644 index 812ddb9..0000000 --- a/src/viewmodels/admin/settings/membershipStatus.models.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface MembershipStatusViewModel { - id: number; - status: string; -} - -export interface CreateMembershipStatusViewModel { - status: string; -} - -export interface UpdateMembershipStatusViewModel { - id: number; - status: string; -} diff --git a/src/viewmodels/admin/settings/newsletterConfig.models.ts b/src/viewmodels/admin/settings/newsletterConfig.models.ts deleted file mode 100644 index 678c734..0000000 --- a/src/viewmodels/admin/settings/newsletterConfig.models.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { NewsletterConfigType } from "../../../enums/newsletterConfigType"; -import type { CommunicationTypeViewModel } from "./communicationType.models"; - -export interface NewsletterConfigViewModel { - comTypeId: number; - config: NewsletterConfigType; - comType: CommunicationTypeViewModel; -} - -export interface SetNewsletterConfigViewModel { - comTypeId: number; - config: NewsletterConfigType; -} diff --git a/src/viewmodels/admin/settings/qualification.models.ts b/src/viewmodels/admin/settings/qualification.models.ts deleted file mode 100644 index 2f11296..0000000 --- a/src/viewmodels/admin/settings/qualification.models.ts +++ /dev/null @@ -1,16 +0,0 @@ -export interface QualificationViewModel { - id: number; - qualification: string; - description: string | null; -} - -export interface CreateQualificationViewModel { - qualification: string; - description: string | null; -} - -export interface UpdateQualificationViewModel { - id: number; - qualification: string; - description: string | null; -} diff --git a/src/viewmodels/admin/settings/query.models.ts b/src/viewmodels/admin/settings/query.models.ts deleted file mode 100644 index 8f75db3..0000000 --- a/src/viewmodels/admin/settings/query.models.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { DynamicQueryStructure } from "../../../types/dynamicQueries"; - -export interface TableMeta { - tableName: string; - columns: Array<{ column: string; type: string }>; - relations: Array<{ column: string; relationType: string; referencedTableName: string }>; -} - -export interface QueryViewModel { - id: number; - title: string; - query: string | DynamicQueryStructure; -} - -export interface CreateQueryViewModel { - title: string; - query: string | DynamicQueryStructure; -} - -export interface UpdateQueryViewModel { - id: number; - query: string | DynamicQueryStructure; -} diff --git a/src/viewmodels/admin/settings/salutation.models.ts b/src/viewmodels/admin/settings/salutation.models.ts deleted file mode 100644 index 73915ab..0000000 --- a/src/viewmodels/admin/settings/salutation.models.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface SalutationViewModel { - id: number; - salutation: string; -} - -export interface CreateSalutationViewModel { - salutation: string; -} - -export interface UpdateSalutationViewModel { - id: number; - salutation: string; -} diff --git a/src/viewmodels/admin/settings/template.models.ts b/src/viewmodels/admin/settings/template.models.ts deleted file mode 100644 index c470fd1..0000000 --- a/src/viewmodels/admin/settings/template.models.ts +++ /dev/null @@ -1,20 +0,0 @@ -export interface TemplateViewModel { - id: number; - template: string; - description: string | null; - design: object; - html: string; -} - -export interface CreateTemplateViewModel { - template: string; - description: string | null; -} - -export interface UpdateTemplateViewModel { - id: number; - template: string; - description: string | null; - design: object; - html: string; -} diff --git a/src/viewmodels/admin/settings/templateUsage.models.ts b/src/viewmodels/admin/settings/templateUsage.models.ts deleted file mode 100644 index 440f8e4..0000000 --- a/src/viewmodels/admin/settings/templateUsage.models.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { PermissionModule } from "../../../types/permissionTypes"; - -export interface TemplateUsageViewModel { - scope: PermissionModule; - header: { id: number; template: string } | null; - body: { id: number; template: string } | null; - footer: { id: number; template: string } | null; - headerHeight: number | null; - footerHeight: number | null; -} - -export interface UpdateTemplateUsageViewModel { - scope: PermissionModule; - headerId: number | null; - bodyId: number | null; - footerId: number | null; - headerHeight: number | null; - footerHeight: number | null; -} diff --git a/src/viewmodels/admin/template.models.ts b/src/viewmodels/admin/template.models.ts new file mode 100644 index 0000000..a6e1d47 --- /dev/null +++ b/src/viewmodels/admin/template.models.ts @@ -0,0 +1,43 @@ +import { PermissionModule } from "../../types/admin/permissionTypes"; + +/** Template Models */ +export interface TemplateViewModel { + id: number; + template: string; + description: string | null; + design: object; + html: string; +} + +export interface CreateTemplateViewModel { + template: string; + description: string | null; +} +export interface CloneTemplateViewModel { + cloneId: number; +} +export interface UpdateTemplateViewModel { + id: number; + template: string; + description: string | null; + design: object; + html: string; +} + +/** Template Usage Models */ +export interface TemplateUsageViewModel { + scope: `${PermissionModule}` | `${PermissionModule}.${string}`; + header: { id: number; template: string } | null; + body: { id: number; template: string } | null; + footer: { id: number; template: string } | null; + headerHeight: number | null; + footerHeight: number | null; +} + +export interface UpdateTemplateUsageViewModel { + headerId: number | null; + bodyId: number | null; + footerId: number | null; + headerHeight: number | null; + footerHeight: number | null; +} diff --git a/src/viewmodels/admin/user/user.models.ts b/src/viewmodels/admin/user.models.ts similarity index 51% rename from src/viewmodels/admin/user/user.models.ts rename to src/viewmodels/admin/user.models.ts index 38d95e5..7cc4f73 100644 --- a/src/viewmodels/admin/user/user.models.ts +++ b/src/viewmodels/admin/user.models.ts @@ -1,6 +1,7 @@ -import { PermissionObject } from "../../../types/permissionTypes"; +import { PermissionObject } from "../../types/admin/permissionTypes"; import { RoleViewModel } from "./role.models"; +/** User Models */ export interface UserViewModel { id: string; username: string; @@ -12,16 +13,33 @@ export interface UserViewModel { roles: Array; permissions_total: PermissionObject; } - export interface CreateUserViewModel { username: string; mail: string; firstname: string; lastname: string; } - export interface UpdateUserViewModel { - id: string; + username: string; + mail: string; + firstname: string; + lastname: string; +} +export interface UpdateUserRolesViewModel { + roleIds: Array; +} +export interface UpdateUserPermissionViewModel { + permissions: PermissionObject; +} + +/** Invite Models */ +export interface InviteViewModel { + username: string; + mail: string; + firstname: string; + lastname: string; +} +export interface CreateInviteViewModel { username: string; mail: string; firstname: string; diff --git a/src/viewmodels/admin/user/invite.models.ts b/src/viewmodels/admin/user/invite.models.ts deleted file mode 100644 index f1a6264..0000000 --- a/src/viewmodels/admin/user/invite.models.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface InviteViewModel { - username: string; - mail: string; - firstname: string; - lastname: string; -} - -export interface CreateInviteViewModel { - username: string; - mail: string; - firstname: string; - lastname: string; -} diff --git a/src/viewmodels/admin/user/role.models.ts b/src/viewmodels/admin/user/role.models.ts deleted file mode 100644 index bc907f5..0000000 --- a/src/viewmodels/admin/user/role.models.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { PermissionObject } from "../../../types/permissionTypes"; - -export interface RoleViewModel { - id: number; - permissions: PermissionObject; - role: string; -}