From 0d73941127d6d56131a1925f141da75b623b9305 Mon Sep 17 00:00:00 2001 From: abearxiong Date: Thu, 19 Feb 2026 03:59:29 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E7=89=88=E6=9C=AC=EF=BC=8C=E6=8F=90=E5=8D=87=20@kevisual/query?= =?UTF-8?q?=20=E5=92=8C=20@kevisual/context=20=E7=9A=84=E7=89=88=E6=9C=AC?= =?UTF-8?q?=20feat:=20=E5=9C=A8=E5=BA=94=E7=94=A8=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E4=B8=AD=E6=B7=BB=E5=8A=A0=E5=85=83=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=EF=BC=8C=E5=A2=9E=E5=BC=BA=E7=89=88=E6=9C=AC=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E5=92=8C=E5=8F=91=E5=B8=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bun.lock | 10 ++++--- package.json | 4 +-- pnpm-lock.yaml | 51 +++++++++++++++++++--------------- src/routes/app-manager/list.ts | 32 ++++++++++++++++++--- 4 files changed, 64 insertions(+), 33 deletions(-) diff --git a/bun.lock b/bun.lock index a4ec4e1..ec1e229 100644 --- a/bun.lock +++ b/bun.lock @@ -8,7 +8,7 @@ "@kevisual/ai": "^0.0.24", "@kevisual/auth": "^2.0.3", "@kevisual/js-filter": "^0.0.5", - "@kevisual/query": "^0.0.48", + "@kevisual/query": "^0.0.49", "@types/busboy": "^1.5.4", "@types/send": "^1.2.1", "@types/ws": "^8.18.1", @@ -25,7 +25,7 @@ "devDependencies": { "@aws-sdk/client-s3": "^3.992.0", "@kevisual/api": "^0.0.52", - "@kevisual/context": "^0.0.6", + "@kevisual/context": "^0.0.8", "@kevisual/local-app-manager": "0.1.32", "@kevisual/logger": "^0.0.4", "@kevisual/oss": "0.0.19", @@ -228,7 +228,7 @@ "@kevisual/auth": ["@kevisual/auth@2.0.3", "", {}, "sha512-4xpijaIhlCTr/DlJaV/gmkCQeg45EO1yxWpRvUX+1jCdVbuxSR0wZrF0SD9oybnjmKWMKDNPLsXyduFjMGcItA=="], - "@kevisual/context": ["@kevisual/context@0.0.6", "", {}, "sha512-w7HBOuO3JH37n6xT6W3FD7ykqHTwtyxOQzTzfEcKDCbsvGB1wVreSxFm2bvoFnnFLuxT/5QMpKlnPrwvmcTGnw=="], + "@kevisual/context": ["@kevisual/context@0.0.8", "", {}, "sha512-DTJpyHI34NE76B7g6f+QlIqiCCyqI2qkBMQE736dzeRDGxOjnbe2iQY9W+Rt2PE6kmymM3qyOmSfNovyWyWrkA=="], "@kevisual/js-filter": ["@kevisual/js-filter@0.0.5", "", {}, "sha512-+S+Sf3K/aP6XtZI2s7TgKOr35UuvUvtpJ9YDW30a+mY0/N8gRuzyKhieBzQN7Ykayzz70uoMavBXut2rUlLgzw=="], @@ -242,7 +242,7 @@ "@kevisual/permission": ["@kevisual/permission@0.0.4", "", {}, "sha512-zwBYPnT/z21W4q2wkklJrxvoYBYWG/+a3iXFDKqXQAnDOcxm/SU1f1N6FQb9KxGKl36/fclVlhxlxqszvKCenQ=="], - "@kevisual/query": ["@kevisual/query@0.0.48", "", {}, "sha512-2zaWaqVNZO4DOZz2hhTjF41PS79he0kNlyctkAXchVUQ2IaiAl2kF/CSRvVor1RpeTU8Nr3xZyEZ+XOodazMVA=="], + "@kevisual/query": ["@kevisual/query@0.0.49", "", {}, "sha512-GrWW+QlBO5lkiqvb7PjOstNtpTQVSR74EHHWjm7YoL9UdT1wuPQXGUApZHmMBSh3NIWCf0AL2G1hPWZMC7YeOQ=="], "@kevisual/router": ["@kevisual/router@0.0.80", "", { "dependencies": { "es-toolkit": "^1.44.0" } }, "sha512-rVwi6Yf411bnNm2x94lMm+s4Csw0Yb7u/aj+VJJ59iouAYhjLuL7Rs1EcARhnQf47cegBJi6zozfGHgLsLHN2w=="], @@ -1010,6 +1010,8 @@ "@kevisual/ai/@kevisual/query": ["@kevisual/query@0.0.38", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-bfvbSodsZyMfwY+1T2SvDeOCKsT/AaIxlVe0+B1R/fNhlg2MDq2CP0L9HKiFkEm+OXrvXcYDMKPUituVUM5J6Q=="], + "@kevisual/api/@kevisual/context": ["@kevisual/context@0.0.6", "", {}, "sha512-w7HBOuO3JH37n6xT6W3FD7ykqHTwtyxOQzTzfEcKDCbsvGB1wVreSxFm2bvoFnnFLuxT/5QMpKlnPrwvmcTGnw=="], + "@kevisual/wxmsg/@kevisual/context": ["@kevisual/context@0.0.4", "", {}, "sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ=="], "@kevisual/wxmsg/@kevisual/query": ["@kevisual/query@0.0.39", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-3UEPBIvtdykNkrby3hvrgrHdgd17Uq+Pnr4zs+JBzATkU2eKaOqtTUJqdyIEwuySCwzGTxrnlUzWP4tziDQDLQ=="], diff --git a/package.json b/package.json index 92a1ef2..0613ba3 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@kevisual/ai": "^0.0.24", "@kevisual/auth": "^2.0.3", "@kevisual/js-filter": "^0.0.5", - "@kevisual/query": "^0.0.48", + "@kevisual/query": "^0.0.49", "@types/busboy": "^1.5.4", "@types/send": "^1.2.1", "@types/ws": "^8.18.1", @@ -66,7 +66,7 @@ "devDependencies": { "@aws-sdk/client-s3": "^3.992.0", "@kevisual/api": "^0.0.52", - "@kevisual/context": "^0.0.6", + "@kevisual/context": "^0.0.8", "@kevisual/local-app-manager": "0.1.32", "@kevisual/logger": "^0.0.4", "@kevisual/oss": "0.0.19", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b46e4f..11a384d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,8 +22,8 @@ importers: specifier: ^0.0.5 version: 0.0.5 '@kevisual/query': - specifier: ^0.0.46 - version: 0.0.46 + specifier: ^0.0.49 + version: 0.0.49 '@types/busboy': specifier: ^1.5.4 version: 1.5.4 @@ -51,12 +51,6 @@ importers: eventemitter3: specifier: ^5.0.4 version: 5.0.4 - pg: - specifier: ^8.18.0 - version: 8.18.0 - pm2: - specifier: ^6.0.14 - version: 6.0.14 send: specifier: ^1.2.1 version: 1.2.1 @@ -71,11 +65,11 @@ importers: specifier: ^3.992.0 version: 3.992.0 '@kevisual/api': - specifier: ^0.0.51 - version: 0.0.51(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: ^0.0.52 + version: 0.0.52(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@kevisual/context': - specifier: ^0.0.6 - version: 0.0.6 + specifier: ^0.0.8 + version: 0.0.8 '@kevisual/local-app-manager': specifier: 0.1.32 version: 0.1.32 @@ -89,8 +83,8 @@ importers: specifier: ^0.0.4 version: 0.0.4 '@kevisual/router': - specifier: 0.0.75 - version: 0.0.75 + specifier: 0.0.80 + version: 0.0.80 '@kevisual/types': specifier: ^0.0.12 version: 0.0.12 @@ -148,6 +142,12 @@ importers: p-queue: specifier: ^9.1.0 version: 9.1.0 + pg: + specifier: ^8.18.0 + version: 8.18.0 + pm2: + specifier: ^6.0.14 + version: 6.0.14 semver: specifier: ^7.7.4 version: 7.7.4 @@ -661,8 +661,8 @@ packages: '@kevisual/ai@0.0.24': resolution: {integrity: sha512-7jvZk1/L//VIClK7usuNgN4ZA9Etgbooka1Sj5quE/0UywR+NNnwqXVZ89Y1fBhI1TkhauDsdJBAtcQ7r/vbVw==} - '@kevisual/api@0.0.51': - resolution: {integrity: sha512-uQzAhcJlJqIjBZ5wHBnDPsKf0/JYRKP7p3eS6TGn/Um4bvJ/AI0mP5QtJson/VcdJOFFwORiF3CJQ1ifm/Cadw==} + '@kevisual/api@0.0.52': + resolution: {integrity: sha512-xWajr5lPqBpAwyWseXqE25tNiD/GUZcFdcQJB/oRtObjRa3rog1/U/otV098WZUZVYPGGeAMriKSd3MFdPFcjQ==} '@kevisual/auth@2.0.3': resolution: {integrity: sha512-4xpijaIhlCTr/DlJaV/gmkCQeg45EO1yxWpRvUX+1jCdVbuxSR0wZrF0SD9oybnjmKWMKDNPLsXyduFjMGcItA==} @@ -673,6 +673,9 @@ packages: '@kevisual/context@0.0.6': resolution: {integrity: sha512-w7HBOuO3JH37n6xT6W3FD7ykqHTwtyxOQzTzfEcKDCbsvGB1wVreSxFm2bvoFnnFLuxT/5QMpKlnPrwvmcTGnw==} + '@kevisual/context@0.0.8': + resolution: {integrity: sha512-DTJpyHI34NE76B7g6f+QlIqiCCyqI2qkBMQE736dzeRDGxOjnbe2iQY9W+Rt2PE6kmymM3qyOmSfNovyWyWrkA==} + '@kevisual/js-filter@0.0.5': resolution: {integrity: sha512-+S+Sf3K/aP6XtZI2s7TgKOr35UuvUvtpJ9YDW30a+mY0/N8gRuzyKhieBzQN7Ykayzz70uoMavBXut2rUlLgzw==} @@ -700,14 +703,14 @@ packages: '@kevisual/query@0.0.39': resolution: {integrity: sha512-3UEPBIvtdykNkrby3hvrgrHdgd17Uq+Pnr4zs+JBzATkU2eKaOqtTUJqdyIEwuySCwzGTxrnlUzWP4tziDQDLQ==} - '@kevisual/query@0.0.46': - resolution: {integrity: sha512-JwHV16ehk8JWM5wiWW5kz9yTg4HrOmmnci5QvwQYdhXYXDzGpUrOxeoz3wloMs4kX3bkowz97iLLW6uQdgUoTw==} + '@kevisual/query@0.0.49': + resolution: {integrity: sha512-GrWW+QlBO5lkiqvb7PjOstNtpTQVSR74EHHWjm7YoL9UdT1wuPQXGUApZHmMBSh3NIWCf0AL2G1hPWZMC7YeOQ==} '@kevisual/router@0.0.70': resolution: {integrity: sha512-vXlIj9jRufhcIfeuPWemjSI+dxdzSmIBq5eRxQzqEfAJ7k+mBPhoI4KxH8vHnwyL30bqm8EdODL/p6Wg8uBw3g==} - '@kevisual/router@0.0.75': - resolution: {integrity: sha512-WBDRKMjNYTP7ymkUUtiQwWYIcqnc+TGo3rFuRze8ovYV2UN5cQxIkIfsDbgWOdV1/v9b57gtiJvJRqWjCBWKRg==} + '@kevisual/router@0.0.80': + resolution: {integrity: sha512-rVwi6Yf411bnNm2x94lMm+s4Csw0Yb7u/aj+VJJ59iouAYhjLuL7Rs1EcARhnQf47cegBJi6zozfGHgLsLHN2w==} '@kevisual/types@0.0.12': resolution: {integrity: sha512-zJXH2dosir3jVrQ6QG4i0+iLQeT9gJ3H+cKXs8ReWboxBSYzUZO78XssVeVrFPsJ33iaAqo4q3DWbSS1dWGn7Q==} @@ -3004,7 +3007,7 @@ snapshots: '@kevisual/permission': 0.0.3 '@kevisual/query': 0.0.38 - '@kevisual/api@0.0.51(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@kevisual/api@0.0.52(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@kevisual/context': 0.0.6 '@kevisual/js-filter': 0.0.5 @@ -3031,6 +3034,8 @@ snapshots: '@kevisual/context@0.0.6': {} + '@kevisual/context@0.0.8': {} + '@kevisual/js-filter@0.0.5': {} '@kevisual/load@0.0.6': @@ -3061,13 +3066,13 @@ snapshots: dependencies: tslib: 2.8.1 - '@kevisual/query@0.0.46': {} + '@kevisual/query@0.0.49': {} '@kevisual/router@0.0.70': dependencies: es-toolkit: 1.44.0 - '@kevisual/router@0.0.75': + '@kevisual/router@0.0.80': dependencies: es-toolkit: 1.44.0 diff --git a/src/routes/app-manager/list.ts b/src/routes/app-manager/list.ts index 7e291d0..6016da4 100644 --- a/src/routes/app-manager/list.ts +++ b/src/routes/app-manager/list.ts @@ -8,6 +8,7 @@ import { User } from '@/models/user.ts'; import { callDetectAppVersion } from './export.ts'; import { eq, and, desc } from 'drizzle-orm'; import { z } from 'zod'; +import { logger } from '@/modules/logger.ts'; app .route({ path: 'app', @@ -105,7 +106,7 @@ app if (!appListModel) { ctx.throw('app not found'); } - console.log('get app', appListModel.id, appListModel.key, appListModel.version); + logger.debug('get app', appListModel.id, appListModel.key, appListModel.version); ctx.body = prefixFix(appListModel, tokenUser.username); }) .addTo(app); @@ -289,6 +290,17 @@ app key: 'publish', middleware: ['auth'], description: '发布应用,将某个版本的应用设置为当前应用的版本', + metadata: { + args: { + data: z.object({ + id: z.string().optional().describe('应用版本记录id'), + username: z.string().optional().describe('用户名,默认为当前用户'), + appKey: z.string().optional().describe('应用的唯一标识'), + version: z.string().describe('应用版本'), + detect: z.boolean().optional().describe('是否自动检测版本列表,默认false'), + }) + } + } }) .define(async (ctx) => { const tokenUser = ctx.state.tokenUser; @@ -346,8 +358,9 @@ app if (!am) { ctx.throw('app 未发现'); } - if (!isDetect) { - const amData = am.data as AppData; + const amData = am.data as AppData; + if (version !== am.version) { + // 发布版本和当前版本不一致 await db.update(schema.kvApp) .set({ data: { ...amData, files }, version: appList.version, updatedAt: new Date().toISOString() }) .where(eq(schema.kvApp.id, am.id)); @@ -413,8 +426,17 @@ app .route({ path: 'app', key: 'detectVersionList', - description: '检测版本列表,minio中的数据自己上传后,根据版本信息,进行替换', + description: '检测版本列表, 对存储内容的网关暴露对应的的模块', middleware: ['auth'], + metadata: { + args: { + data: z.object({ + appKey: z.string().describe('应用的唯一标识'), + version: z.string().describe('应用版本'), + username: z.string().optional().describe('用户名,默认为当前用户'), + }) + } + } }) .define(async (ctx) => { const tokenUser = ctx.state.tokenUser; @@ -469,6 +491,7 @@ app )).limit(1); let am = ams[0]; if (!am) { + // 如果应用不存在,则创建应用记录,版本为0.0.1 const newAms = await db.insert(schema.kvApp).values({ title: appKey, key: appKey, @@ -480,6 +503,7 @@ app }).returning(); am = newAms[0]; } else { + // 如果应用存在,并且版本相同,则更新应用记录的文件列表 const appModels = await db.select().from(schema.kvApp).where(and( eq(schema.kvApp.key, appKey), eq(schema.kvApp.version, version),