Commit 9b76c374 by hometown

feat: chat api done

parent 6c68b8cf
{ {
// Visuals // Visuals
"workbench.colorTheme": "Vitesse Dark", "workbench.colorTheme": "Vitesse Light",
"workbench.editor.tabCloseButton": "left", "workbench.editor.tabCloseButton": "left",
"workbench.fontAliasing": "antialiased", "workbench.fontAliasing": "antialiased",
"workbench.iconTheme": "file-icons", "workbench.iconTheme": "file-icons",
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
"test:e2e": "jest --config ./test/jest-e2e.json" "test:e2e": "jest --config ./test/jest-e2e.json"
}, },
"dependencies": { "dependencies": {
"@nestjs/axios": "^3.0.1",
"@nestjs/common": "^7.5.5", "@nestjs/common": "^7.5.5",
"@nestjs/core": "^7.5.5", "@nestjs/core": "^7.5.5",
"@nestjs/graphql": "^7.9.1", "@nestjs/graphql": "^7.9.1",
...@@ -30,10 +31,11 @@ ...@@ -30,10 +31,11 @@
"@nestjs/swagger": "^4.7.5", "@nestjs/swagger": "^4.7.5",
"@nestjs/typeorm": "^7.1.5", "@nestjs/typeorm": "^7.1.5",
"apollo-server-express": "^2.19.0", "apollo-server-express": "^2.19.0",
"axios": "^1.6.2",
"bcrypt": "^5.0.0", "bcrypt": "^5.0.0",
"body-parser-xml": "^2.0.1", "body-parser-xml": "^2.0.1",
"class-transformer": "^0.3.1", "class-transformer": "^0.5.1",
"class-validator": "^0.12.2", "class-validator": "^0.14.0",
"dayjs": "^1.9.7", "dayjs": "^1.9.7",
"express-rate-limit": "^5.2.3", "express-rate-limit": "^5.2.3",
"graphql": "^15.4.0", "graphql": "^15.4.0",
......
...@@ -5,15 +5,18 @@ settings: ...@@ -5,15 +5,18 @@ settings:
excludeLinksFromLockfile: false excludeLinksFromLockfile: false
dependencies: 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': '@nestjs/common':
specifier: ^7.5.5 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': '@nestjs/core':
specifier: ^7.5.5 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) 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': '@nestjs/graphql':
specifier: ^7.9.1 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': '@nestjs/jwt':
specifier: ^7.2.0 specifier: ^7.2.0
version: 7.2.0(@nestjs/common@7.6.18) version: 7.2.0(@nestjs/common@7.6.18)
...@@ -25,13 +28,16 @@ dependencies: ...@@ -25,13 +28,16 @@ dependencies:
version: 7.6.18(@nestjs/common@7.6.18)(@nestjs/core@7.6.18) version: 7.6.18(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)
'@nestjs/swagger': '@nestjs/swagger':
specifier: ^4.7.5 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': '@nestjs/typeorm':
specifier: ^7.1.5 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) 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: apollo-server-express:
specifier: ^2.19.0 specifier: ^2.19.0
version: 2.26.2(graphql@15.8.0) version: 2.26.2(graphql@15.8.0)
axios:
specifier: ^1.6.2
version: 1.6.2
bcrypt: bcrypt:
specifier: ^5.0.0 specifier: ^5.0.0
version: 5.1.1 version: 5.1.1
...@@ -39,11 +45,11 @@ dependencies: ...@@ -39,11 +45,11 @@ dependencies:
specifier: ^2.0.1 specifier: ^2.0.1
version: 2.0.5 version: 2.0.5
class-transformer: class-transformer:
specifier: ^0.3.1 specifier: ^0.5.1
version: 0.3.2 version: 0.5.1
class-validator: class-validator:
specifier: ^0.12.2 specifier: ^0.14.0
version: 0.12.2 version: 0.14.0
dayjs: dayjs:
specifier: ^1.9.7 specifier: ^1.9.7
version: 1.11.10 version: 1.11.10
...@@ -1941,6 +1947,20 @@ packages: ...@@ -1941,6 +1947,20 @@ packages:
resolution: {integrity: sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==} resolution: {integrity: sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==}
dev: false 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): /@nestjs/cli@7.6.0(eslint@7.32.0):
resolution: {integrity: sha512-lW1px2gSHkRoBpKSxzP6IJNQscRKs97OAaVyV46OAP6oUR996E0EPkIslIaa16kKLJ3SFOUeZo5xl5nYbqp43g==} resolution: {integrity: sha512-lW1px2gSHkRoBpKSxzP6IJNQscRKs97OAaVyV46OAP6oUR996E0EPkIslIaa16kKLJ3SFOUeZo5xl5nYbqp43g==}
engines: {node: '>= 10.13.0', npm: '>= 6.11.0'} engines: {node: '>= 10.13.0', npm: '>= 6.11.0'}
...@@ -1976,7 +1996,7 @@ packages: ...@@ -1976,7 +1996,7 @@ packages:
- webpack-cli - webpack-cli
dev: true 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==} resolution: {integrity: sha512-BUJQHNhWzwWOkS4Ryndzd4HTeRObcAWV2Fh+ermyo3q3xYQQzNoEWclJVL/wZec8AONELwIJ+PSpWI53VP0leg==}
peerDependencies: peerDependencies:
cache-manager: '*' cache-manager: '*'
...@@ -1993,8 +2013,8 @@ packages: ...@@ -1993,8 +2013,8 @@ packages:
optional: true optional: true
dependencies: dependencies:
axios: 0.21.1 axios: 0.21.1
class-transformer: 0.3.2 class-transformer: 0.5.1
class-validator: 0.12.2 class-validator: 0.14.0
iterare: 1.2.1 iterare: 1.2.1
reflect-metadata: 0.1.14 reflect-metadata: 0.1.14
rxjs: 6.6.7 rxjs: 6.6.7
...@@ -2021,7 +2041,7 @@ packages: ...@@ -2021,7 +2041,7 @@ packages:
'@nestjs/websockets': '@nestjs/websockets':
optional: true optional: true
dependencies: 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) '@nestjs/platform-express': 7.6.18(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)
'@nuxtjs/opencollective': 0.3.2 '@nuxtjs/opencollective': 0.3.2
fast-safe-stringify: 2.0.7 fast-safe-stringify: 2.0.7
...@@ -2035,7 +2055,7 @@ packages: ...@@ -2035,7 +2055,7 @@ packages:
transitivePeerDependencies: transitivePeerDependencies:
- encoding - 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==} resolution: {integrity: sha512-ePvvAZkYFYPF+Ibax+Nuz5z7p4U6jXUqdxNsjI6m6DYwsAa8hzXhKA9bPhBs2FCrrAcEJ9KrmI2luJ/Lj0SHbg==}
peerDependencies: peerDependencies:
'@nestjs/common': ^7.0.0 '@nestjs/common': ^7.0.0
...@@ -2047,9 +2067,9 @@ packages: ...@@ -2047,9 +2067,9 @@ packages:
'@graphql-tools/merge': 6.2.14(graphql@15.8.0) '@graphql-tools/merge': 6.2.14(graphql@15.8.0)
'@graphql-tools/schema': 7.1.5(graphql@15.8.0) '@graphql-tools/schema': 7.1.5(graphql@15.8.0)
'@graphql-tools/utils': 7.10.0(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/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) apollo-server-core: 2.26.2(graphql@15.8.0)
chokidar: 3.5.2 chokidar: 3.5.2
fast-glob: 3.2.5 fast-glob: 3.2.5
...@@ -2079,12 +2099,12 @@ packages: ...@@ -2079,12 +2099,12 @@ packages:
peerDependencies: peerDependencies:
'@nestjs/common': ^6.0.0 || ^7.0.0 '@nestjs/common': ^6.0.0 || ^7.0.0
dependencies: 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 '@types/jsonwebtoken': 8.5.0
jsonwebtoken: 8.5.1 jsonwebtoken: 8.5.1
dev: false 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==} resolution: {integrity: sha512-JXrw2LMangSU3vnaXWXVX47GRG1FbbNh4aVBbidDjxT3zlghsoNQY6qyWtT001MCl8lJGo8I6i6+DurBRRxl/Q==}
peerDependencies: peerDependencies:
'@nestjs/common': ^7.0.8 '@nestjs/common': ^7.0.8
...@@ -2092,9 +2112,9 @@ packages: ...@@ -2092,9 +2112,9 @@ packages:
class-validator: ^0.11.1 || ^0.12.0 || ^0.13.0 class-validator: ^0.11.1 || ^0.12.0 || ^0.13.0
reflect-metadata: ^0.1.12 reflect-metadata: ^0.1.12
dependencies: 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)
class-transformer: 0.3.2 class-transformer: 0.5.1
class-validator: 0.12.2 class-validator: 0.14.0
reflect-metadata: 0.1.14 reflect-metadata: 0.1.14
dev: false dev: false
...@@ -2104,7 +2124,7 @@ packages: ...@@ -2104,7 +2124,7 @@ packages:
'@nestjs/common': ^6.0.0 || ^7.0.0 '@nestjs/common': ^6.0.0 || ^7.0.0
passport: ^0.4.0 passport: ^0.4.0
dependencies: 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 passport: 0.4.1
dev: false dev: false
...@@ -2114,7 +2134,7 @@ packages: ...@@ -2114,7 +2134,7 @@ packages:
'@nestjs/common': ^7.0.0 '@nestjs/common': ^7.0.0
'@nestjs/core': ^7.0.0 '@nestjs/core': ^7.0.0
dependencies: 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/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 body-parser: 1.19.0
cors: 2.8.5 cors: 2.8.5
...@@ -2150,7 +2170,7 @@ packages: ...@@ -2150,7 +2170,7 @@ packages:
typescript: 4.9.5 typescript: 4.9.5
dev: true 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==} resolution: {integrity: sha512-RSUwcVxrzXF7/b/IZ5lXnYHJ6jIGS9wWRTJKIt1kIaCNWT+0wRfTlAyhQkzs2g35/PTXJEcdIwwY7mBO/bwHzw==}
peerDependencies: peerDependencies:
'@nestjs/common': ^6.8.0 || ^7.0.0 '@nestjs/common': ^6.8.0 || ^7.0.0
...@@ -2164,9 +2184,9 @@ packages: ...@@ -2164,9 +2184,9 @@ packages:
swagger-ui-express: swagger-ui-express:
optional: true optional: true
dependencies: 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/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 lodash: 4.17.21
path-to-regexp: 3.2.0 path-to-regexp: 3.2.0
reflect-metadata: 0.1.14 reflect-metadata: 0.1.14
...@@ -2190,7 +2210,7 @@ packages: ...@@ -2190,7 +2210,7 @@ packages:
optional: true optional: true
dependencies: dependencies:
optional: 0.1.4 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/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) '@nestjs/platform-express': 7.6.18(@nestjs/common@7.6.18)(@nestjs/core@7.6.18)
tslib: 2.2.0 tslib: 2.2.0
...@@ -2205,7 +2225,7 @@ packages: ...@@ -2205,7 +2225,7 @@ packages:
rxjs: ^6.0.0 rxjs: ^6.0.0
typeorm: ^0.2.7 typeorm: ^0.2.7
dependencies: 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/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 reflect-metadata: 0.1.14
rxjs: 6.6.7 rxjs: 6.6.7
...@@ -2646,8 +2666,8 @@ packages: ...@@ -2646,8 +2666,8 @@ packages:
'@types/superagent': 4.1.24 '@types/superagent': 4.1.24
dev: true dev: true
/@types/validator@13.0.0: /@types/validator@13.11.7:
resolution: {integrity: sha512-WAy5txG7aFX8Vw3sloEKp5p/t/Xt8jD3GRD9DacnFv6Vo8ubudAsRTXgxpQwU0mpzY/H8U4db3roDuCMjShBmw==} resolution: {integrity: sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q==}
/@types/websocket@1.0.2: /@types/websocket@1.0.2:
resolution: {integrity: sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ==} resolution: {integrity: sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ==}
...@@ -3759,6 +3779,16 @@ packages: ...@@ -3759,6 +3779,16 @@ packages:
transitivePeerDependencies: transitivePeerDependencies:
- debug - 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): /babel-jest@26.6.3(@babel/core@7.23.6):
resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==}
engines: {node: '>= 10.14.2'} engines: {node: '>= 10.14.2'}
...@@ -4265,9 +4295,8 @@ packages: ...@@ -4265,9 +4295,8 @@ packages:
resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==} resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==}
dev: true dev: true
/class-transformer@0.3.2: /class-transformer@0.5.1:
resolution: {integrity: sha512-9QY6QXBH/+Gt1C3HBmJCrgY6+EFpIa6aLjfDnlXFx0zQl/HjrCE7qoaI0srNrxpMIfsobCpgUdDG5JYtJOpVsw==} resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==}
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-utils@0.3.6: /class-utils@0.3.6:
resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
...@@ -4279,13 +4308,12 @@ packages: ...@@ -4279,13 +4308,12 @@ packages:
static-extend: 0.1.2 static-extend: 0.1.2
dev: true dev: true
/class-validator@0.12.2: /class-validator@0.14.0:
resolution: {integrity: sha512-TDzPzp8BmpsbPhQpccB3jMUE/3pK0TyqamrK0kcx+ZeFytMA+O6q87JZZGObHHnoo9GM8vl/JppIyKWeEA/EVw==} resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==}
dependencies: dependencies:
'@types/validator': 13.0.0 '@types/validator': 13.11.7
google-libphonenumber: 3.2.33 libphonenumber-js: 1.10.52
tslib: 2.6.2 validator: 13.11.0
validator: 13.0.0
/clean-stack@2.2.0: /clean-stack@2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
...@@ -5888,10 +5916,6 @@ packages: ...@@ -5888,10 +5916,6 @@ packages:
merge2: 1.4.1 merge2: 1.4.1
slash: 3.0.0 slash: 3.0.0
/google-libphonenumber@3.2.33:
resolution: {integrity: sha512-1QKCvAlfq8zY1mviORI9lDzM3I/hwm9+h0CwYBTLq59DBbSHMd5zBOLqHZFiBLicRpwIz46Nynvbywj1XApKvA==}
engines: {node: '>=0.10'}
/gopd@1.0.1: /gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
dependencies: dependencies:
...@@ -7380,6 +7404,9 @@ packages: ...@@ -7380,6 +7404,9 @@ packages:
type-check: 0.4.0 type-check: 0.4.0
dev: true dev: true
/libphonenumber-js@1.10.52:
resolution: {integrity: sha512-6vCuCHgem+OW1/VCAKgkasfegItCea8zIT7s9/CG/QxdCMIM7GfzbEBG5d7lGO3rzipjt5woOQL3DiHa8Fy78Q==}
/lines-and-columns@1.2.4: /lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
dev: true dev: true
...@@ -7875,7 +7902,7 @@ packages: ...@@ -7875,7 +7902,7 @@ packages:
peerDependencies: peerDependencies:
'@nestjs/common': ^5.1.0 || ^6.0.3 || ^7.0.1 || ^8.0.0 || ^9.0.0 || ^10.0.0 '@nestjs/common': ^5.1.0 || ^6.0.3 || ^7.0.1 || ^8.0.0 || ^9.0.0 || ^10.0.0
dependencies: 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 '@types/node': 16.18.68
dotenv: 10.0.0 dotenv: 10.0.0
glob: 7.2.3 glob: 7.2.3
...@@ -8461,6 +8488,10 @@ packages: ...@@ -8461,6 +8488,10 @@ packages:
forwarded: 0.2.0 forwarded: 0.2.0
ipaddr.js: 1.9.1 ipaddr.js: 1.9.1
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
dev: false
/prr@1.0.1: /prr@1.0.1:
resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
dev: true dev: true
...@@ -9845,6 +9876,7 @@ packages: ...@@ -9845,6 +9876,7 @@ packages:
/tslib@2.6.2: /tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
dev: false
/tsutils@3.21.0(typescript@4.9.5): /tsutils@3.21.0(typescript@4.9.5):
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
...@@ -10188,8 +10220,8 @@ packages: ...@@ -10188,8 +10220,8 @@ packages:
spdx-expression-parse: 3.0.1 spdx-expression-parse: 3.0.1
dev: true dev: true
/validator@13.0.0: /validator@13.11.0:
resolution: {integrity: sha512-anYx5fURbgF04lQV18nEQWZ/3wHGnxiKdG4aL8J+jEDsm98n/sU/bey+tYk6tnGJzm7ioh5FoqrAiQ6m03IgaA==} resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
/value-or-promise@1.0.11: /value-or-promise@1.0.11:
......
import { ArgumentMetadata, HttpException, HttpStatus, Injectable, PipeTransform, Type, } from '@nestjs/common'; import { ArgumentMetadata, HttpException, HttpStatus, Injectable, PipeTransform, Type, } from '@nestjs/common';
import { plainToClass } from 'class-transformer'; 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() @Injectable()
export class ValidationPipe implements PipeTransform<any> { export class ValidationPipe implements PipeTransform<any> {
...@@ -10,17 +27,9 @@ export class ValidationPipe implements PipeTransform<any> { ...@@ -10,17 +27,9 @@ export class ValidationPipe implements PipeTransform<any> {
const object = plainToClass(metatype, value); const object = plainToClass(metatype, value);
const errors = await validate(object); const errors = await validate(object);
if (errors.length > 0) { if (errors.length > 0) {
// const errObj = {}; const errorObj = formatErrors(errors)
// errors.forEach(err => {
// const {
// property,
// constraints,
// } = err;
// errObj[property] = Object.values(constraints);
// });
const errObj = Object.values(errors[0].constraints)[0];
throw new HttpException( throw new HttpException(
{ message: '请求参数验证失败 ', error: errObj }, { message: '请求参数验证失败 ', error: errorObj },
HttpStatus.BAD_REQUEST, HttpStatus.BAD_REQUEST,
); );
} }
......
...@@ -4,11 +4,11 @@ import { map } from 'rxjs/operators'; ...@@ -4,11 +4,11 @@ import { map } from 'rxjs/operators';
import { classToPlain } from 'class-transformer'; import { classToPlain } from 'class-transformer';
import systemConfig from "../config/system"; 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 const { returnFormat } = systemConfig
return { return {
[returnFormat.result]: classToPlain(result), [returnFormat.result]: classToPlain(result),
[returnFormat.code]: code, [returnFormat.code]: code || 200,
[returnFormat.message]: message, [returnFormat.message]: message,
[returnFormat.ok]: ok, [returnFormat.ok]: ok,
} }
......
import { ChatService } from './chat.service'; import { ChatService } from './chat.service';
import { Body, Controller, HttpException, HttpStatus, Post, Req } from '@nestjs/common'; import { Body, Controller, HttpException, HttpStatus, Post, Req } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger'; import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { sendMessageDto } from './dto/sendMessage.dto'; import { ChatQueryDto } from './dto/chatQuery.dto';
@ApiTags('chat') @ApiTags('chat')
@Controller('chat') @Controller('chat')
export class ChatController { export class ChatController {
constructor(private readonly chatService: ChatService) {} constructor(private readonly chatService: ChatService) {}
@ApiOperation({ summary: '发送消息', description: '向ERNIE Bot模型发送消息得到答案' }) @ApiOperation({ summary: '查询答案', description: '向ERNIE Bot模型发送消息得到答案' })
@Post('sendMessage') @Post('query')
sendMessage(@Body() body: sendMessageDto) { query(@Body() body: ChatQueryDto) {
try { try {
return this.chatService.sendMessage(body.messages) return this.chatService.query(body)
} catch (error) { } catch (error) {
new HttpException({ message: '服务端错误 ', error: error }, HttpStatus.BAD_REQUEST) new HttpException({ message: '服务端错误 ', error: error }, HttpStatus.BAD_REQUEST)
} }
......
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { HttpModule } from '@nestjs/axios';
import { ChatController } from './chat.controller'; import { ChatController } from './chat.controller';
import { ChatService } from './chat.service';; import { ChatService } from './chat.service';;
@Module({ @Module({
imports: [HttpModule],
controllers: [ChatController], controllers: [ChatController],
providers: [ChatService], providers: [ChatService],
}) })
......
import { Injectable } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import type { Message } from './dto/sendMessage.dto'; import axios from 'axios';
import type { ErnieBotAccessToken, ErnieBotChatResponse } from './types';
import { ChatQueryDto } from './dto/chatQuery.dto';
@Injectable() @Injectable()
export class ChatService { export class ChatService {
sendMessage(messages: Message[]) { async query(body: ChatQueryDto) {
return messages 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