feat: 全栈 Logger 依赖注入 — DB/Route/AI 层传参 + 前端 Logger + 测试更新 + 归档 add-frontend-logger

This commit is contained in:
2026-06-01 20:32:19 +08:00
parent 4c72754739
commit 844562303c
60 changed files with 1648 additions and 778 deletions

View File

@@ -6,9 +6,11 @@ import type { Provider, ProviderOption, RuntimeMode } from "../../../src/shared/
import { createModel } from "../../../src/server/db/models";
import { createProvider } from "../../../src/server/db/providers";
import { createNoopLogger } from "../../../src/server/logger";
import { createMigratedMemoryTestDatabase } from "../../helpers";
const MODE: RuntimeMode = "test";
const LOG = createNoopLogger();
void mock.module("ai", () => ({
createProviderRegistry: () => ({
@@ -18,48 +20,52 @@ void mock.module("ai", () => ({
async function createProviderViaHandler(req: Request, db: Database): Promise<Response> {
const { handleCreateProvider: h } = await import("../../../src/server/routes/providers/create");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
function createTestProvider(db: Database, name = "测试供应商", baseUrl = "https://api.test.com/v1"): Provider {
const result = createProvider(db, {
apiKey: "sk-test",
baseUrl,
name,
type: "openai",
});
const result = createProvider(
db,
{
apiKey: "sk-test",
baseUrl,
name,
type: "openai",
},
LOG,
);
if ("error" in result) throw new Error(result.error);
return result.provider;
}
async function deleteProviderViaHandler(req: Request, db: Database): Promise<Response> {
const { handleDeleteProvider: h } = await import("../../../src/server/routes/providers/delete");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function getProviderViaHandler(req: Request, db: Database): Promise<Response> {
const { handleGetProvider: h } = await import("../../../src/server/routes/providers/get");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function listProviderOptionsViaHandler(_req: Request, db: Database): Promise<Response> {
const { handleListProviderOptions: h } = await import("../../../src/server/routes/providers/options");
return h(db, MODE);
return h(db, MODE, LOG);
}
async function listProvidersViaHandler(req: Request, db: Database): Promise<Response> {
const { handleListProviders: h } = await import("../../../src/server/routes/providers/list");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function testProviderConfigViaHandler(req: Request, db: Database): Promise<Response> {
const { handleTestProviderConfig: h } = await import("../../../src/server/routes/providers/test");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function updateProviderViaHandler(req: Request, db: Database): Promise<Response> {
const { handleUpdateProvider: h } = await import("../../../src/server/routes/providers/update");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function withProviderServer(
@@ -182,12 +188,16 @@ describe("供应商 API 路由", () => {
test("DELETE /api/providers/:id 存在关联模型时返回 409", async () => {
await withRouteDb(async (db) => {
const provider = createTestProvider(db, "有关联模型");
const modelResult = createModel(db, {
capabilities: ["text"],
modelId: "gpt-4o",
name: "GPT-4o",
providerId: provider.id,
});
const modelResult = createModel(
db,
{
capabilities: ["text"],
modelId: "gpt-4o",
name: "GPT-4o",
providerId: provider.id,
},
LOG,
);
if ("error" in modelResult) throw new Error(modelResult.error);
const req = new Request(`http://localhost/api/providers/${provider.id}`, { method: "DELETE" });