AI-admin: fiks provider-swap ved å droppe UNIQUE-constraint på prioritet
- Fjernet UNIQUE(alias_id, priority) — prioritet er kun for sortering - Forenklet swap-endpoint til to rene UPDATE-statements - Renummerert kjapp-providers til sekvensielle prioriteter Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
7c81e80742
commit
b0d0202eb8
2 changed files with 21 additions and 25 deletions
10
migrations/0013_drop_priority_unique.sql
Normal file
10
migrations/0013_drop_priority_unique.sql
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
-- 0013_drop_priority_unique.sql
|
||||||
|
-- Fjern UNIQUE-constraint på (alias_id, priority).
|
||||||
|
-- Prioritet brukes kun for sortering/fallback-rekkefølge, ikke som naturlig nøkkel.
|
||||||
|
-- Constrainten hindrer atomisk swap og krever unødvendig kompleksitet.
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
ALTER TABLE ai_model_providers DROP CONSTRAINT IF EXISTS ai_model_providers_alias_id_priority_key;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
@ -2,43 +2,29 @@ import { json, error } from '@sveltejs/kit';
|
||||||
import type { RequestHandler } from './$types';
|
import type { RequestHandler } from './$types';
|
||||||
import { sql } from '$lib/server/db';
|
import { sql } from '$lib/server/db';
|
||||||
|
|
||||||
/** POST — bytt prioritet mellom to providers (atomisk) */
|
/** POST — bytt prioritet mellom to providers */
|
||||||
export const POST: RequestHandler = async ({ request, locals }) => {
|
export const POST: RequestHandler = async ({ request, locals }) => {
|
||||||
if (!locals.workspace || !locals.user) error(401);
|
if (!locals.workspace || !locals.user) error(401);
|
||||||
|
|
||||||
const { id_a, id_b } = await request.json();
|
const { id_a, id_b } = await request.json();
|
||||||
if (!id_a || !id_b) error(400, 'id_a og id_b kreves');
|
if (!id_a || !id_b) error(400, 'id_a og id_b kreves');
|
||||||
|
|
||||||
// Atomisk swap via CTE — unngår UNIQUE-constraint-brudd
|
// Hent begge providers
|
||||||
const rows = await sql`
|
const [a] = await sql`SELECT id, alias_id, priority FROM ai_model_providers WHERE id = ${id_a}::uuid`;
|
||||||
WITH swap AS (
|
const [b] = await sql`SELECT id, alias_id, priority FROM ai_model_providers WHERE id = ${id_b}::uuid`;
|
||||||
SELECT
|
|
||||||
a.id AS id_a, a.priority AS pri_a,
|
|
||||||
b.id AS id_b, b.priority AS pri_b
|
|
||||||
FROM ai_model_providers a, ai_model_providers b
|
|
||||||
WHERE a.id = ${id_a}::uuid AND b.id = ${id_b}::uuid
|
|
||||||
AND a.alias_id = b.alias_id
|
|
||||||
),
|
|
||||||
update_a AS (
|
|
||||||
UPDATE ai_model_providers SET priority = -1, updated_at = now()
|
|
||||||
WHERE id = (SELECT id_a FROM swap)
|
|
||||||
),
|
|
||||||
update_b AS (
|
|
||||||
UPDATE ai_model_providers SET priority = (SELECT pri_a FROM swap), updated_at = now()
|
|
||||||
WHERE id = (SELECT id_b FROM swap)
|
|
||||||
)
|
|
||||||
UPDATE ai_model_providers SET priority = (SELECT pri_b FROM swap), updated_at = now()
|
|
||||||
WHERE id = (SELECT id_a FROM swap)
|
|
||||||
RETURNING id
|
|
||||||
`;
|
|
||||||
|
|
||||||
if (rows.length === 0) error(400, 'Kunne ikke bytte — sjekk at begge tilhører samme alias');
|
if (!a || !b) error(404, 'Provider ikke funnet');
|
||||||
|
if (a.alias_id !== b.alias_id) error(400, 'Providers tilhører ikke samme alias');
|
||||||
|
|
||||||
|
// Bytt prioriteter
|
||||||
|
await sql`UPDATE ai_model_providers SET priority = ${b.priority}, updated_at = now() WHERE id = ${a.id}`;
|
||||||
|
await sql`UPDATE ai_model_providers SET priority = ${a.priority}, updated_at = now() WHERE id = ${b.id}`;
|
||||||
|
|
||||||
// Returner oppdaterte providers for aliaset
|
// Returner oppdaterte providers for aliaset
|
||||||
const updated = await sql`
|
const updated = await sql`
|
||||||
SELECT id, alias_id, priority, litellm_model, api_key_env, is_active, extra_params
|
SELECT id, alias_id, priority, litellm_model, api_key_env, is_active, extra_params
|
||||||
FROM ai_model_providers
|
FROM ai_model_providers
|
||||||
WHERE alias_id = (SELECT alias_id FROM ai_model_providers WHERE id = ${id_a}::uuid)
|
WHERE alias_id = ${a.alias_id}
|
||||||
ORDER BY priority ASC
|
ORDER BY priority ASC
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue