1
0
forked from boos/BoosAPI

Merge pull request #214 from zmoon460/main

Fix: postgres 环境下无法保存 模型白名单和群组选择
This commit is contained in:
Cita
2026-03-20 21:21:44 +08:00
committed by GitHub
2 changed files with 22 additions and 6 deletions
@@ -22,6 +22,10 @@ function validateKeyShape(key: string): boolean {
function looksLikeUniqueViolation(error: unknown): boolean { function looksLikeUniqueViolation(error: unknown): boolean {
const message = (error as Error | undefined)?.message || ''; const message = (error as Error | undefined)?.message || '';
if (runtimeDbDialect === 'postgres') {
return message.includes('duplicate key value violates unique constraint') &&
message.includes('downstream_api_keys_key_unique');
}
return message.includes('UNIQUE constraint failed') && message.includes('downstream_api_keys.key'); return message.includes('UNIQUE constraint failed') && message.includes('downstream_api_keys.key');
} }
+14 -2
View File
@@ -90,8 +90,17 @@ function normalizePositiveIntegerOrNull(value: unknown): number | null {
return normalized; return normalized;
} }
function parseJson(value: string | null | undefined): unknown { function parseJson(value: unknown): unknown {
if (!value) return null; if (value === null || value === undefined) return null;
// PostgreSQL JSONB columns are returned as parsed objects/arrays by the pg driver
if (typeof value === 'object') {
return value;
}
// SQLite TEXT columns store JSON as strings that need parsing
if (typeof value === 'string') {
if (value === '') return null;
try { try {
return JSON.parse(value); return JSON.parse(value);
} catch { } catch {
@@ -99,6 +108,9 @@ function parseJson(value: string | null | undefined): unknown {
} }
} }
return null;
}
export function normalizeGroupNameInput(input: unknown): string | null { export function normalizeGroupNameInput(input: unknown): string | null {
if (typeof input !== 'string') return null; if (typeof input !== 'string') return null;
const value = input.trim(); const value = input.trim();