feat(batch): add live reuse admin verification flow

This commit is contained in:
phamnazage-jpg
2026-05-27 20:23:42 +08:00
parent 02580cda0b
commit ebd86a4256
16 changed files with 1768 additions and 9 deletions

View File

@@ -112,6 +112,47 @@ func (r *ProvidersRepo) ListByProviderID(ctx context.Context, providerID string)
return providers, nil
}
func (r *ProvidersRepo) ListByBaseURL(ctx context.Context, baseURL string) ([]Provider, error) {
baseURL = strings.TrimSpace(baseURL)
if baseURL == "" {
return nil, fmt.Errorf("base_url is required")
}
rows, err := r.db.QueryContext(ctx, `SELECT id, pack_id, provider_id, display_name, base_url, platform, account_type, default_models_json, smoke_test_model, group_template_json, channel_template_json, plan_template_json, import_options_json, manifest_json FROM providers WHERE base_url = ? ORDER BY id`, baseURL)
if err != nil {
return nil, fmt.Errorf("query providers by base_url %q: %w", baseURL, err)
}
defer rows.Close()
providers := make([]Provider, 0)
for rows.Next() {
var provider Provider
if err := rows.Scan(
&provider.ID,
&provider.PackID,
&provider.ProviderID,
&provider.DisplayName,
&provider.BaseURL,
&provider.Platform,
&provider.AccountType,
&provider.DefaultModelsJSON,
&provider.SmokeTestModel,
&provider.GroupTemplateJSON,
&provider.ChannelTemplateJSON,
&provider.PlanTemplateJSON,
&provider.ImportOptionsJSON,
&provider.ManifestJSON,
); err != nil {
return nil, fmt.Errorf("scan provider by base_url %q: %w", baseURL, err)
}
providers = append(providers, provider)
}
if err := rows.Err(); err != nil {
return nil, fmt.Errorf("iterate providers by base_url %q: %w", baseURL, err)
}
return providers, nil
}
func (r *ProvidersRepo) GetByPackIDAndProviderID(ctx context.Context, packID int64, providerID string) (Provider, error) {
if packID <= 0 {
return Provider{}, fmt.Errorf("pack_id is required")

View File

@@ -55,6 +55,24 @@ func TestProvidersRepoListByProviderID(t *testing.T) {
}
}
func TestProvidersRepoListByBaseURL(t *testing.T) {
store := openTestDB(t)
packID1 := createTestPackWithSuffix(t, store, "base-a")
packID2 := createTestPackWithSuffix(t, store, "base-b")
store.Providers().Create(context.Background(), Provider{PackID: packID1, ProviderID: "minimax-53hk", DisplayName: "MM1", BaseURL: "https://api.53hk.cn/v1", Platform: "openai"})
store.Providers().Create(context.Background(), Provider{PackID: packID2, ProviderID: "api-53hk-42797c06", DisplayName: "MM2", BaseURL: "https://api.53hk.cn/v1", Platform: "openai"})
providers, err := store.Providers().ListByBaseURL(context.Background(), "https://api.53hk.cn/v1")
if err != nil {
t.Fatalf("ListByBaseURL() error = %v", err)
}
if len(providers) != 2 {
t.Fatalf("ListByBaseURL() count = %d, want 2", len(providers))
}
}
func TestProvidersRepoListByPackID(t *testing.T) {
store := openTestDB(t)
packID := createTestPack(t, store)
@@ -105,6 +123,18 @@ func TestProvidersRepoListByProviderIDEmpty(t *testing.T) {
}
}
func TestProvidersRepoListByBaseURLEmpty(t *testing.T) {
store := openTestDB(t)
providers, err := store.Providers().ListByBaseURL(context.Background(), "https://missing.example.com/v1")
if err != nil {
t.Fatalf("ListByBaseURL() error = %v", err)
}
if len(providers) != 0 {
t.Fatalf("ListByBaseURL() count = %d, want 0", len(providers))
}
}
func TestProvidersRepoUpsertCreatesNew(t *testing.T) {
store := openTestDB(t)
packID := createTestPack(t, store)