Commit 9b76c374 by hometown

feat: chat api done

parent 6c68b8cf
{
// Visuals
"workbench.colorTheme": "Vitesse Dark",
"workbench.colorTheme": "Vitesse Light",
"workbench.editor.tabCloseButton": "left",
"workbench.fontAliasing": "antialiased",
"workbench.iconTheme": "file-icons",
......
......@@ -21,6 +21,7 @@
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@nestjs/axios": "^3.0.1",
"@nestjs/common": "^7.5.5",
"@nestjs/core": "^7.5.5",
"@nestjs/graphql": "^7.9.1",
......@@ -30,10 +31,11 @@
"@nestjs/swagger": "^4.7.5",
"@nestjs/typeorm": "^7.1.5",
"apollo-server-express": "^2.19.0",
"axios": "^1.6.2",
"bcrypt": "^5.0.0",
"body-parser-xml": "^2.0.1",
"class-transformer": "^0.3.1",
"class-validator": "^0.12.2",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.0",
"dayjs": "^1.9.7",
"express-rate-limit": "^5.2.3",
"graphql": "^15.4.0",
......
......@@ -5,15 +5,18 @@ settings:
excludeLinksFromLockfile: false
dependencies:
'@nestjs/axios':
specifier: ^3.0.1
version: 3.0.1(@nestjs/common@7.6.18)(axios@1.6.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common':
specifier: ^7.5.5
version: 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
version: 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/core':
specifier: ^7.5.5
version: 7.6.18(@nestjs/common@7.6.18)(@nestjs/platform-express@7.6.18)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/graphql':
specifier: ^7.9.1
version: 7.11.0(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)(apollo-server-core@2.26.2)(class-transformer@0.3.2)(class-validator@0.12.2)(graphql@15.8.0)(reflect-metadata@0.1.14)
version: 7.11.0(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)(apollo-server-core@2.26.2)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@15.8.0)(reflect-metadata@0.1.14)
'@nestjs/jwt':
specifier: ^7.2.0
version: 7.2.0(@nestjs/common@7.6.18)
......@@ -25,13 +28,16 @@ dependencies:
version: 7.6.18(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)
'@nestjs/swagger':
specifier: ^4.7.5
version: 4.8.2(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(swagger-ui-express@4.6.3)
version: 4.8.2(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(swagger-ui-express@4.6.3)
'@nestjs/typeorm':
specifier: ^7.1.5
version: 7.1.5(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)(reflect-metadata@0.1.14)(rxjs@6.6.7)(typeorm@0.2.45)
apollo-server-express:
specifier: ^2.19.0
version: 2.26.2(graphql@15.8.0)
axios:
specifier: ^1.6.2
version: 1.6.2
bcrypt:
specifier: ^5.0.0
version: 5.1.1
......@@ -39,11 +45,11 @@ dependencies:
specifier: ^2.0.1
version: 2.0.5
class-transformer:
specifier: ^0.3.1
version: 0.3.2
specifier: ^0.5.1
version: 0.5.1
class-validator:
specifier: ^0.12.2
version: 0.12.2
specifier: ^0.14.0
version: 0.14.0
dayjs:
specifier: ^1.9.7
version: 1.11.10
......@@ -1941,6 +1947,20 @@ packages:
resolution: {integrity: sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==}
dev: false
/@nestjs/axios@3.0.1(@nestjs/common@7.6.18)(axios@1.6.2)(reflect-metadata@0.1.14)(rxjs@6.6.7):
resolution: {integrity: sha512-VlOZhAGDmOoFdsmewn8AyClAdGpKXQQaY1+3PGB+g6ceurGIdTxZgRX3VXc1T6Zs60PedWjg3A82TDOB05mrzQ==}
peerDependencies:
'@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
axios: ^1.3.1
reflect-metadata: ^0.1.12
rxjs: ^6.0.0 || ^7.0.0
dependencies:
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
axios: 1.6.2
reflect-metadata: 0.1.14
rxjs: 6.6.7
dev: false
/@nestjs/cli@7.6.0(eslint@7.32.0):
resolution: {integrity: sha512-lW1px2gSHkRoBpKSxzP6IJNQscRKs97OAaVyV46OAP6oUR996E0EPkIslIaa16kKLJ3SFOUeZo5xl5nYbqp43g==}
engines: {node: '>= 10.13.0', npm: '>= 6.11.0'}
......@@ -1976,7 +1996,7 @@ packages:
- webpack-cli
dev: true
/@nestjs/common@7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7):
/@nestjs/common@7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7):
resolution: {integrity: sha512-BUJQHNhWzwWOkS4Ryndzd4HTeRObcAWV2Fh+ermyo3q3xYQQzNoEWclJVL/wZec8AONELwIJ+PSpWI53VP0leg==}
peerDependencies:
cache-manager: '*'
......@@ -1993,8 +2013,8 @@ packages:
optional: true
dependencies:
axios: 0.21.1
class-transformer: 0.3.2
class-validator: 0.12.2
class-transformer: 0.5.1
class-validator: 0.14.0
iterare: 1.2.1
reflect-metadata: 0.1.14
rxjs: 6.6.7
......@@ -2021,7 +2041,7 @@ packages:
'@nestjs/websockets':
optional: true
dependencies:
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/platform-express': 7.6.18(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)
'@nuxtjs/opencollective': 0.3.2
fast-safe-stringify: 2.0.7
......@@ -2035,7 +2055,7 @@ packages:
transitivePeerDependencies:
- encoding
/@nestjs/graphql@7.11.0(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)(apollo-server-core@2.26.2)(class-transformer@0.3.2)(class-validator@0.12.2)(graphql@15.8.0)(reflect-metadata@0.1.14):
/@nestjs/graphql@7.11.0(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)(apollo-server-core@2.26.2)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@15.8.0)(reflect-metadata@0.1.14):
resolution: {integrity: sha512-ePvvAZkYFYPF+Ibax+Nuz5z7p4U6jXUqdxNsjI6m6DYwsAa8hzXhKA9bPhBs2FCrrAcEJ9KrmI2luJ/Lj0SHbg==}
peerDependencies:
'@nestjs/common': ^7.0.0
......@@ -2047,9 +2067,9 @@ packages:
'@graphql-tools/merge': 6.2.14(graphql@15.8.0)
'@graphql-tools/schema': 7.1.5(graphql@15.8.0)
'@graphql-tools/utils': 7.10.0(graphql@15.8.0)
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/core': 7.6.18(@nestjs/common@7.6.18)(@nestjs/platform-express@7.6.18)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/mapped-types': 0.4.1(@nestjs/common@7.6.18)(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)
'@nestjs/mapped-types': 0.4.1(@nestjs/common@7.6.18)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)
apollo-server-core: 2.26.2(graphql@15.8.0)
chokidar: 3.5.2
fast-glob: 3.2.5
......@@ -2079,12 +2099,12 @@ packages:
peerDependencies:
'@nestjs/common': ^6.0.0 || ^7.0.0
dependencies:
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@types/jsonwebtoken': 8.5.0
jsonwebtoken: 8.5.1
dev: false
/@nestjs/mapped-types@0.4.1(@nestjs/common@7.6.18)(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14):
/@nestjs/mapped-types@0.4.1(@nestjs/common@7.6.18)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14):
resolution: {integrity: sha512-JXrw2LMangSU3vnaXWXVX47GRG1FbbNh4aVBbidDjxT3zlghsoNQY6qyWtT001MCl8lJGo8I6i6+DurBRRxl/Q==}
peerDependencies:
'@nestjs/common': ^7.0.8
......@@ -2092,9 +2112,9 @@ packages:
class-validator: ^0.11.1 || ^0.12.0 || ^0.13.0
reflect-metadata: ^0.1.12
dependencies:
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
class-transformer: 0.3.2
class-validator: 0.12.2
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
class-transformer: 0.5.1
class-validator: 0.14.0
reflect-metadata: 0.1.14
dev: false
......@@ -2104,7 +2124,7 @@ packages:
'@nestjs/common': ^6.0.0 || ^7.0.0
passport: ^0.4.0
dependencies:
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
passport: 0.4.1
dev: false
......@@ -2114,7 +2134,7 @@ packages:
'@nestjs/common': ^7.0.0
'@nestjs/core': ^7.0.0
dependencies:
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/core': 7.6.18(@nestjs/common@7.6.18)(@nestjs/platform-express@7.6.18)(reflect-metadata@0.1.14)(rxjs@6.6.7)
body-parser: 1.19.0
cors: 2.8.5
......@@ -2150,7 +2170,7 @@ packages:
typescript: 4.9.5
dev: true
/@nestjs/swagger@4.8.2(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(swagger-ui-express@4.6.3):
/@nestjs/swagger@4.8.2(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(swagger-ui-express@4.6.3):
resolution: {integrity: sha512-RSUwcVxrzXF7/b/IZ5lXnYHJ6jIGS9wWRTJKIt1kIaCNWT+0wRfTlAyhQkzs2g35/PTXJEcdIwwY7mBO/bwHzw==}
peerDependencies:
'@nestjs/common': ^6.8.0 || ^7.0.0
......@@ -2164,9 +2184,9 @@ packages:
swagger-ui-express:
optional: true
dependencies:
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/core': 7.6.18(@nestjs/common@7.6.18)(@nestjs/platform-express@7.6.18)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/mapped-types': 0.4.1(@nestjs/common@7.6.18)(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)
'@nestjs/mapped-types': 0.4.1(@nestjs/common@7.6.18)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)
lodash: 4.17.21
path-to-regexp: 3.2.0
reflect-metadata: 0.1.14
......@@ -2190,7 +2210,7 @@ packages:
optional: true
dependencies:
optional: 0.1.4
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/core': 7.6.18(@nestjs/common@7.6.18)(@nestjs/platform-express@7.6.18)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/platform-express': 7.6.18(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)
tslib: 2.2.0
......@@ -2205,7 +2225,7 @@ packages:
rxjs: ^6.0.0
typeorm: ^0.2.7
dependencies:
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/core': 7.6.18(@nestjs/common@7.6.18)(@nestjs/platform-express@7.6.18)(reflect-metadata@0.1.14)(rxjs@6.6.7)
reflect-metadata: 0.1.14
rxjs: 6.6.7
......@@ -2646,8 +2666,8 @@ packages:
'@types/superagent': 4.1.24
dev: true
/@types/validator@13.0.0:
resolution: {integrity: sha512-WAy5txG7aFX8Vw3sloEKp5p/t/Xt8jD3GRD9DacnFv6Vo8ubudAsRTXgxpQwU0mpzY/H8U4db3roDuCMjShBmw==}
/@types/validator@13.11.7:
resolution: {integrity: sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q==}
/@types/websocket@1.0.2:
resolution: {integrity: sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ==}
......@@ -3759,6 +3779,16 @@ packages:
transitivePeerDependencies:
- debug
/axios@1.6.2:
resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==}
dependencies:
follow-redirects: 1.15.3
form-data: 4.0.0
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
dev: false
/babel-jest@26.6.3(@babel/core@7.23.6):
resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==}
engines: {node: '>= 10.14.2'}
......@@ -4265,9 +4295,8 @@ packages:
resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==}
dev: true
/class-transformer@0.3.2:
resolution: {integrity: sha512-9QY6QXBH/+Gt1C3HBmJCrgY6+EFpIa6aLjfDnlXFx0zQl/HjrCE7qoaI0srNrxpMIfsobCpgUdDG5JYtJOpVsw==}
deprecated: This release contains a breaking change from 0.3.1 but otherwise functions properly. Please read the changelog on Github to learn more.
/class-transformer@0.5.1:
resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==}
/class-utils@0.3.6:
resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
......@@ -4279,13 +4308,12 @@ packages:
static-extend: 0.1.2
dev: true
/class-validator@0.12.2:
resolution: {integrity: sha512-TDzPzp8BmpsbPhQpccB3jMUE/3pK0TyqamrK0kcx+ZeFytMA+O6q87JZZGObHHnoo9GM8vl/JppIyKWeEA/EVw==}
/class-validator@0.14.0:
resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==}
dependencies:
'@types/validator': 13.0.0
google-libphonenumber: 3.2.33
tslib: 2.6.2
validator: 13.0.0
'@types/validator': 13.11.7
libphonenumber-js: 1.10.52
validator: 13.11.0
/clean-stack@2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
......@@ -5888,10 +5916,6 @@ packages:
merge2: 1.4.1
slash: 3.0.0
/google-libphonenumber@3.2.33:
resolution: {integrity: sha512-1QKCvAlfq8zY1mviORI9lDzM3I/hwm9+h0CwYBTLq59DBbSHMd5zBOLqHZFiBLicRpwIz46Nynvbywj1XApKvA==}
engines: {node: '>=0.10'}
/gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
dependencies:
......@@ -7380,6 +7404,9 @@ packages:
type-check: 0.4.0
dev: true
/libphonenumber-js@1.10.52:
resolution: {integrity: sha512-6vCuCHgem+OW1/VCAKgkasfegItCea8zIT7s9/CG/QxdCMIM7GfzbEBG5d7lGO3rzipjt5woOQL3DiHa8Fy78Q==}
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
dev: true
......@@ -7875,7 +7902,7 @@ packages:
peerDependencies:
'@nestjs/common': ^5.1.0 || ^6.0.3 || ^7.0.1 || ^8.0.0 || ^9.0.0 || ^10.0.0
dependencies:
'@nestjs/common': 7.6.18(class-transformer@0.3.2)(class-validator@0.12.2)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@nestjs/common': 7.6.18(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.14)(rxjs@6.6.7)
'@types/node': 16.18.68
dotenv: 10.0.0
glob: 7.2.3
......@@ -8461,6 +8488,10 @@ packages:
forwarded: 0.2.0
ipaddr.js: 1.9.1
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
dev: false
/prr@1.0.1:
resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
dev: true
......@@ -9845,6 +9876,7 @@ packages:
/tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
dev: false
/tsutils@3.21.0(typescript@4.9.5):
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
......@@ -10188,8 +10220,8 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
/validator@13.0.0:
resolution: {integrity: sha512-anYx5fURbgF04lQV18nEQWZ/3wHGnxiKdG4aL8J+jEDsm98n/sU/bey+tYk6tnGJzm7ioh5FoqrAiQ6m03IgaA==}
/validator@13.11.0:
resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==}
engines: {node: '>= 0.10'}
/value-or-promise@1.0.11:
......
import { ArgumentMetadata, HttpException, HttpStatus, Injectable, PipeTransform, Type, } from '@nestjs/common';
import { plainToClass } from 'class-transformer';
import { validate } from 'class-validator';
import { ValidationError, validate } from 'class-validator';
function formatErrors(errors: ValidationError[], errorMessage?: any, parentField?: string) {
const message = errorMessage || {}
let errorField = ''
let validationList
errors.forEach(error => {
errorField = parentField ? `${parentField}.${error.property}` : error?.property
if(!error?.constraints && error?.children?.length) {
formatErrors(error.children, message, errorField)
} else {
validationList = Object.values(error.constraints)
message[errorField] = validationList.length > 0 ? validationList.pop() : 'Invalid Value'!
}
})
console.log(message,'message')
return message
}
@Injectable()
export class ValidationPipe implements PipeTransform<any> {
......@@ -10,17 +27,9 @@ export class ValidationPipe implements PipeTransform<any> {
const object = plainToClass(metatype, value);
const errors = await validate(object);
if (errors.length > 0) {
// const errObj = {};
// errors.forEach(err => {
// const {
// property,
// constraints,
// } = err;
// errObj[property] = Object.values(constraints);
// });
const errObj = Object.values(errors[0].constraints)[0];
const errorObj = formatErrors(errors)
throw new HttpException(
{ message: '请求参数验证失败 ', error: errObj },
{ message: '请求参数验证失败 ', error: errorObj },
HttpStatus.BAD_REQUEST,
);
}
......
......@@ -4,11 +4,11 @@ import { map } from 'rxjs/operators';
import { classToPlain } from 'class-transformer';
import systemConfig from "../config/system";
const transformValue = (result: any, code: number = 0, message: string = '请求成功', ok = true) => {
const transformValue = (result: any, code: number, message: string = '请求成功', ok = true) => {
const { returnFormat } = systemConfig
return {
[returnFormat.result]: classToPlain(result),
[returnFormat.code]: code,
[returnFormat.code]: code || 200,
[returnFormat.message]: message,
[returnFormat.ok]: ok,
}
......
import { ChatService } from './chat.service';
import { Body, Controller, HttpException, HttpStatus, Post, Req } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { sendMessageDto } from './dto/sendMessage.dto';
import { ChatQueryDto } from './dto/chatQuery.dto';
@ApiTags('chat')
@Controller('chat')
export class ChatController {
constructor(private readonly chatService: ChatService) {}
@ApiOperation({ summary: '发送消息', description: '向ERNIE Bot模型发送消息得到答案' })
@Post('sendMessage')
sendMessage(@Body() body: sendMessageDto) {
@ApiOperation({ summary: '查询答案', description: '向ERNIE Bot模型发送消息得到答案' })
@Post('query')
query(@Body() body: ChatQueryDto) {
try {
return this.chatService.sendMessage(body.messages)
return this.chatService.query(body)
} catch (error) {
new HttpException({ message: '服务端错误 ', error: error }, HttpStatus.BAD_REQUEST)
}
......
import { Module } from '@nestjs/common';
import { HttpModule } from '@nestjs/axios';
import { ChatController } from './chat.controller';
import { ChatService } from './chat.service';;
@Module({
imports: [HttpModule],
controllers: [ChatController],
providers: [ChatService],
})
......
import { Injectable } from '@nestjs/common';
import type { Message } from './dto/sendMessage.dto';
import { Injectable, Logger } from '@nestjs/common';
import axios from 'axios';
import type { ErnieBotAccessToken, ErnieBotChatResponse } from './types';
import { ChatQueryDto } from './dto/chatQuery.dto';
@Injectable()
export class ChatService {
sendMessage(messages: Message[]) {
return messages
async query(body: ChatQueryDto) {
return await this.chat(body)
}
private async chat({query, history}: ChatQueryDto) {
const url = `https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/plugin/8yrkkifr8gccsvck/?access_token=${await this.getAccessToken()}`
const data = JSON.stringify({
query,
plugins: ['uuid-zhishiku'],
verbose: true,
history,
})
const res = await axios<ErnieBotChatResponse>(url, { method: 'post', headers: { 'Content-Type': 'application/json' }, data })
return res.data.result || res.data.error_msg
}
private async getAccessToken() {
const AK = 'mXQIDW260qBbNgQRF0p1YFgn'
const SK = 'hzriOtzGiDkd1S0wFwiyr7WlarfufTdi'
const res = await axios.post<ErnieBotAccessToken>(`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${AK}&client_secret=${SK}`)
return res.data.access_token
}
}
import { ApiPropertyOptional } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { IsArray, IsNotEmpty, ValidateNested, IsString, IsIn, IsDefined, IsObject } from "class-validator"
class HistoryItemDto {
@IsDefined()
@IsString()
@IsNotEmpty()
@IsIn(['user', 'assistant'])
@ApiPropertyOptional({description: '角色 user assistant'})
role: number;
@IsDefined()
@IsString()
@IsNotEmpty()
@ApiPropertyOptional({description: '内容'})
content: string;
}
export class ChatQueryDto {
@IsArray()
@IsObject({ each: true })
@ValidateNested({each: true})
@Type(() => HistoryItemDto)
@ApiPropertyOptional({description: '聊天记录', type: [HistoryItemDto]})
public readonly history: HistoryItemDto[]
@IsNotEmpty()
@IsString()
@ApiPropertyOptional({description: '查询信息'})
public readonly query: string
}
import { ApiPropertyOptional } from '@nestjs/swagger';
import { IsArray, ArrayMinSize } from "class-validator"
export interface Message {
role: 'user' | 'admin'
content: string
}
export class sendMessageDto {
@IsArray({message: '消息数组必须是数组'})
@ArrayMinSize(1, {message: '消息数组长度最小为1'})
@ApiPropertyOptional({ description: '消息数组', example: [{ role: 'user', content: '你好' }] })
public readonly messages: Message[]
}
export type HistoryItemRole = 'user' | 'assistant'
export interface HistoryItem {
role: HistoryItemRole
content: string
}
export type History = HistoryItem[]
interface ErnieBotChatUsage {
prompt_tokens: number
completion_tokens: number
total_tokens: number
}
export interface ErnieBotChatResponse {
id: string
object: string
created: number
result: string
is_truncated: boolean
need_clear_history: boolean
finish_reason: string
usage: ErnieBotChatUsage
error_msg: string
}
export interface ErnieBotAccessToken {
refresh_token: string
expires_in: number
session_key: string
access_token: string
scope: string
session_secret: string
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment