fix: 质量修复 — ESLint 规则 TS6 兼容 + catch 注解 + 空函数体注释化 + 后端架构对齐 + 前端红线修复

- enforce-catch-type: 增加 TSUnknownKeyword 判断,消除28个 TS6 假阳性
- no-empty-function: 统一为注释方案,移除测试/生产分支和 eslint-disable 引导
- logger.ts: 空函数体改为注释说明,删除无用 eslint-disable 指令
- 补充15处 catch 子句 : unknown 类型注解
- 清理7个测试文件失效 eslint-disable 指令
- chat/send.ts: 提取 getModelWithProvider DAO,消除直接 Drizzle 操作
- projects/update.ts: 修复死代码+条件逻辑 bug
- providers/update.ts: 补充至少一个字段校验
- 前端: inline style → CSS className, ProviderFormModal whitespace 校验
- 开发文档: 更新 Zod 使用说明(AI SDK 框架级约束)
This commit is contained in:
2026-06-01 23:11:42 +08:00
parent 0d60120219
commit ab7b7fb189
28 changed files with 124 additions and 83 deletions

View File

@@ -11,4 +11,13 @@ export {
} from "./conversations";
export { loadMigrationsFromDir, type MigrationRecord } from "./load-migrations";
export { runMigrations } from "./migrate";
export {
createModel,
deleteModel,
getModel,
getModelsByProviderId,
getModelWithProvider,
listModels,
updateModel,
} from "./models";
export { conversations, messages, projects, schemaMigrations } from "./schema";

View File

@@ -90,6 +90,38 @@ export function getModelsByProviderId(raw: Database, providerId: string): number
return Number(result?.count ?? 0);
}
export function getModelWithProvider(
raw: Database,
modelId: string,
):
| { error: string; status: number }
| {
model: { modelId: string; name: string; providerId: string };
provider: { apiKey: string; baseUrl: string; id: string; type: string };
} {
const db = wrap(raw);
const row = db.select().from(models).where(eq(models.id, modelId)).get();
if (!row) return { error: "模型不存在", status: 404 };
const providerRow = db.select().from(providers).where(eq(providers.id, row.providerId)).get();
if (!providerRow) return { error: "供应商不存在", status: 404 };
return {
model: {
modelId: row.modelId,
name: row.name,
providerId: row.providerId,
},
provider: {
apiKey: providerRow.apiKey,
baseUrl: providerRow.baseUrl,
id: providerRow.id,
type: providerRow.type,
},
};
}
export function listModels(
raw: Database,
options: { keyword?: string; page: number; pageSize: number; providerId?: string },