From 4660c8ae0b24d76b77d95c1250c39afe7a073cf1 Mon Sep 17 00:00:00 2001 From: ciat-777 Date: Sun, 15 Mar 2026 23:14:44 +0800 Subject: [PATCH] fix: add downstream API key metadata and update proxy logs schema # Conflicts: # src/server/db/generated/mysql.upgrade.sql # src/server/db/generated/postgres.upgrade.sql # src/server/db/index.ts --- src/server/db/generated/mysql.upgrade.sql | 2 ++ src/server/db/generated/postgres.upgrade.sql | 2 ++ src/server/db/index.ts | 13 ++++++++++++- src/server/db/schemaParity.test.ts | 13 +++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/server/db/generated/mysql.upgrade.sql b/src/server/db/generated/mysql.upgrade.sql index 082deef..498dfc7 100644 --- a/src/server/db/generated/mysql.upgrade.sql +++ b/src/server/db/generated/mysql.upgrade.sql @@ -1,2 +1,4 @@ ALTER TABLE `downstream_api_keys` ADD COLUMN `group_name` TEXT; ALTER TABLE `downstream_api_keys` ADD COLUMN `tags` TEXT; +ALTER TABLE `proxy_logs` ADD COLUMN `downstream_api_key_id` INT; +CREATE INDEX `proxy_logs_downstream_api_key_created_at_idx` ON `proxy_logs` (`downstream_api_key_id`, `created_at`); diff --git a/src/server/db/generated/postgres.upgrade.sql b/src/server/db/generated/postgres.upgrade.sql index f6e05ac..2e50f3f 100644 --- a/src/server/db/generated/postgres.upgrade.sql +++ b/src/server/db/generated/postgres.upgrade.sql @@ -1,2 +1,4 @@ ALTER TABLE "downstream_api_keys" ADD COLUMN "group_name" TEXT; ALTER TABLE "downstream_api_keys" ADD COLUMN "tags" TEXT; +ALTER TABLE "proxy_logs" ADD COLUMN "downstream_api_key_id" INTEGER; +CREATE INDEX "proxy_logs_downstream_api_key_created_at_idx" ON "proxy_logs" ("downstream_api_key_id", "created_at"); diff --git a/src/server/db/index.ts b/src/server/db/index.ts index 35f8089..010d0fa 100644 --- a/src/server/db/index.ts +++ b/src/server/db/index.ts @@ -550,6 +550,18 @@ function ensureProxyLogBillingDetailsSchema() { proxyLogBillingDetailsColumnAvailable = true; } +function ensureProxyLogDownstreamApiKeyIdSchema() { + if (!tableExists('proxy_logs')) { + return; + } + + if (!tableColumnExists('proxy_logs', 'downstream_api_key_id')) { + execSqliteLegacyCompat('ALTER TABLE proxy_logs ADD COLUMN downstream_api_key_id integer;'); + } + + proxyLogDownstreamApiKeyIdColumnAvailable = true; +} + function normalizeSchemaErrorMessage(error: unknown): string { if (typeof error === 'object' && error && 'message' in error) { return String((error as { message?: unknown }).message || ''); @@ -639,7 +651,6 @@ function ensureProxyLogDownstreamApiKeyIdSchema() { proxyLogDownstreamApiKeyIdColumnAvailable = true; } - export async function hasProxyLogDownstreamApiKeyIdColumn(): Promise { if (proxyLogDownstreamApiKeyIdColumnAvailable !== null) { return proxyLogDownstreamApiKeyIdColumnAvailable; diff --git a/src/server/db/schemaParity.test.ts b/src/server/db/schemaParity.test.ts index 8a848d5..d5f692c 100644 --- a/src/server/db/schemaParity.test.ts +++ b/src/server/db/schemaParity.test.ts @@ -78,4 +78,17 @@ describe('database schema parity', () => { expect(duplicatedSpecs).toEqual([]); }); + + it('keeps proxy_logs downstream api key schema in the generated contract artifacts', () => { + const contract = JSON.parse(readFileSync(schemaContractPath, 'utf8')) as SchemaContract; + const mysqlBootstrap = readFileSync(resolve(generatedDir, 'mysql.bootstrap.sql'), 'utf8'); + const postgresBootstrap = readFileSync(resolve(generatedDir, 'postgres.bootstrap.sql'), 'utf8'); + + expect(contract.tables.proxy_logs?.columns.downstream_api_key_id?.logicalType).toBe('integer'); + expect(contract.indexes.some((index) => index.name === 'proxy_logs_downstream_api_key_created_at_idx')).toBe(true); + expect(mysqlBootstrap).toContain('`downstream_api_key_id`'); + expect(mysqlBootstrap).toContain('`proxy_logs_downstream_api_key_created_at_idx`'); + expect(postgresBootstrap).toContain('"downstream_api_key_id"'); + expect(postgresBootstrap).toContain('"proxy_logs_downstream_api_key_created_at_idx"'); + }); });