fix: recover orphaned DeepSeek key + remove retired settings slots

Migration copies ANTHROPIC_API_KEY value → DEEPSEEK_API_KEY (DeepSeek key
was saved before the rename), then deletes ANTHROPIC_API_KEY and
VOYAGE_API_KEY rows. ALLOWED_KEYS now only lists active provider keys.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPf5Rc8QPx6V8KLEEgfKEQ
This commit is contained in:
2026-07-13 07:11:09 +08:00
co-authored by Claude Sonnet 4.6
parent d10c690c12
commit c00879bf66
2 changed files with 23 additions and 1 deletions
-1
View File
@@ -4,7 +4,6 @@ import { NextRequest, NextResponse } from 'next/server'
import { createClient } from '@/lib/supabase/server'
const ALLOWED_KEYS = [
'ANTHROPIC_API_KEY',
'DEEPSEEK_API_KEY',
'GOOGLE_AI_API_KEY',
'META_WHATSAPP_PHONE_NUMBER_ID',
@@ -0,0 +1,23 @@
-- Reconcile app_settings after provider switches:
-- DeepSeek key was saved under ANTHROPIC_API_KEY slot (before rename) — recover it.
-- Remove retired ANTHROPIC_API_KEY and VOYAGE_API_KEY slots.
-- Ensure DeepSeek slot exists
insert into app_settings (key, value) values ('DEEPSEEK_API_KEY', '')
on conflict (key) do nothing;
-- Copy orphaned value: ANTHROPIC_API_KEY → DEEPSEEK_API_KEY (only when DEEPSEEK_API_KEY is empty and ANTHROPIC has a value)
update app_settings dk
set value = ak.value, updated_at = now()
from app_settings ak
where dk.key = 'DEEPSEEK_API_KEY'
and ak.key = 'ANTHROPIC_API_KEY'
and coalesce(dk.value, '') = ''
and coalesce(ak.value, '') <> '';
-- Ensure Gemini slot exists
insert into app_settings (key, value) values ('GOOGLE_AI_API_KEY', '')
on conflict (key) do nothing;
-- Remove retired provider slots
delete from app_settings where key in ('ANTHROPIC_API_KEY', 'VOYAGE_API_KEY');