Compare commits
10 Commits
e5d939e730
...
990c69ea75
| Author | SHA1 | Date |
|---|---|---|
|
|
990c69ea75 | |
|
|
c775a59571 | |
|
|
3a29108da1 | |
|
|
7252bc3573 | |
|
|
8aa7b00949 | |
|
|
a4328d5fef | |
|
|
8f99ab6893 | |
|
|
3c0286fead | |
|
|
2902d63702 | |
|
|
a9d099bb17 |
4
.env
|
|
@ -12,7 +12,7 @@ SERVER_HOST = 0.0.0.0
|
|||
# 服务域名
|
||||
SERVER_URL = http://127.0.0.1
|
||||
# 接口地址
|
||||
SERVER_OPENAPI_URL = /api
|
||||
SERVER_OPENAPI_URL = /api/openapi
|
||||
|
||||
# ========================================================================================
|
||||
# 数据库配置
|
||||
|
|
@ -20,7 +20,7 @@ SERVER_OPENAPI_URL = /api
|
|||
# 数据库类型
|
||||
DB_TYPE = sqlite
|
||||
# sqlite数据库地址
|
||||
DB_SQLITE_PATH = ./content/database/db.sqlite
|
||||
DB_SQLITE_PATH = ./content/data/db.sqlite
|
||||
# mysql数据库地址
|
||||
DB_MYSQL_HOST = 127.0.0.1
|
||||
# mysql数据库端口
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
version: '3'
|
||||
|
||||
services:
|
||||
server:
|
||||
image: git.dev.juetan.cn/juetan/server:latest
|
||||
networks:
|
||||
- public
|
||||
deploy:
|
||||
mode: replicated
|
||||
replicas: 1
|
||||
placement:
|
||||
constraints: [node.role == manager]
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.nest.rule=Host(`nest.dev.juetan.cn`) && PathPrefix(`/api`, `/upload`)
|
||||
- traefik.http.routers.nest.entrypoints=websecure
|
||||
- traefik.http.routers.nest.tls=true
|
||||
- traefik.http.routers.nest.tls.certresolver=acmer
|
||||
- traefik.http.services.nest1.loadbalancer.server.port=3030
|
||||
|
||||
web:
|
||||
image: git.dev.juetan.cn/juetan/web:latest
|
||||
networks:
|
||||
- public
|
||||
deploy:
|
||||
mode: replicated
|
||||
replicas: 1
|
||||
placement:
|
||||
constraints: [node.role == manager]
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.vue.rule=Host(`nest.dev.juetan.cn`)
|
||||
- traefik.http.routers.vue.entrypoints=websecure
|
||||
- traefik.http.routers.vue.tls=true
|
||||
- traefik.http.routers.vue.tls.certresolver=acmer
|
||||
- traefik.http.services.vue1.loadbalancer.server.port=80
|
||||
|
||||
networks:
|
||||
public:
|
||||
external: true
|
||||
|
|
@ -10,14 +10,14 @@ on:
|
|||
- README.md
|
||||
|
||||
env:
|
||||
docker_host: ${{ secrets.DOCKER_REGISTRY }}
|
||||
docker_name: ${{ secrets.DOCKER_REGISTRY }}/${{ gitea.repository }}
|
||||
docker_user: ${{ secrets.DOCKER_USERNAME }}
|
||||
docker_pass: ${{ secrets.DOCKER_PASSWORD }}
|
||||
deploy_host: ${{ secrets.DEPLOY_HOSTNAME }}
|
||||
docker_host: ${{ secrets.DOCKER_HOST }}
|
||||
docker_name: ${{ secrets.DOCKER_HOST }}/${{ gitea.repository }}
|
||||
docker_user: ${{ secrets.DOCKER_USER }}
|
||||
docker_pass: ${{ secrets.DOCKER_PASS }}
|
||||
deploy_host: ${{ secrets.DEPLOY_HOST }}
|
||||
deploy_port: ${{ secrets.DEPLOY_PORT }}
|
||||
deploy_user: ${{ secrets.DEPLOY_USERNAME }}
|
||||
deploy_pass: ${{ secrets.DEPLOY_PASSWORD }}
|
||||
deploy_user: ${{ secrets.DEPLOY_USER }}
|
||||
deploy_pass: ${{ secrets.DEPLOY_PASS }}
|
||||
deploy_name: demo_server
|
||||
|
||||
jobs:
|
||||
|
|
@ -28,7 +28,7 @@ jobs:
|
|||
steps:
|
||||
- name: 检出代码
|
||||
id: checkout
|
||||
uses: https://git.dev.juetan.cn/mirror/checkout@v3
|
||||
uses: https://git.app.juetan.cn/mirror/checkout@v3
|
||||
|
||||
- name: 构建镜像
|
||||
run: |
|
||||
|
|
@ -44,7 +44,8 @@ jobs:
|
|||
docker push ${{ env.docker_name }}:latest
|
||||
|
||||
- name: 更新服务
|
||||
uses: https://git.dev.juetan.cn/mirror/ssh-action@v1.0.0
|
||||
uses: https://git.app.juetan.cn/mirror/ssh-action@v1.0.0
|
||||
if: false
|
||||
with:
|
||||
host: ${{ env.deploy_host }}
|
||||
port: ${{ env.deploy_port }}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,11 @@
|
|||
- .dockerignore 配置哪些文件应该被忽略掉
|
||||
- .gitea/workflows/depoy.yaml 流水线任务的配置文件,语法上与 Github Actions 一致
|
||||
|
||||
## 笔记
|
||||
|
||||
- createUserDto与User分开
|
||||
- 涉及关系时,先用 service 查出有效关系,避免存储不存在的关联ID
|
||||
|
||||
## 最后
|
||||
|
||||
如果你在使用过程中遇到问题,欢迎在 Issue 中提问。
|
||||
|
After Width: | Height: | Size: 239 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
|
@ -0,0 +1,100 @@
|
|||
2023/10/11 14:07:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 33.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 7.9ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 9.6ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:41 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 47.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:41 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:41 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 38.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:41 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 10.4ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:41 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 10.8ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed GET /v2/ for 10.0.0.2:0, 401 Unauthorized in 0.1ms @ container/container.go:118(container.ReqContainerAccess)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed GET /v2/token?account=juetan&client_id=docker&offline_token=true&service=container_registry for 10.0.0.2:0, 200 OK in 54.9ms @ container/container.go:142(container.Authenticate)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed GET /v2/ for 10.0.0.2:0, 200 OK in 0.7ms @ container/container.go:134(container.DetermineSupport)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 49.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:42 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 45.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 8.6ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 10.8ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:43 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 60.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:43 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:43 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 47.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:43 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 55.8ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:43 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 23.3ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 10.6ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 85.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 67.5ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:44 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 37.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 162.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 83.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 9.1ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 98.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 10.2ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 25.4ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:46 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 48.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 27.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 44.7ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:48 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:50 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 24.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:52 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 30.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:54 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:56 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:58 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:00 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:01 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 8.0ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:08:01 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 9.5ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:08:02 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:04 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:06 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 33.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:08 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 27.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:10 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:12 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 28.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:14 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 25.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:16 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:18 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:20 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:22 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:24 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:26 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 36.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:28 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:30 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 24.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:32 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:34 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:36 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:38 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 24.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:48 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:50 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:52 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:54 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:56 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 29.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:58 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 24.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:00 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:02 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:04 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:06 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:08 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:10 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 29.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:12 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:14 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:16 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:18 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:20 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:22 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:24 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:26 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:28 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:30 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 42.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:32 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:34 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:36 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 29.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:38 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
2023/10/11 14:07:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 33.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 7.9ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 9.6ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:41 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 47.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:41 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:41 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 38.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:41 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 10.4ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:41 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 10.8ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed GET /v2/ for 10.0.0.2:0, 401 Unauthorized in 0.1ms @ container/container.go:118(container.ReqContainerAccess)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed GET /v2/token?account=juetan&client_id=docker&offline_token=true&service=container_registry for 10.0.0.2:0, 200 OK in 54.9ms @ container/container.go:142(container.Authenticate)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed GET /v2/ for 10.0.0.2:0, 200 OK in 0.7ms @ container/container.go:134(container.DetermineSupport)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 49.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:42 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 45.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 8.6ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 10.8ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:43 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 60.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:43 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:43 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 47.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:43 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 55.8ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:43 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 23.3ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 10.6ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 85.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 67.5ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:44 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 37.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 162.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 83.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 9.1ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 98.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 10.2ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateLog for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 25.4ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:07:46 ...ons/runner/runner.go:148:UpdateTask() [W] Failed to find the sent outputs of task 10: no such table: action_task_output
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/UpdateTask for 10.0.0.2:0, 200 OK in 48.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 27.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 44.7ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:07:48 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:50 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 24.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:52 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 30.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:54 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:56 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:07:58 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:00 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:01 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/artifacts for 10.0.0.2:0, 200 OK in 8.0ms @ actions/view.go:435(actions.ArtifactsView)
|
||||
2023/10/11 14:08:01 ...eb/routing/logger.go:102:func1() [I] router: completed POST /juetan/adweb/actions/runs/5/jobs/0 for 10.0.0.2:0, 200 OK in 9.5ms @ actions/view.go:121(actions.ViewPost)
|
||||
2023/10/11 14:08:02 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:04 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:06 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 33.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:08 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 27.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:10 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:12 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 28.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:14 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 25.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:16 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:18 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:20 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:22 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:24 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:26 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 36.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:28 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:30 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 24.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:32 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:34 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.7ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:36 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:38 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 24.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:48 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:50 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:52 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:54 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:56 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 29.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:08:58 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 24.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:00 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:02 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:04 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.1ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:06 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:08 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:10 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 29.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:12 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.6ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:14 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 19.8ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:16 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:18 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:20 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:22 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:24 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:26 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:28 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 22.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:30 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 42.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:32 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.0ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:34 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:36 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 29.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:38 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.9ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:40 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.5ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:42 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 20.4ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:44 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 23.3ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
2023/10/11 14:09:46 ...eb/routing/logger.go:102:func1() [I] router: completed POST /api/actions/runner.v1.RunnerService/FetchTask for 10.0.0.2:0, 200 OK in 21.2ms @ <autogenerated>:1(http.Handler.ServeHTTP-fm)
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 239 KiB |
|
After Width: | Height: | Size: 239 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 239 KiB |
46
package.json
|
|
@ -7,8 +7,10 @@
|
|||
"license": "UNLICENSED",
|
||||
"scripts": {
|
||||
"prebuild": "rimraf dist",
|
||||
"dev": "nest start --watch",
|
||||
"build": "nest build",
|
||||
"nest:dev": "nest start --watch",
|
||||
"dev": "nest build --webpack --webpackPath webpack.config.js --watch",
|
||||
"build": "nest build --webpack --webpackPath webpack.config.js",
|
||||
"nest:build": "nest build",
|
||||
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
||||
"start": "nest start",
|
||||
"start:dev": "nest start --watch",
|
||||
|
|
@ -25,37 +27,37 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@nestjs/axios": "^3.0.0",
|
||||
"@nestjs/cache-manager": "^2.1.0",
|
||||
"@nestjs/common": "^9.4.3",
|
||||
"@nestjs/config": "^2.3.4",
|
||||
"@nestjs/core": "^9.4.3",
|
||||
"@nestjs/jwt": "^10.1.1",
|
||||
"@nestjs/platform-express": "^9.4.3",
|
||||
"@nestjs/serve-static": "^3.0.1",
|
||||
"@nestjs/swagger": "^6.3.0",
|
||||
"@nestjs/typeorm": "^9.0.1",
|
||||
"@nestjs/config": "^2.3.4",
|
||||
"@nestjs/jwt": "^10.1.1",
|
||||
"@nestjs/platform-express": "^9.4.3",
|
||||
"@nestjs/cache-manager": "^2.1.0",
|
||||
"axios": "^1.5.0",
|
||||
"class-transformer": "^0.5.1",
|
||||
"class-validator": "^0.14.0",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"rimraf": "^3.0.2",
|
||||
"dayjs": "^1.11.9",
|
||||
"dotenv": "^16.3.1",
|
||||
"rxjs": "^7.8.1",
|
||||
"typeorm": "^0.3.17",
|
||||
"typeorm-naming-strategies": "^4.1.0",
|
||||
"ua-parser-js": "^1.0.36",
|
||||
"uuid": "^9.0.1",
|
||||
"nodemailer": "^6.9.5",
|
||||
"mysql2": "^3.6.1",
|
||||
"cache-manager": "^5.2.3",
|
||||
"cache-manager-redis-store": "^3.0.1",
|
||||
"class-transformer": "^0.5.1",
|
||||
"class-validator": "^0.14.0",
|
||||
"dayjs": "^1.11.9",
|
||||
"dotenv": "^16.3.1",
|
||||
"lodash": "^4.17.21",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mockjs": "^1.1.0",
|
||||
"multer": "1.4.5-lts.1",
|
||||
"mysql2": "^3.6.1",
|
||||
"nodemailer": "^6.9.5",
|
||||
"redis": "^4.6.8",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"rimraf": "^3.0.2",
|
||||
"rxjs": "^7.8.1",
|
||||
"sqlite3": "^5.1.6",
|
||||
"typeorm": "^0.3.17",
|
||||
"typeorm-naming-strategies": "^4.1.0",
|
||||
"ua-parser-js": "^1.0.36",
|
||||
"uuid": "^9.0.1",
|
||||
"winston": "^3.10.0",
|
||||
"winston-daily-rotate-file": "^4.7.1"
|
||||
},
|
||||
|
|
@ -81,6 +83,7 @@
|
|||
"jest": "28.1.2",
|
||||
"plop": "^3.1.2",
|
||||
"prettier": "^2.8.8",
|
||||
"run-script-webpack-plugin": "^0.2.0",
|
||||
"source-map-support": "^0.5.21",
|
||||
"supertest": "^6.3.3",
|
||||
"ts-jest": "28.0.5",
|
||||
|
|
@ -88,7 +91,8 @@
|
|||
"ts-node": "^10.9.1",
|
||||
"tsconfig-paths": "4.0.0",
|
||||
"typescript": "^4.9.5",
|
||||
"webpack": "^5.88.2"
|
||||
"webpack": "^5.88.2",
|
||||
"webpack-node-externals": "^3.0.0"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
|
|
@ -107,4 +111,4 @@
|
|||
"coverageDirectory": "../coverage",
|
||||
"testEnvironment": "node"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
146
pnpm-lock.yaml
|
|
@ -4,6 +4,9 @@ dependencies:
|
|||
'@nestjs/axios':
|
||||
specifier: ^3.0.0
|
||||
version: 3.0.0(@nestjs/common@9.4.3)(axios@1.5.0)(reflect-metadata@0.1.13)(rxjs@7.8.1)
|
||||
'@nestjs/cache-manager':
|
||||
specifier: ^2.1.0
|
||||
version: 2.1.0(@nestjs/common@9.4.3)(@nestjs/core@9.4.3)(cache-manager@5.2.3)(reflect-metadata@0.1.13)(rxjs@7.8.1)
|
||||
'@nestjs/common':
|
||||
specifier: ^9.4.3
|
||||
version: 9.4.3(cache-manager@5.2.3)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1)
|
||||
|
|
@ -31,6 +34,12 @@ dependencies:
|
|||
axios:
|
||||
specifier: ^1.5.0
|
||||
version: 1.5.0
|
||||
cache-manager:
|
||||
specifier: ^5.2.3
|
||||
version: 5.2.3
|
||||
cache-manager-redis-store:
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1
|
||||
class-transformer:
|
||||
specifier: ^0.5.1
|
||||
version: 0.5.1
|
||||
|
|
@ -43,12 +52,27 @@ dependencies:
|
|||
dotenv:
|
||||
specifier: ^16.3.1
|
||||
version: 16.3.1
|
||||
lodash:
|
||||
specifier: ^4.17.21
|
||||
version: 4.17.21
|
||||
lodash-es:
|
||||
specifier: ^4.17.21
|
||||
version: 4.17.21
|
||||
mockjs:
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0
|
||||
multer:
|
||||
specifier: 1.4.5-lts.1
|
||||
version: 1.4.5-lts.1
|
||||
mysql2:
|
||||
specifier: ^3.6.1
|
||||
version: 3.6.1
|
||||
nodemailer:
|
||||
specifier: ^6.9.5
|
||||
version: 6.9.5
|
||||
redis:
|
||||
specifier: ^4.6.8
|
||||
version: 4.6.8
|
||||
reflect-metadata:
|
||||
specifier: ^0.1.13
|
||||
version: 0.1.13
|
||||
|
|
@ -58,6 +82,9 @@ dependencies:
|
|||
rxjs:
|
||||
specifier: ^7.8.1
|
||||
version: 7.8.1
|
||||
sqlite3:
|
||||
specifier: ^5.1.6
|
||||
version: 5.1.6
|
||||
typeorm:
|
||||
specifier: ^0.3.17
|
||||
version: 0.3.17(mysql2@3.6.1)(redis@4.6.8)(sqlite3@5.1.6)(ts-node@10.9.1)
|
||||
|
|
@ -78,9 +105,6 @@ dependencies:
|
|||
version: 4.7.1(winston@3.10.0)
|
||||
|
||||
devDependencies:
|
||||
'@nestjs/cache-manager':
|
||||
specifier: ^2.1.0
|
||||
version: 2.1.0(@nestjs/common@9.4.3)(@nestjs/core@9.4.3)(cache-manager@5.2.3)(reflect-metadata@0.1.13)(rxjs@7.8.1)
|
||||
'@nestjs/cli':
|
||||
specifier: ^9.5.0
|
||||
version: 9.5.0
|
||||
|
|
@ -126,12 +150,6 @@ devDependencies:
|
|||
'@typescript-eslint/parser':
|
||||
specifier: ^5.62.0
|
||||
version: 5.62.0(eslint@8.49.0)(typescript@4.9.5)
|
||||
cache-manager:
|
||||
specifier: ^5.2.3
|
||||
version: 5.2.3
|
||||
cache-manager-redis-store:
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1
|
||||
eslint:
|
||||
specifier: ^8.49.0
|
||||
version: 8.49.0
|
||||
|
|
@ -144,33 +162,18 @@ devDependencies:
|
|||
jest:
|
||||
specifier: 28.1.2
|
||||
version: 28.1.2(@types/node@16.18.50)(ts-node@10.9.1)
|
||||
lodash:
|
||||
specifier: ^4.17.21
|
||||
version: 4.17.21
|
||||
lodash-es:
|
||||
specifier: ^4.17.21
|
||||
version: 4.17.21
|
||||
mockjs:
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0
|
||||
multer:
|
||||
specifier: 1.4.5-lts.1
|
||||
version: 1.4.5-lts.1
|
||||
plop:
|
||||
specifier: ^3.1.2
|
||||
version: 3.1.2
|
||||
prettier:
|
||||
specifier: ^2.8.8
|
||||
version: 2.8.8
|
||||
redis:
|
||||
specifier: ^4.6.8
|
||||
version: 4.6.8
|
||||
run-script-webpack-plugin:
|
||||
specifier: ^0.2.0
|
||||
version: 0.2.0
|
||||
source-map-support:
|
||||
specifier: ^0.5.21
|
||||
version: 0.5.21
|
||||
sqlite3:
|
||||
specifier: ^5.1.6
|
||||
version: 5.1.6
|
||||
supertest:
|
||||
specifier: ^6.3.3
|
||||
version: 6.3.3
|
||||
|
|
@ -192,6 +195,9 @@ devDependencies:
|
|||
webpack:
|
||||
specifier: ^5.88.2
|
||||
version: 5.88.2
|
||||
webpack-node-externals:
|
||||
specifier: ^3.0.0
|
||||
version: 3.0.0
|
||||
|
||||
packages:
|
||||
|
||||
|
|
@ -666,6 +672,7 @@ packages:
|
|||
|
||||
/@gar/promisify@1.1.3:
|
||||
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@humanwhocodes/config-array@0.11.11:
|
||||
|
|
@ -979,6 +986,7 @@ packages:
|
|||
transitivePeerDependencies:
|
||||
- encoding
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@nestjs/axios@3.0.0(@nestjs/common@9.4.3)(axios@1.5.0)(reflect-metadata@0.1.13)(rxjs@7.8.1):
|
||||
resolution: {integrity: sha512-ULdH03jDWkS5dy9X69XbUVbhC+0pVnrRcj7bIK/ytTZ76w7CgvTZDJqsIyisg3kNOiljRW/4NIjSf3j6YGvl+g==}
|
||||
|
|
@ -1008,7 +1016,7 @@ packages:
|
|||
cache-manager: 5.2.3
|
||||
reflect-metadata: 0.1.13
|
||||
rxjs: 7.8.1
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/@nestjs/cli@9.5.0:
|
||||
resolution: {integrity: sha512-Z7q+3vNsQSG2d2r2Hl/OOj5EpfjVx3OfnJ9+KuAsOdw1sKLm7+Zc6KbhMFTd/eIvfx82ww3Nk72xdmfPYCulWA==}
|
||||
|
|
@ -1301,6 +1309,7 @@ packages:
|
|||
dependencies:
|
||||
'@gar/promisify': 1.1.3
|
||||
semver: 7.5.4
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@npmcli/move-file@1.1.2:
|
||||
|
|
@ -1310,6 +1319,7 @@ packages:
|
|||
dependencies:
|
||||
mkdirp: 1.0.4
|
||||
rimraf: 3.0.2
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@nuxtjs/opencollective@0.3.2:
|
||||
|
|
@ -1329,6 +1339,7 @@ packages:
|
|||
'@redis/client': ^1.0.0
|
||||
dependencies:
|
||||
'@redis/client': 1.5.9
|
||||
dev: false
|
||||
|
||||
/@redis/client@1.5.9:
|
||||
resolution: {integrity: sha512-SffgN+P1zdWJWSXBvJeynvEnmnZrYmtKSRW00xl8pOPFOMJjxRR9u0frSxJpPR6Y4V+k54blJjGW7FgxbTI7bQ==}
|
||||
|
|
@ -1337,6 +1348,7 @@ packages:
|
|||
cluster-key-slot: 1.1.2
|
||||
generic-pool: 3.9.0
|
||||
yallist: 4.0.0
|
||||
dev: false
|
||||
|
||||
/@redis/graph@1.1.0(@redis/client@1.5.9):
|
||||
resolution: {integrity: sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==}
|
||||
|
|
@ -1344,6 +1356,7 @@ packages:
|
|||
'@redis/client': ^1.0.0
|
||||
dependencies:
|
||||
'@redis/client': 1.5.9
|
||||
dev: false
|
||||
|
||||
/@redis/json@1.0.4(@redis/client@1.5.9):
|
||||
resolution: {integrity: sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==}
|
||||
|
|
@ -1351,6 +1364,7 @@ packages:
|
|||
'@redis/client': ^1.0.0
|
||||
dependencies:
|
||||
'@redis/client': 1.5.9
|
||||
dev: false
|
||||
|
||||
/@redis/search@1.1.3(@redis/client@1.5.9):
|
||||
resolution: {integrity: sha512-4Dg1JjvCevdiCBTZqjhKkGoC5/BcB7k9j99kdMnaXFXg8x4eyOIVg9487CMv7/BUVkFLZCaIh8ead9mU15DNng==}
|
||||
|
|
@ -1358,6 +1372,7 @@ packages:
|
|||
'@redis/client': ^1.0.0
|
||||
dependencies:
|
||||
'@redis/client': 1.5.9
|
||||
dev: false
|
||||
|
||||
/@redis/time-series@1.0.5(@redis/client@1.5.9):
|
||||
resolution: {integrity: sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==}
|
||||
|
|
@ -1365,6 +1380,7 @@ packages:
|
|||
'@redis/client': ^1.0.0
|
||||
dependencies:
|
||||
'@redis/client': 1.5.9
|
||||
dev: false
|
||||
|
||||
/@sinclair/typebox@0.24.51:
|
||||
resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==}
|
||||
|
|
@ -1389,6 +1405,7 @@ packages:
|
|||
/@tootallnate/once@1.1.2:
|
||||
resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==}
|
||||
engines: {node: '>= 6'}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@tsconfig/node10@1.0.9:
|
||||
|
|
@ -1908,6 +1925,7 @@ packages:
|
|||
|
||||
/abbrev@1.1.1:
|
||||
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
|
||||
dev: false
|
||||
|
||||
/accepts@1.3.8:
|
||||
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
|
||||
|
|
@ -1948,12 +1966,14 @@ packages:
|
|||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/agentkeepalive@4.5.0:
|
||||
resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
|
||||
engines: {node: '>= 8.0.0'}
|
||||
dependencies:
|
||||
humanize-ms: 1.2.1
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/aggregate-error@3.1.0:
|
||||
|
|
@ -2059,6 +2079,7 @@ packages:
|
|||
|
||||
/aproba@2.0.0:
|
||||
resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
|
||||
dev: false
|
||||
|
||||
/are-we-there-yet@2.0.0:
|
||||
resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
|
||||
|
|
@ -2066,6 +2087,7 @@ packages:
|
|||
dependencies:
|
||||
delegates: 1.0.0
|
||||
readable-stream: 3.6.2
|
||||
dev: false
|
||||
|
||||
/are-we-there-yet@3.0.1:
|
||||
resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
|
||||
|
|
@ -2073,6 +2095,7 @@ packages:
|
|||
dependencies:
|
||||
delegates: 1.0.0
|
||||
readable-stream: 3.6.2
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/arg@4.1.3:
|
||||
|
|
@ -2359,6 +2382,7 @@ packages:
|
|||
unique-filename: 1.1.1
|
||||
transitivePeerDependencies:
|
||||
- bluebird
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/cache-manager-redis-store@3.0.1:
|
||||
|
|
@ -2366,7 +2390,7 @@ packages:
|
|||
engines: {node: '>= 16.18.0'}
|
||||
dependencies:
|
||||
redis: 4.6.8
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/cache-manager@5.2.3:
|
||||
resolution: {integrity: sha512-9OErI8fksFkxAMJ8Mco0aiZSdphyd90HcKiOMJQncSlU1yq/9lHHxrT8PDayxrmr9IIIZPOAEfXuGSD7g29uog==}
|
||||
|
|
@ -2479,6 +2503,7 @@ packages:
|
|||
/chownr@2.0.0:
|
||||
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/chrome-trace-event@1.0.3:
|
||||
resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
|
||||
|
|
@ -2578,6 +2603,7 @@ packages:
|
|||
/cluster-key-slot@1.1.2:
|
||||
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/co@4.6.0:
|
||||
resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
|
||||
|
|
@ -2615,6 +2641,7 @@ packages:
|
|||
/color-support@1.1.3:
|
||||
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/color@3.2.1:
|
||||
resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
|
||||
|
|
@ -2639,7 +2666,7 @@ packages:
|
|||
/commander@11.0.0:
|
||||
resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==}
|
||||
engines: {node: '>=16'}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/commander@2.20.3:
|
||||
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
|
||||
|
|
@ -2671,6 +2698,7 @@ packages:
|
|||
|
||||
/console-control-strings@1.1.0:
|
||||
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
|
||||
dev: false
|
||||
|
||||
/constant-case@3.0.4:
|
||||
resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
|
||||
|
|
@ -2809,6 +2837,7 @@ packages:
|
|||
|
||||
/delegates@1.0.0:
|
||||
resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
|
||||
dev: false
|
||||
|
||||
/denque@2.1.0:
|
||||
resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
|
||||
|
|
@ -2831,6 +2860,7 @@ packages:
|
|||
/detect-libc@2.0.2:
|
||||
resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/detect-newline@3.1.0:
|
||||
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
|
||||
|
|
@ -2923,6 +2953,7 @@ packages:
|
|||
requiresBuild: true
|
||||
dependencies:
|
||||
iconv-lite: 0.6.3
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/end-of-stream@1.4.4:
|
||||
|
|
@ -2942,10 +2973,12 @@ packages:
|
|||
/env-paths@2.2.1:
|
||||
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/err-code@2.0.3:
|
||||
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/error-ex@1.3.2:
|
||||
|
|
@ -3460,6 +3493,7 @@ packages:
|
|||
engines: {node: '>= 8'}
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
dev: false
|
||||
|
||||
/fs-monkey@1.0.4:
|
||||
resolution: {integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==}
|
||||
|
|
@ -3492,6 +3526,7 @@ packages:
|
|||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
wide-align: 1.1.5
|
||||
dev: false
|
||||
|
||||
/gauge@4.0.4:
|
||||
resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
|
||||
|
|
@ -3505,6 +3540,7 @@ packages:
|
|||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
wide-align: 1.1.5
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/generate-function@2.3.1:
|
||||
|
|
@ -3516,6 +3552,7 @@ packages:
|
|||
/generic-pool@3.9.0:
|
||||
resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==}
|
||||
engines: {node: '>= 4'}
|
||||
dev: false
|
||||
|
||||
/gensync@1.0.0-beta.2:
|
||||
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
|
||||
|
|
@ -3694,6 +3731,7 @@ packages:
|
|||
|
||||
/has-unicode@2.0.1:
|
||||
resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
|
||||
dev: false
|
||||
|
||||
/has@1.0.3:
|
||||
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
|
||||
|
|
@ -3730,6 +3768,7 @@ packages:
|
|||
|
||||
/http-cache-semantics@4.1.1:
|
||||
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/http-errors@2.0.0:
|
||||
|
|
@ -3751,6 +3790,7 @@ packages:
|
|||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/https-proxy-agent@5.0.1:
|
||||
|
|
@ -3761,6 +3801,7 @@ packages:
|
|||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/human-signals@1.1.1:
|
||||
resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
|
||||
|
|
@ -3776,6 +3817,7 @@ packages:
|
|||
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
|
||||
dependencies:
|
||||
ms: 2.1.3
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/iconv-lite@0.4.24:
|
||||
|
|
@ -3789,6 +3831,7 @@ packages:
|
|||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
safer-buffer: 2.1.2
|
||||
dev: false
|
||||
|
||||
/ieee754@1.2.1:
|
||||
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
||||
|
|
@ -3825,6 +3868,7 @@ packages:
|
|||
|
||||
/infer-owner@1.0.4:
|
||||
resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/inflight@1.0.6:
|
||||
|
|
@ -3915,6 +3959,7 @@ packages:
|
|||
|
||||
/ip@2.0.0:
|
||||
resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/ipaddr.js@1.9.1:
|
||||
|
|
@ -3983,6 +4028,7 @@ packages:
|
|||
|
||||
/is-lambda@1.0.1:
|
||||
resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/is-number@7.0.0:
|
||||
|
|
@ -4686,7 +4732,7 @@ packages:
|
|||
|
||||
/lodash-es@4.17.21:
|
||||
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/lodash.clonedeep@4.5.0:
|
||||
resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
|
||||
|
|
@ -4791,6 +4837,7 @@ packages:
|
|||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
semver: 6.3.1
|
||||
dev: false
|
||||
|
||||
/make-dir@4.0.0:
|
||||
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
|
||||
|
|
@ -4825,6 +4872,7 @@ packages:
|
|||
transitivePeerDependencies:
|
||||
- bluebird
|
||||
- supports-color
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/make-iterator@1.0.1:
|
||||
|
|
@ -4933,6 +4981,7 @@ packages:
|
|||
engines: {node: '>= 8'}
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/minipass-fetch@1.4.1:
|
||||
|
|
@ -4944,6 +4993,7 @@ packages:
|
|||
minizlib: 2.1.2
|
||||
optionalDependencies:
|
||||
encoding: 0.1.13
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/minipass-flush@1.0.5:
|
||||
|
|
@ -4951,6 +5001,7 @@ packages:
|
|||
engines: {node: '>= 8'}
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/minipass-pipeline@1.2.4:
|
||||
|
|
@ -4958,6 +5009,7 @@ packages:
|
|||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/minipass-sized@1.0.3:
|
||||
|
|
@ -4965,6 +5017,7 @@ packages:
|
|||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/minipass@3.3.6:
|
||||
|
|
@ -4972,6 +5025,7 @@ packages:
|
|||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
yallist: 4.0.0
|
||||
dev: false
|
||||
|
||||
/minipass@4.2.8:
|
||||
resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
|
||||
|
|
@ -4981,6 +5035,7 @@ packages:
|
|||
/minipass@5.0.0:
|
||||
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/minipass@7.0.3:
|
||||
resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==}
|
||||
|
|
@ -4993,6 +5048,7 @@ packages:
|
|||
dependencies:
|
||||
minipass: 3.3.6
|
||||
yallist: 4.0.0
|
||||
dev: false
|
||||
|
||||
/mkdirp@0.5.6:
|
||||
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
|
||||
|
|
@ -5016,7 +5072,7 @@ packages:
|
|||
hasBin: true
|
||||
dependencies:
|
||||
commander: 11.0.0
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/moment@2.29.4:
|
||||
resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==}
|
||||
|
|
@ -5054,7 +5110,7 @@ packages:
|
|||
object-assign: 4.1.1
|
||||
type-is: 1.6.18
|
||||
xtend: 4.0.2
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/mute-stream@0.0.8:
|
||||
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
|
||||
|
|
@ -5118,6 +5174,7 @@ packages:
|
|||
|
||||
/node-addon-api@4.3.0:
|
||||
resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==}
|
||||
dev: false
|
||||
|
||||
/node-emoji@1.11.0:
|
||||
resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==}
|
||||
|
|
@ -5155,6 +5212,7 @@ packages:
|
|||
transitivePeerDependencies:
|
||||
- bluebird
|
||||
- supports-color
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/node-int64@0.4.0:
|
||||
|
|
@ -5195,6 +5253,7 @@ packages:
|
|||
hasBin: true
|
||||
dependencies:
|
||||
abbrev: 1.1.1
|
||||
dev: false
|
||||
|
||||
/normalize-path@3.0.0:
|
||||
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
|
||||
|
|
@ -5215,6 +5274,7 @@ packages:
|
|||
console-control-strings: 1.1.0
|
||||
gauge: 3.0.2
|
||||
set-blocking: 2.0.0
|
||||
dev: false
|
||||
|
||||
/npmlog@6.0.2:
|
||||
resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
|
||||
|
|
@ -5224,6 +5284,7 @@ packages:
|
|||
console-control-strings: 1.1.0
|
||||
gauge: 4.0.4
|
||||
set-blocking: 2.0.0
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/object-assign@4.1.1:
|
||||
|
|
@ -5583,6 +5644,7 @@ packages:
|
|||
peerDependenciesMeta:
|
||||
bluebird:
|
||||
optional: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/promise-retry@2.0.1:
|
||||
|
|
@ -5591,6 +5653,7 @@ packages:
|
|||
dependencies:
|
||||
err-code: 2.0.3
|
||||
retry: 0.12.0
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/prompts@2.4.2:
|
||||
|
|
@ -5722,6 +5785,7 @@ packages:
|
|||
'@redis/json': 1.0.4(@redis/client@1.5.9)
|
||||
'@redis/search': 1.1.3(@redis/client@1.5.9)
|
||||
'@redis/time-series': 1.0.5(@redis/client@1.5.9)
|
||||
dev: false
|
||||
|
||||
/reflect-metadata@0.1.13:
|
||||
resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==}
|
||||
|
|
@ -5797,6 +5861,7 @@ packages:
|
|||
/retry@0.12.0:
|
||||
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
|
||||
engines: {node: '>= 4'}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/reusify@1.0.4:
|
||||
|
|
@ -5829,6 +5894,11 @@ packages:
|
|||
queue-microtask: 1.2.3
|
||||
dev: true
|
||||
|
||||
/run-script-webpack-plugin@0.2.0:
|
||||
resolution: {integrity: sha512-SVNNq4jxzjfnaW+HkdTlyH1CWwCuSb/weYfic0D7Y/KnhY27YRYkzgybdzTDEPJlpQ73FDCRDbyBFwNsJMmwWQ==}
|
||||
engines: {node: '>=14'}
|
||||
dev: true
|
||||
|
||||
/rxjs@7.8.1:
|
||||
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
|
||||
dependencies:
|
||||
|
|
@ -5919,6 +5989,7 @@ packages:
|
|||
|
||||
/set-blocking@2.0.0:
|
||||
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
|
||||
dev: false
|
||||
|
||||
/setprototypeof@1.2.0:
|
||||
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
|
||||
|
|
@ -5986,6 +6057,7 @@ packages:
|
|||
/smart-buffer@4.2.0:
|
||||
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
|
||||
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/snake-case@3.0.4:
|
||||
|
|
@ -6004,6 +6076,7 @@ packages:
|
|||
socks: 2.7.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/socks@2.7.1:
|
||||
|
|
@ -6012,6 +6085,7 @@ packages:
|
|||
dependencies:
|
||||
ip: 2.0.0
|
||||
smart-buffer: 4.2.0
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/source-map-support@0.5.13:
|
||||
|
|
@ -6058,6 +6132,7 @@ packages:
|
|||
- bluebird
|
||||
- encoding
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/sqlstring@2.3.3:
|
||||
resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==}
|
||||
|
|
@ -6069,6 +6144,7 @@ packages:
|
|||
engines: {node: '>= 8'}
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/stack-trace@0.0.10:
|
||||
|
|
@ -6241,6 +6317,7 @@ packages:
|
|||
minizlib: 2.1.2
|
||||
mkdirp: 1.0.4
|
||||
yallist: 4.0.0
|
||||
dev: false
|
||||
|
||||
/terminal-link@2.1.1:
|
||||
resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==}
|
||||
|
|
@ -6663,12 +6740,14 @@ packages:
|
|||
resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==}
|
||||
dependencies:
|
||||
unique-slug: 2.0.2
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/unique-slug@2.0.2:
|
||||
resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==}
|
||||
dependencies:
|
||||
imurmurhash: 0.1.4
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/universalify@2.0.0:
|
||||
|
|
@ -6893,6 +6972,7 @@ packages:
|
|||
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
|
||||
dependencies:
|
||||
string-width: 4.2.3
|
||||
dev: false
|
||||
|
||||
/windows-release@4.0.0:
|
||||
resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { PaginationDto } from '@/common/response';
|
||||
import { PaginationDto } from '@/middlewares/response';
|
||||
import { IntersectionType } from '@nestjs/swagger';
|
||||
import { IsOptional, IsString } from 'class-validator';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { BaseController } from '@/common/base';
|
||||
import { Respond, RespondType } from '@/common/response';
|
||||
import { Body, Controller, Delete, Get, Param, Patch, Post, Query, ParseIntPipe } from '@nestjs/common';
|
||||
import { ApiOkResponse, ApiTags } from '@nestjs/swagger';
|
||||
import { Respond, RespondType } from '@/middlewares/response';
|
||||
import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from '@nestjs/common';
|
||||
import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import { Create{{upcaseName name}}Dto } from './dto/create-{{fileName name}}.dto';
|
||||
import { Find{{upcaseName name}}Dto } from './dto/find-{{fileName name}}.dto';
|
||||
import { Update{{upcaseName name}}Dto } from './dto/update-{{fileName name}}.dto';
|
||||
|
|
@ -31,19 +31,19 @@ export class {{upcaseName name}}Controller extends BaseController {
|
|||
|
||||
@Get(':id')
|
||||
@ApiOperation({ description: '获取{{cnName}}', operationId: 'get{{upcaseName name}}' })
|
||||
get{{upcaseName name}}(id: number): Promise<{{upcaseName name}}> {
|
||||
get{{upcaseName name}}(@Param('id') id: number): Promise<{{upcaseName name}}> {
|
||||
return this.{{lowcaseName name}}Service.findOne(id);
|
||||
}
|
||||
|
||||
@Patch(':id')
|
||||
@ApiOperation({ description: '更新{{cnName}}', operationId: 'set{{upcaseName name}}' })
|
||||
update{{upcaseName name}}(id: number, @Body() update{{upcaseName name}}Dto: Update{{upcaseName name}}Dto) {
|
||||
update{{upcaseName name}}(@Param('id') id: number, @Body() update{{upcaseName name}}Dto: Update{{upcaseName name}}Dto) {
|
||||
return this.{{lowcaseName name}}Service.update(+id, update{{upcaseName name}}Dto);
|
||||
}
|
||||
|
||||
@Delete(':id')
|
||||
@ApiOperation({ description: '删除{{cnName}}', operationId: 'del{{upcaseName name}}' })
|
||||
del{{upcaseName name}}(id: number) {
|
||||
del{{upcaseName name}}(@Param('id') id: number) {
|
||||
return this.{{lowcaseName name}}Service.remove(+id);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,21 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { PostModule } from '@/content/post';
|
||||
import { RoleModule } from '@/modules/role';
|
||||
import { UploadModule } from '@/storage/upload';
|
||||
import { PermissionModule } from '@/modules/permission';
|
||||
import { ConfigModule } from '@/config';
|
||||
import { LoggerModule } from '@/common/logger';
|
||||
import { ServeStaticModule } from '@/common/static';
|
||||
import { DatabaseModule } from '@/database';
|
||||
import { ValidationModule } from '@/common/validation';
|
||||
import { AuthModule } from '@/modules/auth';
|
||||
import { UserModule } from '@/modules/user';
|
||||
import { ResponseModule } from '@/common/response';
|
||||
import { SerializationModule } from '@/common/serialization';
|
||||
import { CacheModule } from '@/storage/cache';
|
||||
import { ScanModule } from '@/utils/scan.module';
|
||||
import { ConfigModule } from '@/config';
|
||||
import { ContentModule } from '@/content/content.module';
|
||||
import { PostModule } from '@/content/post';
|
||||
import { DatabaseModule } from '@/database';
|
||||
import { ResponseModule } from '@/middlewares/response';
|
||||
import { SerializationModule } from '@/middlewares/serialization';
|
||||
import { ValidationModule } from '@/middlewares/validation';
|
||||
import { LoggerModule } from '@/monitor/logger';
|
||||
import { CacheModule } from '@/storage/cache';
|
||||
import { UploadModule } from '@/storage/file';
|
||||
import { AuthModule } from '@/system/auth';
|
||||
import { RoleModule } from '@/system/role';
|
||||
import { UserModule } from '@/system/user';
|
||||
import { ScanModule } from '@/utils/scan.module';
|
||||
import { Module } from '@nestjs/common';
|
||||
import { MenuModule } from './system/menu';
|
||||
import { DictModule, DictTypeModule } from './system/dict';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
|
|
@ -63,7 +64,6 @@ import { ContentModule } from '@/content/content.module';
|
|||
*/
|
||||
DatabaseModule,
|
||||
|
||||
|
||||
/**
|
||||
* 用户模块
|
||||
*/
|
||||
|
|
@ -76,11 +76,6 @@ import { ContentModule } from '@/content/content.module';
|
|||
* 角色模块
|
||||
*/
|
||||
RoleModule,
|
||||
/**
|
||||
* 权限模块
|
||||
*/
|
||||
PermissionModule,
|
||||
|
||||
|
||||
/**
|
||||
* 上传模块
|
||||
|
|
@ -90,7 +85,10 @@ import { ContentModule } from '@/content/content.module';
|
|||
* 文章模块
|
||||
*/
|
||||
PostModule,
|
||||
ContentModule
|
||||
ContentModule,
|
||||
MenuModule,
|
||||
DictTypeModule,
|
||||
DictModule,
|
||||
],
|
||||
})
|
||||
export class AppModule {}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { Inject } from '@nestjs/common';
|
||||
import { LoggerService } from '../logger';
|
||||
import { ConfigService } from '@/config';
|
||||
import { Inject } from '@nestjs/common';
|
||||
import { LoggerService } from '../../monitor/logger';
|
||||
|
||||
/**
|
||||
* 控制器基类
|
||||
|
|
|
|||
|
|
@ -1,3 +1,2 @@
|
|||
export * from './mail.controller';
|
||||
export * from './mail.module';
|
||||
export * from './mail.service';
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
import { Controller } from '@nestjs/common';
|
||||
import { MailService } from './mail.service';
|
||||
|
||||
@Controller('mail')
|
||||
export class MailController {
|
||||
constructor(private readonly mailService: MailService) {}
|
||||
}
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { MailService } from './mail.service';
|
||||
import { MailController } from './mail.controller';
|
||||
|
||||
@Module({
|
||||
controllers: [MailController],
|
||||
controllers: [],
|
||||
providers: [MailService],
|
||||
exports: [MailService],
|
||||
})
|
||||
export class MailModule {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { INestApplication } from '@nestjs/common';
|
||||
import { ConfigService } from '@/config';
|
||||
import { INestApplication } from '@nestjs/common';
|
||||
import { DocumentBuilder, SwaggerDocumentOptions, SwaggerModule } from '@nestjs/swagger';
|
||||
import { addResponseWrapper } from './util';
|
||||
|
||||
|
|
@ -17,9 +17,10 @@ export const initSwagger = (app: INestApplication) => {
|
|||
.addTag('user', '用户管理')
|
||||
.addTag('auth', '认证管理')
|
||||
.addTag('role', '角色管理')
|
||||
.addTag('permission', '权限管理')
|
||||
.addTag('post', '文章管理')
|
||||
.addTag('upload', '文件上传')
|
||||
.addTag('file', '文件管理')
|
||||
.addTag('menu', '菜单管理')
|
||||
.addTag('permission', '权限管理')
|
||||
.addBearerAuth()
|
||||
.build();
|
||||
const options: SwaggerDocumentOptions = {
|
||||
|
|
|
|||
|
|
@ -37,20 +37,38 @@ export function addResponseWrapper(doc: OpenAPIObject) {
|
|||
continue;
|
||||
}
|
||||
const schema = json.schema;
|
||||
// json.schema = {
|
||||
// allOf: [
|
||||
// {
|
||||
// $ref: '#/components/schemas/Response',
|
||||
// },
|
||||
// {
|
||||
// type: 'object',
|
||||
// properties: {
|
||||
// data: schema,
|
||||
// },
|
||||
// required: ['data'],
|
||||
// },
|
||||
// ],
|
||||
// };
|
||||
json.schema = {
|
||||
allOf: [
|
||||
{
|
||||
$ref: '#/components/schemas/Response',
|
||||
type: 'object',
|
||||
properties: {
|
||||
code: {
|
||||
type: 'integer',
|
||||
description: '状态码',
|
||||
example: 2000,
|
||||
format: 'int32',
|
||||
},
|
||||
{
|
||||
type: 'object',
|
||||
properties: {
|
||||
data: schema,
|
||||
},
|
||||
required: ['data'],
|
||||
message: {
|
||||
type: 'string',
|
||||
description: '提示信息',
|
||||
example: '请求成功',
|
||||
},
|
||||
],
|
||||
};
|
||||
data: schema,
|
||||
},
|
||||
required: ['code', 'message'],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
export class ValidationError extends Error {
|
||||
constructor(public messages: string[]) {
|
||||
super('参数错误');
|
||||
}
|
||||
}
|
||||
|
|
@ -2,17 +2,15 @@ import { Global, Module } from '@nestjs/common';
|
|||
import { ConfigModule as _ConfigModule } from '@nestjs/config';
|
||||
import { ConfigService } from './config.service';
|
||||
|
||||
const envFilePath = ['.env.development.locale', '.env.development', '.env.local', '.env'];
|
||||
|
||||
/**
|
||||
* 配置模块
|
||||
* @description 基于 `@nestjs/config` 封装,提供更便捷且类型安全的配置读取方式
|
||||
*/
|
||||
@Global()
|
||||
@Module({
|
||||
imports: [
|
||||
_ConfigModule.forRoot({
|
||||
envFilePath: ['.env.development.locale', '.env.development', '.env.local', '.env'],
|
||||
}),
|
||||
],
|
||||
imports: [_ConfigModule.forRoot({ envFilePath })],
|
||||
providers: [ConfigService],
|
||||
exports: [ConfigService],
|
||||
})
|
||||
|
|
|
|||
|
|
@ -90,6 +90,41 @@ export class ConfigService {
|
|||
return this.config.get('DB_TYPE', 'sqlite');
|
||||
}
|
||||
|
||||
/**
|
||||
* MySQL数据库主机
|
||||
*/
|
||||
get sqlHost(): string {
|
||||
return this.config.get('DB_MYSQL_HOST', 'localhost');
|
||||
}
|
||||
|
||||
/**
|
||||
* MySQL数据库端口
|
||||
*/
|
||||
get sqlPort(): number {
|
||||
return Number(this.config.get('DB_MYSQL_PORT', 3306));
|
||||
}
|
||||
|
||||
/**
|
||||
* MySQL数据库用户
|
||||
*/
|
||||
get sqlUser(): string {
|
||||
return this.config.get('DB_MYSQL_USERNAME', 'root');
|
||||
}
|
||||
|
||||
/**
|
||||
* MySQL数据库密码
|
||||
*/
|
||||
get sqlPass(): string {
|
||||
return this.config.get('DB_MYSQL_PASSWORD', '');
|
||||
}
|
||||
|
||||
/**
|
||||
* MySQL数据库名称
|
||||
*/
|
||||
get sqlDatabase(): string {
|
||||
return this.config.get('DB_MYSQL_DATABASE', 'appnify');
|
||||
}
|
||||
|
||||
/**
|
||||
* SQLite数据库文件路径
|
||||
* @default './content/db.sqlite'
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { BaseController } from '@/common/base';
|
||||
import { Respond, RespondType } from '@/common/response';
|
||||
import { Respond, RespondType } from '@/middlewares/response';
|
||||
import { Body, Controller, Delete, Get, Patch, Post, Query } from '@nestjs/common';
|
||||
import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import { CategoryService } from './category.service';
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { PaginationDto } from '@/common/response';
|
||||
import { PaginationDto } from '@/middlewares/response';
|
||||
import { IntersectionType } from '@nestjs/swagger';
|
||||
import { IsOptional, IsString } from 'class-validator';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { PaginationDto } from '@/common/response';
|
||||
import { PaginationDto } from '@/middlewares/response';
|
||||
import { IntersectionType } from '@nestjs/swagger';
|
||||
|
||||
export class FindPostDto extends IntersectionType(PaginationDto) {}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import { BaseEntity } from '@/database';
|
||||
import { User } from 'src/modules/user';
|
||||
import { User } from '@/system/user';
|
||||
import { Column, Entity, ManyToMany } from 'typeorm';
|
||||
|
||||
@Entity()
|
||||
@Entity({ orderBy: { id: 'DESC' } })
|
||||
export class Post extends BaseEntity {
|
||||
/**
|
||||
* 文章标题
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
import { BaseController } from '@/common/base';
|
||||
import { Respond, RespondType } from '@/middlewares/response';
|
||||
import { Body, Controller, Delete, Get, NotFoundException, Param, Patch, Post, Query, Res } from '@nestjs/common';
|
||||
import { ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import { Response } from 'express';
|
||||
import { readFileSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
import { CreatePostDto } from './dto/create-post.dto';
|
||||
import { FindPostDto } from './dto/find-post.dto';
|
||||
import { UpdatePostDto } from './dto/update-post.dto';
|
||||
import { PostService } from './post.service';
|
||||
import { join } from 'path';
|
||||
import { readFileSync } from 'fs';
|
||||
import { Response } from 'express';
|
||||
import { BaseController } from '@/common/base';
|
||||
import { Respond, RespondType } from '@/common/response';
|
||||
import { FindPostDto } from './dto/find-post.dto';
|
||||
|
||||
@ApiTags('post')
|
||||
@Controller('posts')
|
||||
|
|
|
|||
|
|
@ -1,33 +1,44 @@
|
|||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { ConfigService } from '@/config';
|
||||
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { SnakeNamingStrategy } from 'typeorm-naming-strategies';
|
||||
import { EntitySubscripber } from './suscribers/entify.subscriber';
|
||||
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
|
||||
import { RequestMiddleware } from './suscribers/request.middleware';
|
||||
|
||||
const TypeormModule = TypeOrmModule.forRootAsync({
|
||||
useFactory: (config: ConfigService) => {
|
||||
if (config.dbType === 'sqlite') {
|
||||
return {
|
||||
type: config.dbType,
|
||||
database: config.dbSqlitePath,
|
||||
synchronize: true,
|
||||
autoLoadEntities: true,
|
||||
namingStrategy: new SnakeNamingStrategy(),
|
||||
};
|
||||
}
|
||||
if (config.dbType === 'mysql') {
|
||||
return {
|
||||
type: config.dbType,
|
||||
host: config.sqlHost,
|
||||
port: config.sqlPort,
|
||||
username: config.sqlUser,
|
||||
password: config.sqlPass,
|
||||
database: config.sqlDatabase,
|
||||
synchronize: true,
|
||||
autoLoadEntities: true,
|
||||
namingStrategy: new SnakeNamingStrategy(),
|
||||
};
|
||||
}
|
||||
},
|
||||
inject: [ConfigService],
|
||||
});
|
||||
|
||||
/**
|
||||
* 数据库模块
|
||||
* @description 基于 `typeorm` 封装
|
||||
*/
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forRootAsync({
|
||||
useFactory: (config: ConfigService) => {
|
||||
if (config.dbType === 'sqlite') {
|
||||
return {
|
||||
type: config.dbType,
|
||||
database: config.dbSqlitePath,
|
||||
synchronize: true,
|
||||
autoLoadEntities: true,
|
||||
namingStrategy: new SnakeNamingStrategy(),
|
||||
};
|
||||
}
|
||||
if (config.dbType === 'mysql') {
|
||||
}
|
||||
},
|
||||
inject: [ConfigService],
|
||||
}),
|
||||
],
|
||||
imports: [TypeormModule],
|
||||
providers: [EntitySubscripber],
|
||||
})
|
||||
export class DatabaseModule implements NestModule {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import { ApiHideProperty } from '@nestjs/swagger';
|
||||
import { Exclude } from 'class-transformer';
|
||||
import { Column, CreateDateColumn, DeleteDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
|
||||
|
||||
|
|
@ -23,7 +24,7 @@ export class BaseEntity {
|
|||
|
||||
/**
|
||||
* 创建人
|
||||
* @example '绝弹(1)'
|
||||
* @example '绝弹'
|
||||
*/
|
||||
@Column({ comment: '创建人', nullable: true })
|
||||
createdBy: string;
|
||||
|
|
@ -37,7 +38,7 @@ export class BaseEntity {
|
|||
|
||||
/**
|
||||
* 更新人
|
||||
* @example '绝弹(1)'
|
||||
* @example '绝弹'
|
||||
*/
|
||||
@Column({ comment: '更新人', nullable: true })
|
||||
updatedBy: string;
|
||||
|
|
@ -47,14 +48,16 @@ export class BaseEntity {
|
|||
* @example "2022-01-03 12:12:12"
|
||||
*/
|
||||
@Exclude()
|
||||
@ApiHideProperty()
|
||||
@DeleteDateColumn({ comment: '删除时间', select: false })
|
||||
deleteddAt: Date;
|
||||
|
||||
/**
|
||||
* 删除人ID
|
||||
* @example 1
|
||||
* 删除人
|
||||
* @example '绝弹'
|
||||
*/
|
||||
@Exclude()
|
||||
@ApiHideProperty()
|
||||
@Column({ comment: '删除人', nullable: true, select: false })
|
||||
deletedBy: string;
|
||||
}
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
export * from './datasource';
|
||||
export * from './entities/base';
|
||||
export * from './entities/base.entity';
|
||||
export * from './database.module';
|
||||
|
|
|
|||
11
src/main.ts
|
|
@ -1,11 +1,13 @@
|
|||
import { LoggerService } from '@/common/logger';
|
||||
import { initSwagger } from '@/common/swagger';
|
||||
import { ConfigService } from '@/config';
|
||||
import { LoggerService } from '@/monitor/logger';
|
||||
import { VersioningType } from '@nestjs/common';
|
||||
import { NestFactory } from '@nestjs/core';
|
||||
import { AppModule } from './app.module';
|
||||
import { ScanModule } from './utils/scan.module';
|
||||
|
||||
declare const module: any;
|
||||
|
||||
async function bootstrap() {
|
||||
/**
|
||||
* 创建应用
|
||||
|
|
@ -55,6 +57,13 @@ async function bootstrap() {
|
|||
* 输出接口文档URL
|
||||
*/
|
||||
logger.log(`OpenapiDocs is running at ${await app.getUrl()}${config.apiDocPrefix}`, 'NestApplication');
|
||||
/**
|
||||
* Webpack热更新
|
||||
*/
|
||||
if (module.hot) {
|
||||
module.hot.accept();
|
||||
module.hot.dispose(() => app.close());
|
||||
}
|
||||
}
|
||||
|
||||
bootstrap();
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import { ArgumentsHost, Catch, ExceptionFilter, HttpStatus } from '@nestjs/common';
|
||||
import { Request, Response as _Response } from 'express';
|
||||
import { LoggerService } from '../../monitor/logger';
|
||||
import { Response } from './response';
|
||||
import { ResponseCode } from './response.code';
|
||||
import { LoggerService } from '../logger';
|
||||
|
||||
@Catch()
|
||||
export class AllExecptionFilter implements ExceptionFilter {
|
||||
|
|
@ -39,4 +39,12 @@ export class PaginationDto {
|
|||
@Min(0)
|
||||
@Transform(({ value }) => Number(value))
|
||||
size?: number;
|
||||
|
||||
/**
|
||||
* 创建起始事件
|
||||
* @example '2020-02-02 02:02:02'
|
||||
*/
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
createdFrom?: string;
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
export class ValidationError extends Error {
|
||||
constructor(message: string) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
|
|
@ -10,7 +10,6 @@ export class ValidationExecptionFilter implements ExceptionFilter {
|
|||
const response = ctx.getResponse<Response>();
|
||||
const code = ResponseCode.PARAM_ERROR;
|
||||
const message = exception.message;
|
||||
const data = exception.messages;
|
||||
response.status(HttpStatus.BAD_REQUEST).json({ code, message, data });
|
||||
response.status(HttpStatus.BAD_REQUEST).json({ code, message, data: undefined });
|
||||
}
|
||||
}
|
||||
|
|
@ -27,14 +27,14 @@ export const validationPipeFactory = () => {
|
|||
transform: true,
|
||||
whitelist: true,
|
||||
exceptionFactory: (errors) => {
|
||||
const messages: string[] = [];
|
||||
let message = '参数错误';
|
||||
for (const error of errors) {
|
||||
const { property, constraints } = error;
|
||||
for (const [key, val] of Object.entries(constraints)) {
|
||||
messages.push(map[key] ? `参数(${property})${map[key]}` : val);
|
||||
message = map[key] ? `参数(${property})${map[key]}` : val;
|
||||
}
|
||||
}
|
||||
return new ValidationError(messages);
|
||||
return new ValidationError(message);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
import { Body, Controller, HttpCode, HttpStatus, Post, UseInterceptors } from '@nestjs/common';
|
||||
import { ApiTags } from '@nestjs/swagger';
|
||||
import { AuthService } from './auth.service';
|
||||
import { AuthUserDto } from './dto/auth-user.dto';
|
||||
import { Public } from './jwt';
|
||||
import { LoginedUserVo } from './vo/logined-user.vo';
|
||||
import { LoginLogInterceptor } from '@/monitor/log';
|
||||
|
||||
@ApiTags('auth')
|
||||
@Controller('auth')
|
||||
export class AuthController {
|
||||
constructor(private authService: AuthService) {}
|
||||
|
||||
/**
|
||||
* 账号登陆
|
||||
*/
|
||||
@Post('login')
|
||||
@Public()
|
||||
@HttpCode(HttpStatus.OK)
|
||||
@UseInterceptors(LoginLogInterceptor)
|
||||
login(@Body() user: AuthUserDto): Promise<LoginedUserVo> {
|
||||
return this.authService.signIn(user);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
import { Injectable, UnauthorizedException } from '@nestjs/common';
|
||||
import { JwtService } from '@nestjs/jwt';
|
||||
import { UserService } from '../user';
|
||||
import { AuthUserDto } from './dto/auth-user.dto';
|
||||
import { LoginedUserVo } from './vo/logined-user.vo';
|
||||
|
||||
@Injectable()
|
||||
export class AuthService {
|
||||
constructor(private userService: UserService, private jwtService: JwtService) {}
|
||||
|
||||
async signIn(authUserDto: AuthUserDto) {
|
||||
const user = await this.userService.findByUsername(authUserDto.username);
|
||||
if (!user) {
|
||||
throw new UnauthorizedException('用户名不存在');
|
||||
}
|
||||
if (user.password !== authUserDto.password) {
|
||||
throw new UnauthorizedException('密码错误');
|
||||
}
|
||||
const { password, ...rest } = user;
|
||||
const loginedUser = Object.assign(new LoginedUserVo(), rest);
|
||||
const { id, username, nickname } = loginedUser;
|
||||
loginedUser.token = await this.jwtService.signAsync({ id, username, nickname });
|
||||
return loginedUser;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
export * from './jwt-decorator';
|
||||
export * from './jwt-guard';
|
||||
export * from './jwt-module';
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
import { User } from '@/modules/user';
|
||||
import { OmitType } from '@nestjs/swagger';
|
||||
|
||||
export class LoginedUserVo extends OmitType(User, ['password', 'id'] as const) {
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
id: number;
|
||||
/**
|
||||
* 访问令牌
|
||||
* @example 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MjIsInVzZXJuYW1lIjoianVldGFuIiwiaWF0IjoxNjkxMTM5MjI3LCJleHAiOjE2OTExOTkyMjd9.6z7f-xfsHABbsyg401o2boKeqNQ1epPDYfEdavIcfYc'
|
||||
*/
|
||||
token: string;
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
import { IsOptional, IsString } from 'class-validator';
|
||||
|
||||
export class CreatePermissionDto {
|
||||
/**
|
||||
* 权限名称
|
||||
* @example 权限名称
|
||||
*/
|
||||
@IsString()
|
||||
name: string;
|
||||
/**
|
||||
* 权限标识
|
||||
* @example permission:permission
|
||||
*/
|
||||
@IsString()
|
||||
slug: string;
|
||||
/**
|
||||
* 权限描述
|
||||
*/
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
description?: string;
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
import { PartialType } from '@nestjs/swagger';
|
||||
import { IsNumber } from 'class-validator';
|
||||
import { CreatePermissionDto } from './create-permission.dto';
|
||||
|
||||
export class UpdatePermissionDto extends PartialType(CreatePermissionDto) {
|
||||
@IsNumber()
|
||||
id: number;
|
||||
}
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
import { BaseEntity } from '@/database';
|
||||
import { Role } from '@/modules/role/entities/role.entity';
|
||||
import { Column, Entity, ManyToMany } from 'typeorm';
|
||||
|
||||
enum PermissionType {
|
||||
Menu = 'menu',
|
||||
Api = 'api',
|
||||
}
|
||||
|
||||
@Entity({ orderBy: { id: 'DESC' } })
|
||||
export class Permission extends BaseEntity {
|
||||
/**
|
||||
* 权限名称
|
||||
* @example '文章列表'
|
||||
*/
|
||||
@Column({ comment: '权限名称' })
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* 权限标识
|
||||
* @example 'post:list'
|
||||
*/
|
||||
@Column({ comment: '权限标识' })
|
||||
slug: string;
|
||||
|
||||
/**
|
||||
* 权限类型
|
||||
* @example 'menu'
|
||||
*/
|
||||
@Column({ nullable: true })
|
||||
type: PermissionType;
|
||||
|
||||
/**
|
||||
* 权限描述
|
||||
* @example '文章列表'
|
||||
*/
|
||||
@Column({ comment: '权限描述', nullable: true })
|
||||
description: string;
|
||||
|
||||
/**
|
||||
* 权限角色
|
||||
* @example {}
|
||||
*/
|
||||
@ManyToMany(() => Role, (role) => role.permissions)
|
||||
roles: Role[];
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
export * from './dto/create-permission.dto';
|
||||
export * from './dto/update-permission.dto';
|
||||
export * from './entities/permission.entity';
|
||||
export * from './permission.controller';
|
||||
export * from './permission.module';
|
||||
export * from './permission.service';
|
||||
export * from './permission.decorator';
|
||||
export * from './permission.guard';
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
import { Respond, RespondType } from '@/common/response';
|
||||
import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common';
|
||||
import { ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import { CreatePermissionDto } from './dto/create-permission.dto';
|
||||
import { UpdatePermissionDto } from './dto/update-permission.dto';
|
||||
import { PermissionService } from './permission.service';
|
||||
|
||||
@ApiTags('permission')
|
||||
@Controller('permissions')
|
||||
export class PermissionController {
|
||||
constructor(private readonly permissionService: PermissionService) {}
|
||||
|
||||
@Post()
|
||||
@ApiOperation({ description: '创建权限', operationId: 'addPermission' })
|
||||
create(@Body() createPermissionDto: CreatePermissionDto) {
|
||||
return this.permissionService.create(createPermissionDto);
|
||||
}
|
||||
|
||||
@Get()
|
||||
@Respond(RespondType.PAGINATION)
|
||||
@ApiOperation({ description: '批量查询权限', operationId: 'getPermissions' })
|
||||
findAll() {
|
||||
return this.permissionService.findAll();
|
||||
}
|
||||
|
||||
@Get(':id')
|
||||
@ApiOperation({ description: '查询权限', operationId: 'getPermission' })
|
||||
findOne(@Param('id') id: string) {
|
||||
return this.permissionService.findOne(+id);
|
||||
}
|
||||
|
||||
@Patch(':id')
|
||||
@ApiOperation({ description: '更新权限', operationId: 'setPermission' })
|
||||
update(@Param('id') id: string, @Body() updatePermissionDto: UpdatePermissionDto) {
|
||||
return this.permissionService.update(+id, updatePermissionDto);
|
||||
}
|
||||
|
||||
@Delete(':id')
|
||||
@ApiOperation({ description: '删除权限', operationId: 'delPermission' })
|
||||
remove(@Param('id') id: string) {
|
||||
return this.permissionService.remove(+id);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
import { SetMetadata } from '@nestjs/common';
|
||||
|
||||
export const PERMISSION_KEY = 'APP:PERMISSION';
|
||||
|
||||
/**
|
||||
* 权限枚举
|
||||
*/
|
||||
export const enum PermissionEnum {
|
||||
/**
|
||||
* 新增
|
||||
*/
|
||||
CREATE = 'create',
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
READ = 'read',
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
UPDATE = 'update',
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
DELETE = 'delete',
|
||||
}
|
||||
|
||||
/**
|
||||
* 指定所需的权限
|
||||
* @param permissions
|
||||
* @returns
|
||||
*/
|
||||
export function PermissionWith(...permissions: string[]) {
|
||||
return SetMetadata(PERMISSION_KEY, permissions);
|
||||
}
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
import { CanActivate, ExecutionContext, Inject, Injectable, UnauthorizedException, forwardRef } from '@nestjs/common';
|
||||
import { Reflector } from '@nestjs/core';
|
||||
import { PERMISSION_KEY } from './permission.decorator';
|
||||
import { UserService } from '@/modules/user';
|
||||
|
||||
@Injectable()
|
||||
export class PermissionGuard implements CanActivate {
|
||||
constructor(private reflector: Reflector, @Inject(forwardRef(() => UserService)) private userService: UserService) {}
|
||||
|
||||
async canActivate(context: ExecutionContext): Promise<boolean> {
|
||||
const controller = context.getClass();
|
||||
const handler = context.getHandler();
|
||||
const permissions = this.reflector.getAllAndMerge(PERMISSION_KEY, [controller, handler]);
|
||||
if (!permissions || !permissions.length) {
|
||||
return true;
|
||||
}
|
||||
const user = context.switchToHttp().getRequest().user;
|
||||
if (!user) {
|
||||
throw new UnauthorizedException('用户未登录');
|
||||
}
|
||||
const userPermissions = await this.userService.findUserPermissions(user.id);
|
||||
const hasPermission = permissions.every((permission) => userPermissions.includes(permission));
|
||||
if (!hasPermission) {
|
||||
throw new UnauthorizedException('权限不足');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
import { Module, forwardRef } from '@nestjs/common';
|
||||
import { PermissionService } from './permission.service';
|
||||
import { PermissionController } from './permission.controller';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { Permission } from './entities/permission.entity';
|
||||
import { APP_GUARD } from '@nestjs/core';
|
||||
import { PermissionGuard } from './permission.guard';
|
||||
import { UserModule } from '../user';
|
||||
|
||||
@Module({
|
||||
imports: [TypeOrmModule.forFeature([Permission]), forwardRef(() => UserModule)],
|
||||
controllers: [PermissionController],
|
||||
providers: [
|
||||
PermissionService,
|
||||
{
|
||||
provide: APP_GUARD,
|
||||
useClass: PermissionGuard,
|
||||
},
|
||||
],
|
||||
})
|
||||
export class PermissionModule {}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
import { Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Repository } from 'typeorm';
|
||||
import { CreatePermissionDto } from './dto/create-permission.dto';
|
||||
import { UpdatePermissionDto } from './dto/update-permission.dto';
|
||||
import { Permission } from './entities/permission.entity';
|
||||
|
||||
@Injectable()
|
||||
export class PermissionService {
|
||||
constructor(@InjectRepository(Permission) private readonly permissionRepository: Repository<Permission>) {}
|
||||
|
||||
async create(createPermissionDto: CreatePermissionDto) {
|
||||
const permission = this.permissionRepository.create(createPermissionDto);
|
||||
await this.permissionRepository.save(permission);
|
||||
return permission.id;
|
||||
}
|
||||
|
||||
findAll() {
|
||||
return this.permissionRepository.findAndCount();
|
||||
}
|
||||
|
||||
findOne(id: number) {
|
||||
return `This action returns a #${id} permission`;
|
||||
}
|
||||
|
||||
update(id: number, updatePermissionDto: UpdatePermissionDto) {
|
||||
return this.permissionRepository.update(id, updatePermissionDto);
|
||||
}
|
||||
|
||||
remove(id: number) {
|
||||
return `This action removes a #${id} permission`;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
import { Permission } from '@/modules/permission/entities/permission.entity';
|
||||
import { IsInt, IsOptional, IsString } from 'class-validator';
|
||||
|
||||
export class CreateRoleDto {
|
||||
@IsString()
|
||||
name: string;
|
||||
|
||||
@IsString()
|
||||
slug: string;
|
||||
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
description?: string;
|
||||
|
||||
@IsOptional()
|
||||
@IsInt({ each: true })
|
||||
permissions?: Permission[];
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
import { PartialType } from '@nestjs/swagger';
|
||||
import { CreateRoleDto } from './create-role.dto';
|
||||
import { IsInt, IsOptional } from 'class-validator';
|
||||
|
||||
export class UpdateRoleDto extends PartialType(CreateRoleDto) {
|
||||
@IsOptional()
|
||||
@IsInt({ each: true })
|
||||
permissionIds?: number[];
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { PaginationDto } from '@/common/response';
|
||||
import { PaginationDto } from '@/middlewares/response';
|
||||
import { IntersectionType } from '@nestjs/swagger';
|
||||
import { Transform } from 'class-transformer';
|
||||
import { IsOptional, IsString } from 'class-validator';
|
||||
|
|
|
|||
|
|
@ -7,18 +7,17 @@ export class LoginLogInterceptor implements NestInterceptor {
|
|||
constructor(private logService: LogService) {}
|
||||
|
||||
intercept(context: ExecutionContext, next: CallHandler<any>): Observable<any> | Promise<Observable<any>> {
|
||||
const _this = this;
|
||||
return next.handle().pipe(
|
||||
tap({
|
||||
next(data) {
|
||||
const status = true;
|
||||
next: (data) => {
|
||||
const status = true;
|
||||
const description = '登录成功';
|
||||
_this.recordLoginLog(context, { status, description });
|
||||
this.recordLoginLog(context, { status, description });
|
||||
},
|
||||
error(err) {
|
||||
error: (err) => {
|
||||
const status = false;
|
||||
const description = err?.message || '登录失败';
|
||||
_this.recordLoginLog(context, { status, description });
|
||||
this.recordLoginLog(context, { status, description });
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { BaseController } from '@/common/base';
|
||||
import { Respond, RespondType } from '@/common/response';
|
||||
import { Body, Controller, Delete, Get, Param, Patch, Post, Query, ParseIntPipe } from '@nestjs/common';
|
||||
import { Respond, RespondType } from '@/middlewares/response';
|
||||
import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, Query } from '@nestjs/common';
|
||||
import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import { CreateLogDto } from './dto/create-log.dto';
|
||||
import { FindLogDto } from './dto/find-log.dto';
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
import { BaseService } from '@/common/base';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import axios from 'axios';
|
||||
import { Like, Repository } from 'typeorm';
|
||||
import uaParser from 'ua-parser-js';
|
||||
import { CreateLogDto } from './dto/create-log.dto';
|
||||
import { FindLogDto } from './dto/find-log.dto';
|
||||
import { UpdateLogDto } from './dto/update-log.dto';
|
||||
import { LoginLog } from './entities/loginLog.entity';
|
||||
import uaParser from 'ua-parser-js';
|
||||
import axios from 'axios';
|
||||
|
||||
@Injectable()
|
||||
export class LogService extends BaseService {
|
||||
|
|
@ -27,7 +27,7 @@ export class LogService extends BaseService {
|
|||
/**
|
||||
* 添加登陆日志
|
||||
*/
|
||||
async addLoginLog(log: { nickname: string; status: boolean, description: string; ip: string; userAgent: string }) {
|
||||
async addLoginLog(log: { nickname: string; status: boolean; description: string; ip: string; userAgent: string }) {
|
||||
const { nickname, status, description, ip, userAgent } = log;
|
||||
const { browser, os } = this.parseUserAgent(userAgent);
|
||||
const { addr } = await this.parseUserIp(ip);
|
||||
|
|
@ -80,14 +80,15 @@ export class LogService extends BaseService {
|
|||
* 条件/分页查询
|
||||
*/
|
||||
async findMany(findLogdto: FindLogDto) {
|
||||
const { page, size, nickname } = findLogdto;
|
||||
const { page, size, nickname: nick } = findLogdto;
|
||||
const { skip, take } = this.formatPagination(page, size, true);
|
||||
const nickname = nick ? Like(`%${nick}%`) : undefined;
|
||||
return this.loginLogRepository.findAndCount({
|
||||
skip,
|
||||
take,
|
||||
where: {
|
||||
nickname: nickname ? Like(`%${nickname}%`) : undefined,
|
||||
}
|
||||
nickname,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,11 +10,17 @@ export class LoggerInterceptor implements NestInterceptor {
|
|||
intercept(context: ExecutionContext, next: CallHandler<any>): Observable<any> | Promise<Observable<any>> {
|
||||
const { method, url } = context.switchToHttp().getRequest<Request>();
|
||||
const now = Date.now();
|
||||
const scope = [context.getClass().name, context.getHandler().name].join('.');
|
||||
return next.handle().pipe(
|
||||
tap(() => {
|
||||
const ms = Date.now() - now;
|
||||
const scope = [context.getClass().name, context.getHandler().name].join('.');
|
||||
this.logger.log(`${method} ${url}(${ms} ms) +1`, scope);
|
||||
tap({
|
||||
next: () => {
|
||||
const ms = Date.now() - now;
|
||||
this.logger.log(`[成功] ${method} ${url}(${ms} ms) +1`, scope);
|
||||
},
|
||||
error: () => {
|
||||
const ms = Date.now() - now;
|
||||
this.logger.error(`[失败] ${method} ${url}(${ms} ms) +1`, scope);
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import { Injectable, ConsoleLogger } from '@nestjs/common';
|
||||
import { dayjs } from '@/libs';
|
||||
import { dayjs } from '@/libraries';
|
||||
import { ConfigService } from '@/config';
|
||||
import { Logger, createLogger, format, transports } from 'winston';
|
||||
import 'winston-daily-rotate-file';
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import { ApiProperty } from '@nestjs/swagger';
|
||||
|
||||
export class CreateUploadDto {
|
||||
export class CreateFileDto {
|
||||
@ApiProperty({ type: 'string', format: 'binary' })
|
||||
file: any;
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
import { IsOptional, IsString } from 'class-validator';
|
||||
|
||||
export class UpdateFileDto {
|
||||
/**
|
||||
* 文件名
|
||||
* @example "头像.jpg"
|
||||
*/
|
||||
@IsString()
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
* @example '一段很长的描述'
|
||||
*/
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
description?: string;
|
||||
}
|
||||