refactor: 简化模型管理,移除启用/禁用,优化测试和布局
- 移除供应商/模型启用禁用能力,清理DB schema/migration/API/前端 - 供应商测试改为Base URL连通性+/models探测 - 新增POST /api/models/test模型连接测试 - 新增GET /api/providers/options专用供应商选项接口 - 统一工具栏为ModelsToolbar,参考项目管理布局 - 模型弹窗优化:默认能力、响应式3列标签、并排数值 - 前后端正整数校验、供应商下拉loading/error/empty状态 - 表格列宽统一,操作列/名称列固定宽度
This commit is contained in:
@@ -3,7 +3,7 @@ import type Database from "bun:sqlite";
|
||||
import { and, desc, eq, like, sql } from "drizzle-orm";
|
||||
import { drizzle } from "drizzle-orm/bun-sqlite";
|
||||
|
||||
import type { CreateProviderRequest, Provider, UpdateProviderRequest } from "../../shared/api";
|
||||
import type { CreateProviderRequest, Provider, ProviderOption, UpdateProviderRequest } from "../../shared/api";
|
||||
|
||||
import { providers } from "./schema";
|
||||
|
||||
@@ -30,7 +30,6 @@ export function createProvider(
|
||||
apiKey,
|
||||
baseUrl,
|
||||
createdAt: now,
|
||||
enabled: true,
|
||||
id,
|
||||
name,
|
||||
type: request.type,
|
||||
@@ -58,32 +57,6 @@ export function deleteProvider(raw: Database, id: string): { error: string; stat
|
||||
return { success: true };
|
||||
}
|
||||
|
||||
export function disableProvider(raw: Database, id: string): { error: string; status: number } | { provider: Provider } {
|
||||
const db = wrap(raw);
|
||||
const existing = db.select().from(providers).where(eq(providers.id, id)).get();
|
||||
if (!existing) return { error: "供应商不存在", status: 404 };
|
||||
if (!existing.enabled) return { error: "供应商已禁用", status: 409 };
|
||||
|
||||
const now = new Date().toISOString();
|
||||
db.update(providers).set({ enabled: false, updatedAt: now }).where(eq(providers.id, id)).run();
|
||||
|
||||
const updated = db.select().from(providers).where(eq(providers.id, id)).get();
|
||||
return { provider: toProvider(updated!) };
|
||||
}
|
||||
|
||||
export function enableProvider(raw: Database, id: string): { error: string; status: number } | { provider: Provider } {
|
||||
const db = wrap(raw);
|
||||
const existing = db.select().from(providers).where(eq(providers.id, id)).get();
|
||||
if (!existing) return { error: "供应商不存在", status: 404 };
|
||||
if (existing.enabled) return { error: "供应商已启用", status: 409 };
|
||||
|
||||
const now = new Date().toISOString();
|
||||
db.update(providers).set({ enabled: true, updatedAt: now }).where(eq(providers.id, id)).run();
|
||||
|
||||
const updated = db.select().from(providers).where(eq(providers.id, id)).get();
|
||||
return { provider: toProvider(updated!) };
|
||||
}
|
||||
|
||||
export function getProvider(raw: Database, id: string): { error: string; status: number } | { provider: Provider } {
|
||||
const db = wrap(raw);
|
||||
const row = db.select().from(providers).where(eq(providers.id, id)).get();
|
||||
@@ -92,6 +65,17 @@ export function getProvider(raw: Database, id: string): { error: string; status:
|
||||
return { provider: toProvider(row) };
|
||||
}
|
||||
|
||||
export function listProviderOptions(raw: Database): ProviderOption[] {
|
||||
const db = wrap(raw);
|
||||
const rows = db
|
||||
.select({ id: providers.id, name: providers.name, type: providers.type })
|
||||
.from(providers)
|
||||
.orderBy(desc(providers.createdAt))
|
||||
.all();
|
||||
|
||||
return rows;
|
||||
}
|
||||
|
||||
export function listProviders(
|
||||
raw: Database,
|
||||
options: { keyword?: string; page: number; pageSize: number },
|
||||
@@ -189,7 +173,6 @@ function toProvider(row: typeof providers.$inferSelect): Provider {
|
||||
apiKey: row.apiKey,
|
||||
baseUrl: row.baseUrl,
|
||||
createdAt: row.createdAt,
|
||||
enabled: row.enabled,
|
||||
id: row.id,
|
||||
name: row.name,
|
||||
type: row.type,
|
||||
|
||||
Reference in New Issue
Block a user