9router/src/app/api/providers/[id]/route.js

100 lines
3.2 KiB
JavaScript
Raw Normal View History

2026-01-04 21:58:59 -05:00
import { NextResponse } from "next/server";
import { getProviderConnectionById, updateProviderConnection, deleteProviderConnection } from "@/models";
2026-01-04 21:58:59 -05:00
// GET /api/providers/[id] - Get single connection
export async function GET(request, { params }) {
try {
const { id } = await params;
const connection = await getProviderConnectionById(id);
if (!connection) {
return NextResponse.json({ error: "Connection not found" }, { status: 404 });
}
// Hide sensitive fields
const result = { ...connection };
delete result.apiKey;
delete result.accessToken;
delete result.refreshToken;
delete result.idToken;
return NextResponse.json({ connection: result });
} catch (error) {
console.log("Error fetching connection:", error);
return NextResponse.json({ error: "Failed to fetch connection" }, { status: 500 });
}
}
// PUT /api/providers/[id] - Update connection
export async function PUT(request, { params }) {
try {
const { id } = await params;
const body = await request.json();
const {
name,
priority,
globalPriority,
defaultModel,
isActive,
apiKey,
testStatus,
lastError,
lastErrorAt,
providerSpecificData
} = body;
2026-01-04 21:58:59 -05:00
const existing = await getProviderConnectionById(id);
if (!existing) {
return NextResponse.json({ error: "Connection not found" }, { status: 404 });
}
const updateData = {};
if (name !== undefined) updateData.name = name;
if (priority !== undefined) updateData.priority = priority;
if (globalPriority !== undefined) updateData.globalPriority = globalPriority;
if (defaultModel !== undefined) updateData.defaultModel = defaultModel;
if (isActive !== undefined) updateData.isActive = isActive;
if (apiKey && existing.authType === "apikey") updateData.apiKey = apiKey;
if (testStatus !== undefined) updateData.testStatus = testStatus;
if (lastError !== undefined) updateData.lastError = lastError;
if (lastErrorAt !== undefined) updateData.lastErrorAt = lastErrorAt;
if (providerSpecificData !== undefined) {
updateData.providerSpecificData = {
...(existing.providerSpecificData || {}),
...providerSpecificData,
};
}
2026-01-04 21:58:59 -05:00
const updated = await updateProviderConnection(id, updateData);
// Hide sensitive fields
const result = { ...updated };
delete result.apiKey;
delete result.accessToken;
delete result.refreshToken;
delete result.idToken;
return NextResponse.json({ connection: result });
} catch (error) {
console.log("Error updating connection:", error);
return NextResponse.json({ error: "Failed to update connection" }, { status: 500 });
}
}
// DELETE /api/providers/[id] - Delete connection
export async function DELETE(request, { params }) {
try {
const { id } = await params;
const deleted = await deleteProviderConnection(id);
if (!deleted) {
return NextResponse.json({ error: "Connection not found" }, { status: 404 });
}
return NextResponse.json({ message: "Connection deleted successfully" });
} catch (error) {
console.log("Error deleting connection:", error);
return NextResponse.json({ error: "Failed to delete connection" }, { status: 500 });
}
}